[
  {
    "path": ".JuliaFormatter.toml",
    "content": "# Configuration file for JuliaFormatter.jl\n # For more information, see: https://domluna.github.io/JuliaFormatter.jl/stable/config/\n\n always_for_in = true\n always_use_return = true\n margin = 90\n remove_extra_newlines = true\n short_to_long_function_def = true"
  },
  {
    "path": ".codecov.yml",
    "content": "status:\n    project:                 # measuring the overall project coverage\n      default:               # context, you can create multiple ones with custom titles\n        enabled: yes         # must be yes|true to enable this status\n        target: 80%\n        threshold: 5%        # allowed to drop X% and still result in a \"success\" PR status\n      branches:\n        threshold: 5%        # allowed to drop X% and still result in a \"success\" commit status"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Help us track down bugs in Alpine.\ntitle: ''\nlabels: 'bug'\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is. Simple examples which reproduce the bug will be helpful.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: 'Suggest an idea for Alpine. '\ntitle: ''\nlabels: 'enhancement'\nassignees: ''\n\n---\n\nWelcome to Alpine! You can use this Github issue to suggest a new feature for Alpine.\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. \n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n"
  },
  {
    "path": ".github/workflows/CompatHelper.yml",
    "content": "name: CompatHelper\non:\n  schedule:\n    - cron: 0 0 * * *\n  workflow_dispatch:\njobs:\n  CompatHelper:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Pkg.add(\"CompatHelper\")\n        run: julia -e 'using Pkg; Pkg.add(\"CompatHelper\")'\n      - name: CompatHelper.main()\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }}\n        run: julia -e 'using CompatHelper; CompatHelper.main()'"
  },
  {
    "path": ".github/workflows/TagBot.yml",
    "content": "name: TagBot\non:\n  issue_comment:\n    types:\n      - created\n  workflow_dispatch:\njobs:\n  TagBot:\n    if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: JuliaRegistries/TagBot@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          ssh: ${{ secrets.DOCUMENTER_KEY }}"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\non:\n  push:\n    branches:\n      - master\n      - release-*\n  pull_request:\n    types: [opened, synchronize, reopened]\n# needed to allow julia-actions/cache to delete old caches that it has created\npermissions:\n  actions: write\n  contents: read\njobs:\n  test:\n    name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }}\n    runs-on: ${{ matrix.os }}\n    strategy:\n      fail-fast: false\n      matrix:\n        version: ['1']\n        os: [ubuntu-latest, macOS-latest, windows-latest]\n        arch: [x64]\n    steps:\n      - uses: actions/checkout@v4\n      - uses: julia-actions/setup-julia@v2\n        with:\n          version: ${{ matrix.version }}\n          arch: ${{ matrix.arch }}\n      - uses: julia-actions/cache@v2\n      - uses: julia-actions/julia-buildpkg@v1\n      - uses: julia-actions/julia-runtest@v1\n        with:\n          depwarn: error\n      - uses: julia-actions/julia-processcoverage@v1\n      - uses: codecov/codecov-action@v4\n        with:\n          file: lcov.info\n"
  },
  {
    "path": ".github/workflows/documentation.yml",
    "content": "name: Documentation\non:\n  push:\n    branches: [master]\n    tags: '*'\n  pull_request:\n    types: [opened, synchronize, reopened]\njobs:\n  docs:\n    if: \"!contains(github.event.head_commit.message, 'skip ci')\"\n    name: Documentation\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: julia-actions/setup-julia@latest\n        with:\n          version: '1'\n      - name: Install Dependencies\n        run: julia --project=docs -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()'\n      - name: Build and Deploy\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} \n        run: julia --project=docs docs/make.jl\n"
  },
  {
    "path": ".github/workflows/format_check.yml",
    "content": "name: format-check\non:\n  push:\n    branches:\n      - master\n      - release-*\n  pull_request:\n    types: [opened, synchronize, reopened]\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: julia-actions/setup-julia@latest\n        with:\n          version: '1'\n      - uses: actions/checkout@v4\n      - name: Format check\n        shell: julia --color=yes {0}\n        run: |\n          using Pkg\n          Pkg.add(PackageSpec(name=\"JuliaFormatter\", version=\"1\"))\n          using JuliaFormatter\n          format(\"src/MOI_wrapper\", verbose=true)\n          format(\"test\", verbose=true)\n          format(\"docs\", verbose=true)\n          out = String(read(Cmd(`git diff`)))\n          if isempty(out)\n              exit(0)\n          end\n          @error \"Some files have not been formatted !!!\"\n          write(stdout, out)\n          exit(1)\n"
  },
  {
    "path": ".gitignore",
    "content": "# Files generated by invoking Julia with --code-coverage\n*.jl.cov\n*.jl.*.cov\n\n# Files generated by invoking Julia with --track-allocation\n*.jl.mem\n\n.DS_Store\n\n# Build artifacts for creating documentation generated by the Documenter package\ndocs/build/\ndocs/site/\n\n# File generated by Pkg, the package manager, based on a corresponding Project.toml\n# It records a fixed state of all packages used by the project. As such, it should not be\n# committed for packages, but should be committed for applications that require a static\n# environment.\nManifest.toml\ntest/examples/Manifest.toml\ndocs/Manifest.toml\n\n.vscode\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Alpine.jl Change Log\n\n## v0.5.8\n- Relax tests for upcoming MOI release (#257)\n- Add support for `MOI.ScalarNonlinearFunction` (#258)\n- Relax tests that are flakey on Windows (#259)\n\n## v0.5.7\n- Fix failing tests (#241), (#250)\n- Update `Project.toml` (#239), (#246), (#249)\n- Remove unnecessary Alp module reference (#247)\n- Remove unnecessary `Base.eval` calls (#251)\n- Fix empty summations (#252), (#253)\n- Fix support for `MOI.Integer` variables (#245)\n- Loosen tolerances in tests (#254)\n- Update versions in GitHub actions (#255)\n\n## v0.5.6\n- Minor Readme updates (#235)\n- Implemented RawStatusString for solution summary (#238)\n- Dependency update for docs\n- Bug fix in LB exceeding UB outside relative tolerance bounds\n\n## v0.5.5\n- Removed use of e.g. for JuMP documentation in README (#230)\n- Dropped support for integer variable MINLPs in `examples` (#233)\n- Updated README in `examples` folder to clarify `minlp_solver` dependency (#232)\n\n## v0.5.4\n- Added `random_QCQPs` folder with python generator files for all the instances appearing in this paper: https://arxiv.org/pdf/2301.00306.pdf\n- Minor tweaks in docs and main README file\n\n## v0.5.3\n- Removed compatability on Pkg #225\n- Added raw NL expression interface example for a dense multilinear problem\n\n## v0.5.2\n- Fixed issue with `@NLconstraint` created from a quadratic `@expression` (#221)\n- Fixed error message in nlexpr parsing of constraints with non-integer exponents (#223)\n- Clean up in `expr_is_fractional_exponent` (related to #223)\n- Added dependency on `Pkg` package\n- Added unit tests for testing multilinear binary products (`hmittelman`)\n\n## v0.5.1\n- Re-org and clean-up in partition additions within bounding MIP model\n- Updated to cheaper `AffExpr` evaluation within linking constraints\n- Minor update in gap evaluataion after OBBT termination with fixed iterations\n- Added solver option `use_start_as_incumbent` to use warm start value as also an intial incumbent solution  in presolve without invoking a local solver. (#218)\n- Added unit tests for testing warm start point\n\n## v0.5.0\n- New feature: Linking constraints for multilinear terms with uniform and adaptive partitions (significant speed up in run times for multilinear problems: http://www.optimization-online.org/DB_HTML/2022/07/8974.html) (@jongeunkim)\n- Added dependency on Combinatorics package for linking constraints\n- Added unit tests for linking constraints feature\n- Changed Cbc test dependency to HiGHS solver\n- Dropped a few redundant unit tests\n- Dropped support for (slower) piecewise McCormick formulations\n- Changed `disc_ratio` to `partition_scaling_factor`\n- Added JuliaFormatter.toml and formatting workfow\n\n## v0.4.3\n- Dropped support for checking solver availability. User can choose to use any MILP, MINLP and/or NLP solver with Alpine\n- `GRB_ENV` now works with Gurobi solver to avoid printing License info multiple times during iterations\n- Updates tests to reflect above changes\n- Default `convhull_warmstart` set to `true` for a MIP solver in bounding-MIP iterations\n\n## v0.4.2\n- Fix support for JuMP v1.2 (@odow)\n\n## v0.4.1\n- Added MOI attribute for tightened bounds post-OBBT (@blegat)\n\n## v0.4.0\n- Fixed OBBT convergence issue due to average bound reduction\n- Added new termination criteria to OBBT: max_reduction, max_width, rel_gap at every iteration of OBBT\n- Fixed the issue to tighten only original nonlinear variables (aux vars were counted before)\n- `presolve_bt_bound_tol` changed to `1E-4` (numerically stable)\n- `presolve_bt_obj_bound_tol` added to avoid infeasibility in OBBT iterations when bounds are tights\n- Parameter tuning (tolerances) for stable OBBT convergence\n- Fixed bug in `best_rel_gap` evaluation\n- Bug fixed to check any user-defined operators, and disable hessians based on availabe features. Unit test added for this\n- Now, Alpine terminates (w/o invoking `global_solve`) when presolve finds the global optimum due to `rel_gap` eval at every OBBT iteration. Unit test added for this.\n- Post-OBBT optimality gap (`presolve_best_rel_gap`) user-option added to be able to extract best opt gap after OBBT when Alpine terminates\n- `apply_partitioning` feature added to be able to terminate Alpine without applying the MIP-based paritioning algorithm (mainly to run only OBBT)\n- Revised unit test (in `test_algorithm`) for reduced run times\n\n## v0.3.0\n- JuMP v1.0+ in examples\n- Pavito v0.3.5 support\n- Dropped support for redundant `run_bounding_iteration` function\n- Clean-up and re-org of optimizer structs and `MOI_wrapper` functions\n- Bug fix in `relax_integrality` under presolve\n- Added Rosenbrock function\n- Added user-definable `presolve_bt_improv_tol` for variable range reductions in OBBT\n- Minor update on finite values for obj-bound in `create_obbt_model`\n- NLP solution rounding issue resolved (now compatible with default tol, 1e-6), to avoid the variable solution outside discretization (#190)\n- `circleN` instance updated to `circle_MINLPLib` to eliminate Pavito's mixed-integer cycling in unit tests (#190)\n- Clean-up in printing variable solutions (`variable_values`)\n\n## v0.2.10\n- Add support for the HiGHS solver\n\n## v0.2.9\n- Update to JuMP v1.0\n\n## v0.2.8\n- Update to JuMP v0.22, v0.23\n- Update to MOI v1.0\n- Simplify test dependencies\n\n## v0.2.7\n- Support for module shortcut `Alp` in function calls\n- Solver options clean up in `examples` folder\n- Dropped support for unsued functions:\n     `_bound_sense`\n     `update_boundstop_options`\n     `amp_post_inequalities_int`\n     `amp_pick_ratevec`\n     `amp_collect_tight_regions`\n- Improved code coverage\n- Docs cleanup\n\n## v0.2.6\n- Bug fix in `algorithm.jl` to handle Gurobi as the MIP solver with updated MOI\n- Deactivated redundant functions `collect_lb_pool`, `merge_solution_pool` and `track_new_partition_idx`\n- Moved `examples` out of `test` folder\n- Updated `run_examples` to handle Gurobi as the MIP solver\n- Removed dependency on the `Distributed` package\n- Improved code coverage\n- Typos fixed in docs\n\n## v0.2.5\n- Cleaning up of solver logs\n- Time correction for local solve\n- Removed unused `Alpine.Optimizer` options in solver.jl\n\n## v0.2.4\n- Added unit tests for utility functions\n- Removed un-used functions from utility functions which aren't part of Alpine's algorithm\n- Dropped support for heuristic rounding algorithm (`heu_basic_rounding`) - `minlp_solver` input is a must\n- Dropped support for adjusting branching priority in MIP solvers (`adjust_branch_priority`)\n\n\n## v0.2.3\n- Migrating from Travis to Github-actions\n- Major documentation clean-up\n- Dependency packages clean-up\n- runtests.jl clean-up\n- Solver options update: `presolve_max_iter` => `presolve_bt_max_iter` and others\n- Added `test/examples/run_example.jl`\n\n## v0.2.2\n- README clean up\n\nClosed issues:\n- Constraints are not supported and cannot be bridged into supported constrained variables and constraints (#164)\n\n## v0.2.1\n- Logging clean up\n- Removal of redundant tests\n\nClosed issues:\n- Juniper's ALMOST_LOCALLY SOLVED error (#157)\n- unncessary eval usages (#153)\n- Logging issue with constants in objective (#159)\n\n## v0.2.0\n- MOI wrapper and JuMP v0.21 support\n- expression.jl clean up\n- eval() removal where unnecessary (#153)\n- Drop support for all trigonometric related functions (both in src and testing)\n- Drop support of expression parsing for generic integer variables in MINLPs (both in src and testing)\n\nClosed issues:\n- arc consistency partitioning pruning scheme as an example extension for POD (#37)\n- Generate convex relaxations for nonconvex MINLPs (#86)\n- Error in convexification of monomials (#104)\n- On variables chosen for partitioning (#121)\n- Travis and Documeter Maintenance (#144)\n- Compilation error (#146)\n- bound propagation buggy (#147)\n- Reenable test: Validation Test || PBT-AMP-TMC || basic solve || examples/nlp3.jl (#150)\n- Reenable test: Validation Test || AMP-CONV-FACET || basic solve || examples/nlp1.jl (#151)\n\n## v0.1.16\n- Fixed CBC version to make it compatible\n- Removed support for \"Mini\" Formulation for convex hulls\n- Updated tests and removed a few\n\n## v0.1.15\n- Bug fixes for issues 134 and 135 (fractional exponents, constants within integer exponents)\n- Added function 'expr_isolate_const' to nlexpr.jl\n- Meaningful optimality gaps for zero upper bound values (issue 103)\n- Typos in comments\n- Dropped support for colorful_alpine\n- Ole Kroger's updates to docs/make.jl\n\n## v0.1.10\n- Multiple bug fixes in expression parsing\n- Added support for feasibility problems with constant objectives\n- Typos in comments\n\n## v0.1.9\n- Drop support for Julia < v1.0.\n- Move to the new Registrator system.\n- The last supported version for Julia v0.6 is v0.1.8\n- The last supported version for Julia v0.7 is v0.1.7 (the bugs fixed in v0.1.8 is not ported to Julia v0.7)\n\n\n## v0.1.8\n- Bug fixes in solver recognition\n- Updated Issue template and Readme.\n- Rounding bug fixed for binaries.\n- This version is only available for Julia v0.6\n\n## v0.1.7\n- Bug fixes for bounds on lifted variables representing nonlinear terms\n- Inf bound warning issue fixed\n\n## v0.1.6\n- Bug fix in operators.jl for accounting all extreme points in the bound evaluation\n\n## v0.1.5\n- Unit exponent bug-fix\n- Meaningful error messages for unsupported functions\n- Pinned tests to JuMP 0.18.5\n- Cleaner & meaningful logs\n\n## v0.1.3\n- Finite large bounds on unbounded variables\n\n## Staged\n- typo fix\n- set Big-M values for unbounded variables\n\n## v0.1.2\n- Bug fix in bound tightening tolerance corner case\n\n## v0.1.1\n- Bug fix in Cplex solver recognition\n\n## v0.1.0\n- Alpine.jl first release\n\n## Merged Features\n- `partition_scaling_factor` selection algorithm\n- logarithm embedding formulation\n- bounding model warm starting and no-good-cuts using solution pool\n- `disc_vars` selection algorithm based on weighted minimum vertex cover\n- more support for binary problem\n- rounding heuristic and multi-start heuristic for feasible solutions\n- recursive linear lifting\n- some attempts to reason bounds for variables with infinite bounds\n\n## New Operators\n- `BINPROD`: product of binary vars\n- `BINLIN`: product of a binary var and continuous var\n\n## Data Structure\n- Some refactoring to shorten the attribute names\n- Eliminated unnecessary/obsolete user options\n- Strengthen the checks to problems\n\n## Code Structure\n- `Alpine.jl`: \"header\" file\n- `solver.jl`: data structure and problem loading\n- `algorithm.jl`: high-level algorithms and major utilities (`presolve()`, `local_solve()`, `bounding_solve()`)\n- `amp.jl`: algorithms for bounding formulation constructions\n- `presolve.jl`: algorithms for presolves\n- `heuristics.jl`: algorithms for heuristics\n- `bounds.jl`: algorithms and utilities for handling bounds including bounds propagation and reasoning with lifting\n- `mpb2moi.jl`: preparation for migration to `MOI` interface, a collection of all solver & modeling interface warpping functions\n- `multi.jl`: high-level piecewise convex relaxation formulation construction and utilities for multilinear/monomial terms\n- `tmc.jl`: old McCormick-based methods\n- `const.jl`: (experimental) tries to categorize operators for cleaner and safer operations\n- `embedding.jl`: logarithm embedding formulations and utilities\n- `nlexpr.jl`: algorithms for expression handling\n- `operators.jl`: operator detection algorithm and associated utilities for bounds, discretization variable selection, etc.\n- `log.jl`: logging utilities\n- `utility.jl`: general utility functions\n\n\n## Debugs\n- Fixed multiple bugs in recursive expression handling\n- Fixed duplicates in constructing convex relaxations\n- Fixed bound reasoning steps for complex terms\n- Fixed many other things\n\n## Tests & Coverage\n- Most new features are covered (embedding, `partition_scaling_factor` algorithm, etc.)\n- Stronger expression parsing tests with new operators covered\n- Coverage should be more than `~90%`\n"
  },
  {
    "path": "CITATION.bib",
    "content": "@article{alpine_JOGO2019,\n  author = {Nagarajan, Harsha and Lu, Mowen and Wang, Site and Bent, Russell and Sundar, Kaarthik},\n  title = {An adaptive, multivariate partitioning algorithm for global optimization of nonconvex programs},\n  journal = {Journal of Global Optimization},\n  year = {2019},\n  issn = {1573-2916},\n  doi = {10.1007/s10898-018-00734-1},\n}"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright (c) 2017, Triad National Security, LLC\nAll rights reserved.\nCopyright 2017. Triad National Security, LLC. All rights reserved. This software was produced under U.S. Government contract 89233218CNA000001 for Los Alamos National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S. Department of Energy/National Nuclear Security Administration. All rights in the program are reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear Security Administration. The Government is granted for itself and others acting on its behalf a nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare derivative works, distribute copies to the public, perform publicly and display publicly, and to permit others to do so. NEITHER THE GOVERNMENT NOR TRIAD NATIONAL SECURITY, LLC MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified to produce derivative works, such modified software should be clearly marked, so as not to confuse it with the version available from LANL.\n\nAdditionally, redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n1.\tRedistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n2.\tRedistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n3.\tNeither the name of Triad National Security, LLC, Los Alamos National Laboratory, LANL, the U.S. Government, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission THIS SOFTWARE IS PROVIDED BY  TRIAD NATIONAL SECURITY, LLC AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TRIAD NATIONAL SECURITY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
  },
  {
    "path": "Project.toml",
    "content": "name = \"Alpine\"\nuuid = \"07493b3f-dabb-5b16-a503-4139292d7dd4\"\nauthors = [\"Harsha Nagarajan, Site Wang, Kaarthik Sundar and contributors\"]\nrepo = \"https://github.com/lanl-ansi/Alpine.jl.git\"\nversion = \"0.5.8\"\n\n[deps]\nCombinatorics = \"861a8166-3701-5b0c-9a16-15d98fcdc6aa\"\nJuMP = \"4076af6c-e467-56ae-b986-b466b2749572\"\nMathOptInterface = \"b8f27783-ece8-5eb3-8dc8-9495eed66fee\"\nStatistics = \"10745b16-79ce-11e8-11f9-7d13ad32a3b2\"\n\n[compat]\nCombinatorics = \"1\"\nHiGHS = \"1\"\nIpopt = \"0.8, 0.9, 1\"\nJuMP = \"0.22, 0.23, 1\"\nJuniper = \"0.8, 0.9\"\nMathOptInterface = \"0.10, 1\"\nPavito = \"0.3.4, 0.3.5\"\nStatistics = \"1\"\njulia = \"1\"\n\n[extras]\nHiGHS = \"87dc4568-4c63-4d18-b0c0-bb2238e4078b\"\nIpopt = \"b6b21f68-93f8-5de0-b562-5493be1d77c9\"\nJuniper = \"2ddba703-00a4-53a7-87a5-e8b9971dde84\"\nPavito = \"cd433a01-47d1-575d-afb7-6db927ee8d8f\"\nRandom = \"9a3f8284-a2c9-5f02-9a11-845980a1fd5c\"\nTest = \"8dfed614-e22c-5e08-85e1-65c5234f0b40\"\n\n[targets]\ntest = [\"HiGHS\", \"Ipopt\", \"Juniper\", \"Pavito\", \"Random\", \"Test\"]\n"
  },
  {
    "path": "README.md",
    "content": "# Alpine, a global solver for non-convex MINLPs\n\n[![CI](https://github.com/lanl-ansi/Alpine.jl/actions/workflows/ci.yml/badge.svg)](https://github.com/lanl-ansi/Alpine.jl/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/lanl-ansi/Alpine.jl/branch/master/badge.svg)](https://codecov.io/gh/lanl-ansi/Alpine.jl)\n[![Documentation](https://github.com/lanl-ansi/Alpine.jl/actions/workflows/documentation.yml/badge.svg)](https://lanl-ansi.github.io/Alpine.jl/latest/) \n[![version](https://juliahub.com/docs/Alpine/version.svg)](https://juliahub.com/ui/Packages/Alpine/TRSJF)\n\nALPINE (glob(AL) o(P)timization for mixed-(I)nteger programs with (N)onlinear (E)quations), is a novel global optimization solver that uses an adaptive, piecewise convexification scheme and constraint programming methods to solve non-convex Mixed-Integer Non-Linear Programs (MINLPs) efficiently. MINLPs are typically \"hard\" optimization problems which appear in numerous applications (see [MINLPLib.jl](https://github.com/lanl-ansi/MINLPLib.jl)). \n\nAlpine is entirely built upon [JuMP](https://github.com/jump-dev/JuMP.jl) and [MathOptInterface](https://github.com/jump-dev/MathOptInterface.jl) in Julia, which provides incredible flexibility for usage and further development.\n\nAlpine globally solves a given MINLP by:\n\n* Analyzing the problem's expressions (objective & constraints) and applies appropriate convex relaxations and polyhedral outer-approximations\n\n* Performing sequential optimization-based bound tightening (OBBT) and an iterative MIP-based adaptive partitioning scheme via piecewise polyhedral relaxations with a guarantee of global convergence\n\nUpon Alpine's convergence, for a given relative gap tolerance `ε`, the user is guaranteed that the global optimal solution is in the `ε`-neighborhood of the solution found by the solver.\n\n## Installation\n\nInstall Alpine using the Julia package manager:\n\n```julia\nimport Pkg\nPkg.add(\"Alpine\")\n```\n\n## Usage with JuMP\n\nUse Alpine with [JuMP](https://github.com/jump-dev/JuMP.jl) as follows:\n\n```julia\nusing JuMP, Alpine, Ipopt, HiGHS\nipopt = optimizer_with_attributes(Ipopt.Optimizer, \"print_level\" => 0)\nhighs = optimizer_with_attributes(HiGHS.Optimizer, \"output_flag\" => false)\nmodel = Model(\n    optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => ipopt,\n        \"mip_solver\" => highs,\n    ),\n)\n```\n\n## Documentation\n\nFor more details, see the [online documentation](https://lanl-ansi.github.io/Alpine.jl/latest/).\n\n## Support problem types\n\nAlpine can currently handle MINLPs with polynomials in constraints and/or in the objective. Currently, there is no support for exponential cones and Positive Semi-Definite (PSD) cones in MINLPs. Alpine is also a good fit for subsets of the MINLP family, for example, Mixed-Integer Quadratically Constrained Quadratic Programs (MIQCQPs), Non-Linear Programs (NLPs), etc.\n\nFor more details, check out this [video](https://www.youtube.com/watch?v=mwkhiEIS5JA) on Alpine.jl at [JuMP-dev 2018](http://www.juliaopt.org/meetings/bordeaux2018/).\n\n## Underlying solvers\n\nThough an MIP-based bounding algorithm implemented in Alpine is quite involved, most of the computational bottleneck arises in the underlying MIP solvers. Since every iteration of Alpine solves an MIP sub-problem, which is typically a convex MILP/MIQCQP, Alpine's run time heavily depends on the run-time of these solvers. For the best performance of Alpine, we recommend using the commercial solver [Gurobi](https://www.gurobi.com), which is available [free](https://www.gurobi.com/academia/academic-program-and-licenses/) for academic purposes. However, due to the flexibility offered by [JuMP](https://github.com/jump-dev/JuMP.jl), the following MIP and NLP solvers are supported in Alpine: \n\n\n| Solver                                                                         | Julia Package                                                |\n|--------------------------------------------------------------------------------|--------------------------------------------------------------|\n| [Gurobi](http://gurobi.com/)                                                   | [Gurobi.jl](https://github.com/jump-dev/Gurobi.jl)           |\n| [CPLEX](https://www.ibm.com/analytics/cplex-optimizer) | [CPLEX.jl](https://github.com/jump-dev/CPLEX.jl)             |\n| [HiGHS](https://highs.dev/)            | [HiGHS.jl](https://github.com/jump-dev/HiGHS.jl)\n| [Cbc](https://projects.coin-or.org/Cbc)                                        | [Cbc.jl](https://github.com/jump-dev/Cbc.jl)                 |\n| [Ipopt](https://projects.coin-or.org/Ipopt)                                    | [Ipopt.jl](https://github.com/jump-dev/Ipopt.jl)             |\n| [Bonmin](https://projects.coin-or.org/Bonmin)                                  | [Bonmin.jl](https://github.com/jump-dev/AmplNLWriter.jl)   |\n| [Artelys KNITRO](http://artelys.com/en/optimization-tools/knitro)              | [KNITRO.jl](https://github.com/jump-dev/KNITRO.jl)           |\n| [Xpress](https://www.fico.com/en/products/fico-xpress-optimization)            | [Xpress.jl](https://github.com/jump-dev/Xpress.jl)\n\n## Bug reports and support\n\nPlease report any issues via the GitHub [issue tracker](https://github.com/lanl-ansi/Alpine.jl/issues).\nAll types of issues are welcome and encouraged; this includes bug reports, documentation typos, feature requests, etc. \n\n## Challenging Problems\n\nWe are seeking out hard benchmark instances for MINLPs. Please get in touch either by opening an issue or [privately](https://harshangrjn.github.io/#contact) if you would like to share any hard instances.\n\n## Citing Alpine\n\nIf you find Alpine useful in your work, we kindly request that you cite the following papers ([PDF](http://harshangrjn.github.io/pdf/JOGO_2018.pdf), [PDF](http://harshangrjn.github.io/pdf/CP_2016.pdf))\n```bibtex\n@article{alpine_JOGO2019,\n  title = {An adaptive, multivariate partitioning algorithm for global optimization of nonconvex programs},\n  author = {Nagarajan, Harsha and Lu, Mowen and Wang, Site and Bent, Russell and Sundar, Kaarthik},\n  journal = {Journal of Global Optimization},\n  year = {2019},\n  issn = {1573-2916},\n  doi = {10.1007/s10898-018-00734-1},\n}\n\n@inproceedings{alpine_CP2016,\n  title = {Tightening {McCormick} relaxations for nonlinear programs via dynamic multivariate partitioning},\n  author = {Nagarajan, Harsha and Lu, Mowen and Yamangil, Emre and Bent, Russell},\n  booktitle = {International Conference on Principles and Practice of Constraint Programming},\n  pages = {369--387},\n  year = {2016},\n  organization = {Springer},\n  doi = {10.1007/978-3-319-44953-1_24},\n}\n```\n\nIf you find the underlying piecewise polyhedral formulations implemented in Alpine useful in your work, we kindly request that you cite the following papers ([link-1](https://doi.org/10.1016/j.orl.2020.12.002), [link-2](http://www.optimization-online.org/DB_HTML/2022/07/8974.html)): \n```bibtex\n@article{alpine_ORL2021,\n  title = {Piecewise polyhedral formulations for a multilinear term},\n  author = {Sundar, Kaarthik and Nagarajan, Harsha and Linderoth, Jeff and Wang, Site and Bent, Russell},\n  journal = {Operations Research Letters},\n  volume = {49},\n  number = {1},\n  pages = {144--149},\n  year = {2021},\n  publisher = {Elsevier}\n}\n\n@article{alpine_OptOnline2022,\n  title={Piecewise Polyhedral Relaxations of Multilinear Optimization},\n  author={Kim, Jongeun and Richard, Jean-Philippe P. and Tawarmalani, Mohit},\n  eprinttype={Optimization Online},\n  date={2022}\n}\n```\n"
  },
  {
    "path": "docs/Project.toml",
    "content": "[deps]\nDocumenter = \"e30172f5-a6a5-5a46-863b-614d45cd2de4\"\nDocumenterTools = \"35a29f4d-8980-5a13-9543-d66fff28ecb8\"\n"
  },
  {
    "path": "docs/README.md",
    "content": "# Documentation for Alpine\n\n## Installation\nAlpine's documentation is generated using [Documenter.jl](https://github.com/JuliaDocs/Documenter.jl). To install it, run the following command in a Julia session:\n\n```julia\nPkg.add(\"Documenter\")\nPkg.add(\"DocumenterTools\")\n```\n\n## Building the Docs\nTo preview the `html` output of the documents, run the following command:\n\n```julia\njulia --color=yes make.jl\n```\n\nYou can then view the documents in `build/index.html`."
  },
  {
    "path": "docs/make.jl",
    "content": "using Documenter, Alpine\nusing DocumenterTools: Themes\n\nfor w in (\"light\", \"dark\")\n    header = read(joinpath(@__DIR__, \"src/assets/themes/style.scss\"), String)\n    theme = read(joinpath(@__DIR__, \"src/assets/themes/$(w)defs.scss\"), String)\n    write(joinpath(@__DIR__, \"src/assets/themes/$(w).scss\"), header * \"\\n\" * theme)\nend\n\nThemes.compile(\n    joinpath(@__DIR__, \"src/assets/themes/documenter-light.css\"),\n    joinpath(@__DIR__, \"src/assets/themes/light.scss\"),\n)\nThemes.compile(\n    joinpath(@__DIR__, \"src/assets/themes/documenter-dark.css\"),\n    joinpath(@__DIR__, \"src/assets/themes/dark.scss\"),\n)\n\nmakedocs(\n    sitename = \"Alpine\",\n    authors = \"Harsha Nagarajan, Site Wang, Kaarthik Sundar and contributors\",\n    format = Documenter.HTML(\n        mathengine = Documenter.MathJax(),\n        prettyurls = get(ENV, \"CI\", nothing) == \"true\",\n    ),\n    # strict = true,\n    pages = [\n        \"Introduction\" => \"index.md\",\n        \"Choosing Sub-solvers\" => \"choosingsolver.md\",\n        # \"Algorithm\" => \"algorithm.md\",\n        \"Solver Options\" => \"parameters.md\",\n        \"Methods\" => \"functions.md\",\n    ],\n)\n\ndeploydocs(repo = \"github.com/lanl-ansi/Alpine.jl.git\", push_preview = true)\n"
  },
  {
    "path": "docs/src/algorithm.md",
    "content": "# Demo\n\n```@meta\nCurrentModule = Alpine\n```\n\nConsider the following [problem](https://link.springer.com/article/10.1007/s10898-012-0022-1) as an example.\n\n```math\n\\min_{x}\\, &c^Tx\\\\\ns.t.     &a_i^Tx \\text{ sense}_i \\, b_i \\forall\\,\\, i\\\\\n         &l \\leq x \\leq u\\\\\n```\n"
  },
  {
    "path": "docs/src/assets/themes/dark.scss",
    "content": "﻿@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}html.theme--documenter-dark .delete,html.theme--documenter-dark .modal-close,.is-unselectable,html.theme--documenter-dark .button,html.theme--documenter-dark .file,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after,html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:\" \";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .box:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .highlight:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .list:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .admonition:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .delete,html.theme--documenter-dark .modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::after,html.theme--documenter-dark .modal-close::after{background-color:white;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::before{height:2px;width:50%}html.theme--documenter-dark .delete::after,html.theme--documenter-dark .modal-close::after{height:50%;width:2px}html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:focus,html.theme--documenter-dark .modal-close:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .delete:active,html.theme--documenter-dark .modal-close:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete,html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.delete,html.theme--documenter-dark .is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.delete,html.theme--documenter-dark .is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .button.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .control.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:\"\";display:block;height:1em;position:relative;width:1em}.is-overlay,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,html.theme--documenter-dark .modal,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .hero-video{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .button,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea,html.theme--documenter-dark .select select,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .button:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .is-active.button,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis{outline:none}html.theme--documenter-dark .button[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button,fieldset[disabled] html.theme--documenter-dark .input,html.theme--documenter-dark fieldset[disabled] .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .textarea,html.theme--documenter-dark fieldset[disabled] .textarea,fieldset[disabled] html.theme--documenter-dark .select select,html.theme--documenter-dark .select fieldset[disabled] select,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}.is-clearfix::after{clear:both;content:\" \";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:0.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:0.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:0.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:0.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:0.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:0.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:0.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:white !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:white !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:black !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:whitesmoke !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:whitesmoke !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-link{color:#e37733 !important}a.has-text-link:hover,a.has-text-link:focus{color:#c75e1c !important}.has-background-link{background-color:#e37733 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#0f81cc !important}.has-background-info{background-color:#209cee !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#7a7a7a !important}.has-background-grey{background-color:#7a7a7a !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:whitesmoke !important}.has-background-white-ter{background-color:whitesmoke !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:\"Montserrat\", sans-serif !important}.is-family-secondary{font-family:\"Montserrat\", sans-serif !important}.is-family-sans-serif{font-family:\"Montserrat\", sans-serif !important}.is-family-monospace{font-family:\"Source Code Pro\", monospace !important}.is-family-code{font-family:\"Source Code Pro\", monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}html.theme--documenter-dark html{background-color:#1b1f28;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:\"Montserrat\", sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:\"Source Code Pro\", monospace}html.theme--documenter-dark body{color:#ececec;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#e37733;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#f2be9e}html.theme--documenter-dark code{background-color:#101f38;color:#fff;font-size:0.875em;font-weight:normal;padding:0.1em}html.theme--documenter-dark hr{background-color:whitesmoke;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type=\"checkbox\"],html.theme--documenter-dark input[type=\"radio\"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:0.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#97b3e2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#101f38;color:#ececec;font-size:0.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:left}html.theme--documenter-dark table th{color:#97b3e2}html.theme--documenter-dark .box{background-color:white;border-radius:6px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#ececec;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #e37733}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #e37733}html.theme--documenter-dark .button{background-color:white;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:0.75em;padding-right:0.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#b5b5b5;color:#f2be9e}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#2e63b8;color:#363636}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#4a4a4a;color:#363636}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#ececec;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:whitesmoke;color:#97b3e2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#e8e8e8;color:#97b3e2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white{background-color:white;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:white;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:white}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:black}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:white}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:white;color:white}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:white;border-color:white;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent white white !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:white}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:white}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:white}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:white}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:black;border-color:transparent;color:white}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:white;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:white;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent white white !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:white}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;color:white}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:white;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}html.theme--documenter-dark .button.is-light{background-color:whitesmoke;border-color:transparent;color:#363636}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#eeeeee;border-color:transparent;color:#363636}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:#363636}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:#363636}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:whitesmoke;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:#292929}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:whitesmoke;border-color:whitesmoke;color:#363636}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;color:#363636}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#363636;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:whitesmoke}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#292929;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#363636;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#e8e8e8}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:whitesmoke;border-color:transparent;box-shadow:none;color:#363636}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:whitesmoke}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link{background-color:#e37733;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#e16f28;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#dd681f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#e37733;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#e37733}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#e37733}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#e37733;color:#e37733}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#e37733;border-color:#e37733;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #e37733 #e37733 !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#e37733;box-shadow:none;color:#e37733}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#e37733}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e37733 #e37733 !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info{background-color:#209cee;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#1496ed;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#118fe4;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#209cee;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#209cee}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#22c35b;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#22c35b}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#da0b00;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:2px;font-size:0.75rem}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:white;border-color:#dbdbdb;box-shadow:none;opacity:0.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:whitesmoke;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:290486px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:0.75rem}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}html.theme--documenter-dark .container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container{max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container{max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#97b3e2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:whitesmoke;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0.7rem 0.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#97b3e2}html.theme--documenter-dark .content table th:not([align]){text-align:left}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#97b3e2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#97b3e2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:0.75rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:290486px}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:whitesmoke;border-radius:4px;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:white}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{position:absolute;right:0.5rem;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:white;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:white}html.theme--documenter-dark .notification.is-light{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .notification.is-link{background-color:#e37733;color:#fff}html.theme--documenter-dark .notification.is-info{background-color:#209cee;color:#fff}html.theme--documenter-dark .notification.is-success{background-color:#22c35b;color:#fff}html.theme--documenter-dark .notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-danger{background-color:#da0b00;color:#fff}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#dbdbdb}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#ececec}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#ececec}html.theme--documenter-dark .progress::-ms-fill{background-color:#ececec;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:white}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:white}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:white}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, white 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:whitesmoke}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:whitesmoke}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:whitesmoke}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#363636}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#363636}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#363636}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#e37733}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#e37733}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#e37733}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #e37733 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#209cee}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#209cee}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#209cee}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#22c35b}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#22c35b}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#22c35b}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ffdd57}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ffdd57}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ffdd57}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#da0b00}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#da0b00}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#da0b00}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#dbdbdb;background-image:linear-gradient(to right, #ececec 30%, #dbdbdb 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:0.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:white;color:#363636}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:white;border-color:white;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:white}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:whitesmoke;border-color:whitesmoke;color:#363636}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#363636;border-color:#363636;color:whitesmoke}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#e37733;border-color:#e37733;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table th{color:#97b3e2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:transparent}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#97b3e2}html.theme--documenter-dark .table tfoot{background-color:transparent}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#97b3e2}html.theme--documenter-dark .table tbody{background-color:transparent}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:whitesmoke}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child){margin-right:0.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body),html.theme--documenter-dark .content kbd:not(body){align-items:center;background-color:whitesmoke;border-radius:4px;color:#ececec;display:inline-flex;font-size:0.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body){background-color:white;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body){background-color:#0a0a0a;color:white}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body){background-color:whitesmoke;color:#363636}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body){background-color:#363636;color:whitesmoke}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body){background-color:#4eb5de;color:#fff}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body){background-color:#e37733;color:#fff}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body){background-color:#209cee;color:#fff}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body){background-color:#22c35b;color:#fff}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body){background-color:#da0b00;color:#fff}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body){font-size:0.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after{background-color:currentColor;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus{background-color:#e8e8e8}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active{background-color:#dbdbdb}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tag:not(body){border-radius:290486px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:0.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:0.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd{vertical-align:middle}html.theme--documenter-dark .title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title+.highlight{margin-top:-0.75rem}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:0.75rem}html.theme--documenter-dark .subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#363636;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:0.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}html.theme--documenter-dark .highlight pre{overflow:auto;max-width:100%}html.theme--documenter-dark .number{align-items:center;background-color:whitesmoke;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea,html.theme--documenter-dark .select select{background-color:white;border-color:#dbdbdb;border-radius:4px;color:#363636}html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .select select::-moz-placeholder{color:rgba(54,54,54,0.3)}html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .select select::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .select select:-moz-placeholder{color:rgba(54,54,54,0.3)}html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .select select:-ms-input-placeholder{color:rgba(54,54,54,0.3)}html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .select select.is-hovered{border-color:#ac5118}html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .select select.is-active{border-color:#f0f0f0;box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .select select[disabled],fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .select select{background-color:whitesmoke;border-color:whitesmoke;box-shadow:none;color:#7a7a7a}html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .select select[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder{color:rgba(122,122,122,0.3)}html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder{color:rgba(122,122,122,0.3)}html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .select select[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder{color:rgba(122,122,122,0.3)}html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder{color:rgba(122,122,122,0.3)}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly],html.theme--documenter-dark .textarea[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white,html.theme--documenter-dark .is-white.textarea{border-color:white}html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white.is-focused,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white.is-active,html.theme--documenter-dark .is-white.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black,html.theme--documenter-dark .is-black.textarea{border-color:#0a0a0a}html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black.is-focused,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black.is-active,html.theme--documenter-dark .is-black.is-active.textarea{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light,html.theme--documenter-dark .is-light.textarea{border-color:whitesmoke}html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light.is-focused,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light.is-active,html.theme--documenter-dark .is-light.is-active.textarea{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark .content kbd.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea{border-color:#363636}html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark.is-focused,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark.is-active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink{border-color:#4eb5de}html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary.is-focused,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary.is-active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link,html.theme--documenter-dark .is-link.textarea{border-color:#e37733}html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link.is-focused,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link.is-active,html.theme--documenter-dark .is-link.is-active.textarea{box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info,html.theme--documenter-dark .is-info.textarea{border-color:#209cee}html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info.is-focused,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info.is-active,html.theme--documenter-dark .is-info.is-active.textarea{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success,html.theme--documenter-dark .is-success.textarea{border-color:#22c35b}html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success.is-focused,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success.is-active,html.theme--documenter-dark .is-success.is-active.textarea{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning,html.theme--documenter-dark .is-warning.textarea{border-color:#ffdd57}html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning.is-focused,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning.is-active,html.theme--documenter-dark .is-warning.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger,html.theme--documenter-dark .is-danger.textarea{border-color:#da0b00}html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger.is-focused,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger.is-active,html.theme--documenter-dark .is-danger.is-active.textarea{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .is-small.textarea{border-radius:2px;font-size:0.75rem}html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium,html.theme--documenter-dark .is-medium.textarea{font-size:1.25rem}html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large,html.theme--documenter-dark .is-large.textarea{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth,html.theme--documenter-dark .is-fullwidth.textarea{display:block;width:100%}html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline,html.theme--documenter-dark .is-inline.textarea{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:290486px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:0.625em;resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:600px;min-height:120px}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .checkbox input,html.theme--documenter-dark .radio input{cursor:pointer}html.theme--documenter-dark .checkbox:hover,html.theme--documenter-dark .radio:hover{color:#363636}html.theme--documenter-dark .checkbox[disabled],html.theme--documenter-dark .radio[disabled],fieldset[disabled] html.theme--documenter-dark .checkbox,fieldset[disabled] html.theme--documenter-dark .radio{color:#7a7a7a;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:0.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.25em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#e37733;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:290486px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:whitesmoke}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:white}html.theme--documenter-dark .select.is-white select{border-color:white}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:black}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:whitesmoke}html.theme--documenter-dark .select.is-light select{border-color:whitesmoke}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#363636}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#363636}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#292929}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#e37733}html.theme--documenter-dark .select.is-link select{border-color:#e37733}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#dd681f}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#209cee}html.theme--documenter-dark .select.is-info select{border-color:#209cee}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#118fe4}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#22c35b}html.theme--documenter-dark .select.is-success select{border-color:#22c35b}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#1ead51}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ffdd57}html.theme--documenter-dark .select.is-warning select{border-color:#ffdd57}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#ffd83d}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#da0b00}html.theme--documenter-dark .select.is-danger select{border-color:#da0b00}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#c10a00}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:0.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#7a7a7a}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:0.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select.is-loading:after{font-size:0.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:white;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:white}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:white}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:white}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:black;border-color:transparent;color:white}html.theme--documenter-dark .file.is-light .file-cta{background-color:whitesmoke;border-color:transparent;color:#363636}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#eeeeee;border-color:transparent;color:#363636}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:#363636}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:#363636}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:whitesmoke}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#e37733;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#e16f28;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(227,119,51,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#dd681f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#1496ed;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#118fe4;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:0.75rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:4px}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 4px 4px 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#eeeeee;color:#363636}html.theme--documenter-dark .file-label:hover .file-name{border-color:#d5d5d5}html.theme--documenter-dark .file-label:active .file-cta{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .file-label:active .file-name{border-color:#cfcfcf}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:whitesmoke;color:#4a4a4a}html.theme--documenter-dark .file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#363636;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:0.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:0.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:white}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:whitesmoke}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#363636}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#4eb5de}html.theme--documenter-dark .help.is-link{color:#e37733}html.theme--documenter-dark .help.is-info{color:#209cee}html.theme--documenter-dark .help.is-success{color:#22c35b}html.theme--documenter-dark .help.is-warning{color:#ffdd57}html.theme--documenter-dark .help.is-danger{color:#da0b00}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:0.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:0.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:0.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:left}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#7a7a7a}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.select~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.select~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.select~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.select~.icon{font-size:0.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#dbdbdb;height:2.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.25em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.25em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:0.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.control.is-loading:after{font-size:0.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#e37733;display:flex;justify-content:center;padding:0 0.75em}html.theme--documenter-dark .breadcrumb a:hover{color:#f2be9e}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#97b3e2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#b5b5b5;content:\"\\0002f\"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:0.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:0.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:0.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:\"\\02192\"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:\"\\02022\"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:\"\\000b7\"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:\"\\0227B\"}html.theme--documenter-dark .card{background-color:white;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#ececec;max-width:100%;position:relative}html.theme--documenter-dark .card-header{background-color:transparent;align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#97b3e2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-content{background-color:transparent;padding:1rem 1.25rem}html.theme--documenter-dark .card-footer{background-color:transparent;border-top:1px solid #dbdbdb;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:0.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #dbdbdb}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .dropdown-item{color:#4a4a4a;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:whitesmoke;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#e37733;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#dbdbdb;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:4px}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:0.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:0.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:0.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .list{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}html.theme--documenter-dark .list-item{display:block;padding:0.5em 1em}html.theme--documenter-dark .list-item:not(a){color:#ececec}html.theme--documenter-dark .list-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}html.theme--documenter-dark .list-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}html.theme--documenter-dark .list-item:not(:last-child){border-bottom:1px solid #dbdbdb}html.theme--documenter-dark .list-item.is-active{background-color:#e37733;color:#fff}html.theme--documenter-dark a.list-item{background-color:whitesmoke;cursor:pointer}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:left}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:0.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:0.5rem}html.theme--documenter-dark .media .media .media{padding-top:0.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:0.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:0.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:2px;color:#ececec;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:whitesmoke;color:#97b3e2}html.theme--documenter-dark .menu-list a.is-active{background-color:#e37733;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #dbdbdb;margin:0.75em;padding-left:0.75em}html.theme--documenter-dark .menu-label{color:#7a7a7a;font-size:0.75em;letter-spacing:0.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:whitesmoke;border-radius:4px;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:0.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:white}html.theme--documenter-dark .message.is-white .message-header{background-color:white;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:white;color:#4d4d4d}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:white}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a;color:#090909}html.theme--documenter-dark .message.is-light{background-color:#fafafa}html.theme--documenter-dark .message.is-light .message-header{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .message.is-light .message-body{border-color:whitesmoke;color:#505050}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#fafafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#363636;color:#2a2a2a}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f6fbfd}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1f556a}html.theme--documenter-dark .message.is-link{background-color:#fef9f6}html.theme--documenter-dark .message.is-link .message-header{background-color:#e37733;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#e37733;color:#7f411b}html.theme--documenter-dark .message.is-info{background-color:#f6fbfe}html.theme--documenter-dark .message.is-info .message-header{background-color:#209cee;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#209cee;color:#12537e}html.theme--documenter-dark .message.is-success{background-color:#f6fdf9}html.theme--documenter-dark .message.is-success .message-header{background-color:#22c35b;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#22c35b;color:#0f361d}html.theme--documenter-dark .message.is-warning{background-color:#fffdf5}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ffdd57;color:#3b3108}html.theme--documenter-dark .message.is-danger{background-color:#fff5f5}html.theme--documenter-dark .message.is-danger .message-header{background-color:#da0b00;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#da0b00;color:#9b0c04}html.theme--documenter-dark .message-header{align-items:center;background-color:#ececec;border-radius:4px 4px 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#ececec;padding:1em 1.25em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:white}html.theme--documenter-dark .message-body pre code{background-color:transparent}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),print{html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:whitesmoke;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}html.theme--documenter-dark .modal-card-title{color:#97b3e2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:0.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:white;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:white;min-height:3.25rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:white;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:white;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:white}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:white}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:black;color:white}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:white}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:white}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:white}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:black;color:white}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:white}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:black;color:white}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:white}}html.theme--documenter-dark .navbar.is-light{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:#363636}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#363636}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:whitesmoke}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:whitesmoke}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#e37733;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#dd681f;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#dd681f;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dd681f;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#e37733;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#209cee;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#118fe4;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#118fe4;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#118fe4;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#22c35b;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-danger{background-color:#da0b00;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 whitesmoke}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 whitesmoke}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:3.25rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:3.25rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:#fafafa;color:#e37733}html.theme--documenter-dark .navbar-item{display:block;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#e37733}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#e37733;border-bottom-style:solid;border-bottom-width:3px;color:#e37733;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#e37733;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:whitesmoke;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:white;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:3.25rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:4px}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#e37733}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item{display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:white;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#e37733}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#0a0a0a}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:transparent}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-0.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:0.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:290486px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:290486px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:0.25rem;padding-left:0.5em;padding-right:0.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#dbdbdb;color:#363636;min-width:2.25em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#b5b5b5;color:#f2be9e}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#2e63b8}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#e37733;border-color:#e37733;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#b5b5b5;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs,html.theme--documenter-dark .panel-block{border-bottom:1px solid #dbdbdb;border-left:1px solid #dbdbdb;border-right:1px solid #dbdbdb}html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child,html.theme--documenter-dark .panel-block:first-child{border-top:1px solid #dbdbdb}html.theme--documenter-dark .panel-heading{background-color:whitesmoke;border-radius:4px 4px 0 0;color:#97b3e2;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:0.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}html.theme--documenter-dark .panel-list a{color:#ececec}html.theme--documenter-dark .panel-list a:hover{color:#e37733}html.theme--documenter-dark .panel-block{align-items:center;color:#97b3e2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type=\"checkbox\"]{margin-right:0.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#e37733;color:#363636}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#e37733}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:whitesmoke}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:0.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#ececec;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#97b3e2;color:#97b3e2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#e37733;color:#e37733}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:0.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:0.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:whitesmoke;border-bottom-color:#dbdbdb}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:white;border-color:#dbdbdb;border-bottom-color:transparent !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:whitesmoke;border-color:#b5b5b5;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-radius:4px 0 0 4px}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-radius:0 4px 4px 0}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#e37733;border-color:#e37733;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:0.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:0.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66667%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66667%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66667%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66667%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - 0.75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: 0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: 0.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: 0.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: 0.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: 0.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: 0.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: 0.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: 0.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: 0.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: 0.25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: 0.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: 0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: 0.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: 0.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: 0.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: 0.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: 0.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: 0.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: 0.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: 0.5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: 0.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: 0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: 0.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: 0.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: 0.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: 0.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: 0.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: 0.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: 0.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: 0.75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:0.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66667%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66667%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66667%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66667%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:white;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:white}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:white}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:white}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:white}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:white}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:black;color:white}html.theme--documenter-dark .hero.is-black .tabs a{color:white;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:white}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:white;border-color:white;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:#363636}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(54,54,54,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:#363636}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:whitesmoke}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(54,54,54,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .hero.is-light .tabs a{color:#363636;opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:#363636}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:#363636;border-color:#363636;color:whitesmoke}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:whitesmoke}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(245,245,245,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:whitesmoke}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#363636}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(245,245,245,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#292929;color:whitesmoke}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:whitesmoke;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:whitesmoke}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a:hover{background-color:whitesmoke;border-color:whitesmoke;color:#363636}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#e37733;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#e37733}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#dd681f;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#e37733}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #d23b10 0%, #e37733 71%, #eba044 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #d23b10 0%, #e37733 71%, #eba044 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#209cee;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#209cee}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#118fe4;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#22c35b;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#22c35b}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ffdd57}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#da0b00;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#da0b00}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section.is-medium{padding:9rem 1.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 1.5rem}}html.theme--documenter-dark .footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#97b3e2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f0c1\"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark .admonition{background-color:#232834;border-style:solid;border-width:1px;border-color:#ba3f1f;border-radius:4px;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:0.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#232834;border-color:#ba3f1f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#ba3f1f}html.theme--documenter-dark .admonition.is-info{background-color:#232834;border-color:#28c}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#28c}html.theme--documenter-dark .admonition.is-success{background-color:#232834;border-color:#42ac68}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#42ac68}html.theme--documenter-dark .admonition.is-warning{background-color:#232834;border-color:#a88b17}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#a88b17}html.theme--documenter-dark .admonition.is-danger{background-color:#232834;border-color:#c7524c}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#c7524c}html.theme--documenter-dark .admonition.is-compat{background-color:#232834;border-color:#1db5c9}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#1db5c9}html.theme--documenter-dark .admonition-header{background-color:#ba3f1f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:\"Font Awesome 5 Free\";font-weight:900;margin-right:0.75em;content:\"\\f06a\"}html.theme--documenter-dark .admonition-body{color:#ececec;padding:1em 1.25em}html.theme--documenter-dark .admonition-body pre{background-color:#101f38}html.theme--documenter-dark .admonition-body code{background-color:#101f38}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:transparent;border:1px solid #dbdbdb;box-shadow:3px 3px 4px #444444;max-width:100%}html.theme--documenter-dark .docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.75rem;background-color:#232834;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:1rem 1.25rem;border-bottom:1px solid #dbdbdb}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:0.625rem;bottom:0.5rem}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1b1f28}html.theme--documenter-dark .content pre{border:1px solid #dbdbdb}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#e37733}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#97b3e2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#97b3e2}html.theme--documenter-dark .hljs{background:initial !important;padding:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1b1f28;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button{margin:auto 0 auto 1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{font-size:1.5rem;margin:auto 0 auto 1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:0.2rem 0rem 0.4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#ececec;background-color:#1d3968;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:0.4rem 0rem 0.8rem #bbb}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:0.95rem;margin-left:1em;border-left:1px solid #dbdbdb}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:0.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f054\"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:\"\\f078\"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#ececec;background:#1d3968}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#ececec;background-color:#122442}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#1b1f28}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1b1f28;color:#f0f0f0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#142748;color:#f0f0f0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:0.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:\"⚬\";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#142748}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#0b1628}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#142748}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#0b1628}}html.theme--documenter-dark #documenter .docs-main #documenter-search-info{margin-bottom:1rem}html.theme--documenter-dark #documenter .docs-main #documenter-search-results{list-style-type:circle;list-style-position:outside}html.theme--documenter-dark #documenter .docs-main #documenter-search-results li{margin-left:2rem}html.theme--documenter-dark #documenter .docs-main #documenter-search-results .docs-highlight{background-color:yellow}html.theme--documenter-dark{background-color:#1b1f28;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark #documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #444444}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#142748;border-color:#0b1628;margin-top:1.0rem;margin-bottom:1.0rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-builtin-name,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs{display:block;overflow-x:auto;background:#2b2b2b;color:#f8f8f2;padding:0.5em}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-builtin-name,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}\n"
  },
  {
    "path": "docs/src/assets/themes/darkdefs.scss",
    "content": "// This template file overrides some of the Documenter theme variables to customize the theme:\n$themename: \"documenter-dark\"; // CSS file must be called `$(themename).css`\n// Instruct documenter/*.scss files that this is a dark theme\n$documenter-is-dark-theme: true;\n\n$boldcolor: lighten-color($maincolor, 4.5);\n\n$body-background-color: $darkbg; // main page background\n\n// this is the color the links get, and also when they are hovered\n$link: lighten-color($secondcolor, 2);\n$link-hover: lighten-color($link, 3);\n\n// Main text color:\n$text: darken-color($mainwhite, 0.2);\n// Bold text color, also affects headers\n$text-strong: $boldcolor;\n\n// Code text color:\n$code: #fff;\n//$code-background: rgba(0.5,0,0, 0.05);\n$codebg: darken-color($maincolor, 3);\n$code-background: $codebg; // for inline code\n$pre-background: $codebg;  // for code blocks\n$documenter-docstring-header-background: lighten-color($body-background-color, 0.5);\n\n// Sidebar\n$documenter-sidebar-background: darken-color($maincolor, 1.5); //background color for sidebar\n$documenter-sidebar-color: $text; //font color for sidebar\n$documenter-sidebar-menu-hover-color: $documenter-sidebar-color;\n$documenter-sidebar-menu-hover-background: darken-color($documenter-sidebar-background, 1.2);\n\n$documenter-sidebar-menu-active-background: $darkbg;\n$documenter-sidebar-menu-active-color: $mainwhite;\n$documenter-sidebar-menu-active-hover-background: darken-color($documenter-sidebar-background, 1);\n$documenter-sidebar-menu-active-hover-color: $documenter-sidebar-menu-active-color;\n// these two change what happens with input boxes (the search box):\n$input-hover-border-color: $secondcolor;\n$input-focus-border-color: $mainwhite;\n\n$documenter-docstring-shadow: 3px 3px 4px invert($shadow-color);\n\n// Admonition stuff\n$admbg: lighten-color($body-background-color, 0.5);\n$admonition-background: (\n  'default': $admbg, 'info': $admbg, 'success': $admbg, 'warning': $admbg,\n  'danger': $admbg, 'compat': $admbg\n);\n$admonition-header-background: (\n  'default': #ba3f1f, 'warning': #a88b17, 'danger': #c7524c,\n  'success': #42ac68, 'info': #28c);\n\n// All secondary themes have to be nested in a theme--$(themename) class. When Documenter\n// switches themes, it applies this class to <html> and then disables the primary\n// stylesheet.\n@import \"documenter/utilities\";\n@import \"documenter/variables\";\n@import \"bulma/utilities/all\";\n@import \"bulma/base/minireset.sass\";\n@import \"bulma/base/helpers.sass\";\n\nhtml.theme--#{$themename} {\n  @import \"bulma/base/generic.sass\";\n\n  @import \"documenter/overrides\";\n\n  @import \"bulma/elements/all\";\n  @import \"bulma/form/all\";\n  @import \"bulma/components/all\";\n  @import \"bulma/grid/all\";\n  @import \"bulma/layout/all\";\n\n  // Additional overrides, if need be\n\n  @import \"documenter/elements\";\n  @import \"documenter/components/all\";\n  @import \"documenter/patches\";\n  @import \"documenter/layout/all\";\n\n  @import \"documenter/theme_overrides\";\n\n  // $shadow-color: #202224;\n\n  #documenter .docs-sidebar { // This makes sidebar have shadow at all displays\n    border-right: none;\n    box-shadow: 1.2*$shadow-size 0rem 1*$shadow-blur invert($shadow-color);\n\n    form.docs-search > input { // these controls are for the searchbar\n      color: $mainwhite;\n      background-color: darken-color($documenter-sidebar-background, 1);\n      border-color: darken-color($documenter-sidebar-background, 2);\n      margin-top: 1.0rem;\n      margin-bottom: 1.0rem; // adjust the margings between search and other elements\n      &::placeholder {\n        color: $mainwhite; // placeholder text color (\"Search here...\")\n      }\n    }\n  }\n  // FIXME: Hack to get a proper theme for highlight.js in the dark theme\n  @import \"highlightjs/a11y-dark\";\n  // Also, a11y-dark does not highlight string interpolation properly.\n  .hljs-subst {\n    color: #f8f8f2;\n  }\n}\n"
  },
  {
    "path": "docs/src/assets/themes/documenter-dark.css",
    "content": "@charset \"UTF-8\";\n/* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */\n@keyframes spinAround {\n  from {\n    transform: rotate(0deg); }\n  to {\n    transform: rotate(359deg); } }\n\nhtml.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close, .is-unselectable, html.theme--documenter-dark .button, html.theme--documenter-dark .file, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .pagination-previous,\nhtml.theme--documenter-dark .pagination-next,\nhtml.theme--documenter-dark .pagination-link,\nhtml.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .tabs {\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\nhtml.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after, html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after {\n  border: 3px solid transparent;\n  border-radius: 2px;\n  border-right: 0;\n  border-top: 0;\n  content: \" \";\n  display: block;\n  height: 0.625em;\n  margin-top: -0.4375em;\n  pointer-events: none;\n  position: absolute;\n  top: 50%;\n  transform: rotate(-45deg);\n  transform-origin: center;\n  width: 0.625em; }\n\nhtml.theme--documenter-dark .box:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .title:not(:last-child),\nhtml.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .admonition:not(:last-child) {\n  margin-bottom: 1.5rem; }\n\nhtml.theme--documenter-dark .delete, html.theme--documenter-dark .modal-close {\n  -moz-appearance: none;\n  -webkit-appearance: none;\n  background-color: rgba(10, 10, 10, 0.2);\n  border: none;\n  border-radius: 290486px;\n  cursor: pointer;\n  pointer-events: auto;\n  display: inline-block;\n  flex-grow: 0;\n  flex-shrink: 0;\n  font-size: 0;\n  height: 20px;\n  max-height: 20px;\n  max-width: 20px;\n  min-height: 20px;\n  min-width: 20px;\n  outline: none;\n  position: relative;\n  vertical-align: top;\n  width: 20px; }\n  html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before, html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after {\n    background-color: white;\n    content: \"\";\n    display: block;\n    left: 50%;\n    position: absolute;\n    top: 50%;\n    transform: translateX(-50%) translateY(-50%) rotate(45deg);\n    transform-origin: center center; }\n  html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::before {\n    height: 2px;\n    width: 50%; }\n  html.theme--documenter-dark .delete::after, html.theme--documenter-dark .modal-close::after {\n    height: 50%;\n    width: 2px; }\n  html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:focus, html.theme--documenter-dark .modal-close:focus {\n    background-color: rgba(10, 10, 10, 0.3); }\n  html.theme--documenter-dark .delete:active, html.theme--documenter-dark .modal-close:active {\n    background-color: rgba(10, 10, 10, 0.4); }\n  html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete, html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close {\n    height: 16px;\n    max-height: 16px;\n    max-width: 16px;\n    min-height: 16px;\n    min-width: 16px;\n    width: 16px; }\n  html.theme--documenter-dark .is-medium.delete, html.theme--documenter-dark .is-medium.modal-close {\n    height: 24px;\n    max-height: 24px;\n    max-width: 24px;\n    min-height: 24px;\n    min-width: 24px;\n    width: 24px; }\n  html.theme--documenter-dark .is-large.delete, html.theme--documenter-dark .is-large.modal-close {\n    height: 32px;\n    max-height: 32px;\n    max-width: 32px;\n    min-height: 32px;\n    min-width: 32px;\n    width: 32px; }\n\nhtml.theme--documenter-dark .button.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .control.is-loading::after {\n  animation: spinAround 500ms infinite linear;\n  border: 2px solid #dbdbdb;\n  border-radius: 290486px;\n  border-right-color: transparent;\n  border-top-color: transparent;\n  content: \"\";\n  display: block;\n  height: 1em;\n  position: relative;\n  width: 1em; }\n\n.is-overlay, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img,\nhtml.theme--documenter-dark .image.is-square .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img,\nhtml.theme--documenter-dark .image.is-1by1 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img,\nhtml.theme--documenter-dark .image.is-5by4 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img,\nhtml.theme--documenter-dark .image.is-4by3 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img,\nhtml.theme--documenter-dark .image.is-3by2 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img,\nhtml.theme--documenter-dark .image.is-5by3 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img,\nhtml.theme--documenter-dark .image.is-16by9 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img,\nhtml.theme--documenter-dark .image.is-2by1 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img,\nhtml.theme--documenter-dark .image.is-3by1 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img,\nhtml.theme--documenter-dark .image.is-4by5 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img,\nhtml.theme--documenter-dark .image.is-3by4 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img,\nhtml.theme--documenter-dark .image.is-2by3 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img,\nhtml.theme--documenter-dark .image.is-3by5 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img,\nhtml.theme--documenter-dark .image.is-9by16 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img,\nhtml.theme--documenter-dark .image.is-1by2 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img,\nhtml.theme--documenter-dark .image.is-1by3 .has-ratio,\nhtml.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, html.theme--documenter-dark .modal, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .hero-video {\n  bottom: 0;\n  left: 0;\n  position: absolute;\n  right: 0;\n  top: 0; }\n\nhtml.theme--documenter-dark .button, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select, html.theme--documenter-dark .file-cta,\nhtml.theme--documenter-dark .file-name, html.theme--documenter-dark .pagination-previous,\nhtml.theme--documenter-dark .pagination-next,\nhtml.theme--documenter-dark .pagination-link,\nhtml.theme--documenter-dark .pagination-ellipsis {\n  -moz-appearance: none;\n  -webkit-appearance: none;\n  align-items: center;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  box-shadow: none;\n  display: inline-flex;\n  font-size: 1rem;\n  height: 2.25em;\n  justify-content: flex-start;\n  line-height: 1.5;\n  padding-bottom: calc(0.375em - 1px);\n  padding-left: calc(0.625em - 1px);\n  padding-right: calc(0.625em - 1px);\n  padding-top: calc(0.375em - 1px);\n  position: relative;\n  vertical-align: top; }\n  html.theme--documenter-dark .button:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .file-cta:focus,\n  html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .pagination-previous:focus,\n  html.theme--documenter-dark .pagination-next:focus,\n  html.theme--documenter-dark .pagination-link:focus,\n  html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.file-cta,\n  html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .is-focused.pagination-previous,\n  html.theme--documenter-dark .is-focused.pagination-next,\n  html.theme--documenter-dark .is-focused.pagination-link,\n  html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .button:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .file-cta:active,\n  html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .pagination-previous:active,\n  html.theme--documenter-dark .pagination-next:active,\n  html.theme--documenter-dark .pagination-link:active,\n  html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .is-active.button, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.file-cta,\n  html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .is-active.pagination-previous,\n  html.theme--documenter-dark .is-active.pagination-next,\n  html.theme--documenter-dark .is-active.pagination-link,\n  html.theme--documenter-dark .is-active.pagination-ellipsis {\n    outline: none; }\n  html.theme--documenter-dark .button[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .file-cta[disabled],\n  html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .pagination-previous[disabled],\n  html.theme--documenter-dark .pagination-next[disabled],\n  html.theme--documenter-dark .pagination-link[disabled],\n  html.theme--documenter-dark .pagination-ellipsis[disabled],\n  fieldset[disabled] html.theme--documenter-dark .button,\n  html.theme--documenter-dark fieldset[disabled] .button,\n  fieldset[disabled] html.theme--documenter-dark .input,\n  html.theme--documenter-dark fieldset[disabled] .input,\n  fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input,\n  html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input,\n  fieldset[disabled] html.theme--documenter-dark .textarea,\n  html.theme--documenter-dark fieldset[disabled] .textarea,\n  fieldset[disabled] html.theme--documenter-dark .select select,\n  html.theme--documenter-dark .select fieldset[disabled] select,\n  fieldset[disabled] html.theme--documenter-dark .file-cta,\n  html.theme--documenter-dark fieldset[disabled] .file-cta,\n  fieldset[disabled] html.theme--documenter-dark .file-name,\n  html.theme--documenter-dark fieldset[disabled] .file-name,\n  fieldset[disabled] html.theme--documenter-dark .pagination-previous,\n  html.theme--documenter-dark fieldset[disabled] .pagination-previous,\n  fieldset[disabled] html.theme--documenter-dark .pagination-next,\n  html.theme--documenter-dark fieldset[disabled] .pagination-next,\n  fieldset[disabled] html.theme--documenter-dark .pagination-link,\n  html.theme--documenter-dark fieldset[disabled] .pagination-link,\n  fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,\n  html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis {\n    cursor: not-allowed; }\n\n/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */\nhtml,\nbody,\np,\nol,\nul,\nli,\ndl,\ndt,\ndd,\nblockquote,\nfigure,\nfieldset,\nlegend,\ntextarea,\npre,\niframe,\nhr,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  margin: 0;\n  padding: 0; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: 100%;\n  font-weight: normal; }\n\nul {\n  list-style: none; }\n\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0; }\n\nhtml {\n  box-sizing: border-box; }\n\n*, *::before, *::after {\n  box-sizing: inherit; }\n\nimg,\nembed,\niframe,\nobject,\nvideo {\n  height: auto;\n  max-width: 100%; }\n\naudio {\n  max-width: 100%; }\n\niframe {\n  border: 0; }\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0; }\n\ntd,\nth {\n  padding: 0; }\n  td:not([align]),\n  th:not([align]) {\n    text-align: left; }\n\n.is-clearfix::after {\n  clear: both;\n  content: \" \";\n  display: table; }\n\n.is-pulled-left {\n  float: left !important; }\n\n.is-pulled-right {\n  float: right !important; }\n\n.is-clipped {\n  overflow: hidden !important; }\n\n.is-size-1 {\n  font-size: 3rem !important; }\n\n.is-size-2 {\n  font-size: 2.5rem !important; }\n\n.is-size-3 {\n  font-size: 2rem !important; }\n\n.is-size-4 {\n  font-size: 1.5rem !important; }\n\n.is-size-5 {\n  font-size: 1.25rem !important; }\n\n.is-size-6 {\n  font-size: 1rem !important; }\n\n.is-size-7, html.theme--documenter-dark .docstring > section > a.docs-sourcelink {\n  font-size: 0.75rem !important; }\n\n@media screen and (max-width: 768px) {\n  .is-size-1-mobile {\n    font-size: 3rem !important; }\n  .is-size-2-mobile {\n    font-size: 2.5rem !important; }\n  .is-size-3-mobile {\n    font-size: 2rem !important; }\n  .is-size-4-mobile {\n    font-size: 1.5rem !important; }\n  .is-size-5-mobile {\n    font-size: 1.25rem !important; }\n  .is-size-6-mobile {\n    font-size: 1rem !important; }\n  .is-size-7-mobile {\n    font-size: 0.75rem !important; } }\n\n@media screen and (min-width: 769px), print {\n  .is-size-1-tablet {\n    font-size: 3rem !important; }\n  .is-size-2-tablet {\n    font-size: 2.5rem !important; }\n  .is-size-3-tablet {\n    font-size: 2rem !important; }\n  .is-size-4-tablet {\n    font-size: 1.5rem !important; }\n  .is-size-5-tablet {\n    font-size: 1.25rem !important; }\n  .is-size-6-tablet {\n    font-size: 1rem !important; }\n  .is-size-7-tablet {\n    font-size: 0.75rem !important; } }\n\n@media screen and (max-width: 1055px) {\n  .is-size-1-touch {\n    font-size: 3rem !important; }\n  .is-size-2-touch {\n    font-size: 2.5rem !important; }\n  .is-size-3-touch {\n    font-size: 2rem !important; }\n  .is-size-4-touch {\n    font-size: 1.5rem !important; }\n  .is-size-5-touch {\n    font-size: 1.25rem !important; }\n  .is-size-6-touch {\n    font-size: 1rem !important; }\n  .is-size-7-touch {\n    font-size: 0.75rem !important; } }\n\n@media screen and (min-width: 1056px) {\n  .is-size-1-desktop {\n    font-size: 3rem !important; }\n  .is-size-2-desktop {\n    font-size: 2.5rem !important; }\n  .is-size-3-desktop {\n    font-size: 2rem !important; }\n  .is-size-4-desktop {\n    font-size: 1.5rem !important; }\n  .is-size-5-desktop {\n    font-size: 1.25rem !important; }\n  .is-size-6-desktop {\n    font-size: 1rem !important; }\n  .is-size-7-desktop {\n    font-size: 0.75rem !important; } }\n\n@media screen and (min-width: 1216px) {\n  .is-size-1-widescreen {\n    font-size: 3rem !important; }\n  .is-size-2-widescreen {\n    font-size: 2.5rem !important; }\n  .is-size-3-widescreen {\n    font-size: 2rem !important; }\n  .is-size-4-widescreen {\n    font-size: 1.5rem !important; }\n  .is-size-5-widescreen {\n    font-size: 1.25rem !important; }\n  .is-size-6-widescreen {\n    font-size: 1rem !important; }\n  .is-size-7-widescreen {\n    font-size: 0.75rem !important; } }\n\n@media screen and (min-width: 1408px) {\n  .is-size-1-fullhd {\n    font-size: 3rem !important; }\n  .is-size-2-fullhd {\n    font-size: 2.5rem !important; }\n  .is-size-3-fullhd {\n    font-size: 2rem !important; }\n  .is-size-4-fullhd {\n    font-size: 1.5rem !important; }\n  .is-size-5-fullhd {\n    font-size: 1.25rem !important; }\n  .is-size-6-fullhd {\n    font-size: 1rem !important; }\n  .is-size-7-fullhd {\n    font-size: 0.75rem !important; } }\n\n.has-text-centered {\n  text-align: center !important; }\n\n.has-text-justified {\n  text-align: justify !important; }\n\n.has-text-left {\n  text-align: left !important; }\n\n.has-text-right {\n  text-align: right !important; }\n\n@media screen and (max-width: 768px) {\n  .has-text-centered-mobile {\n    text-align: center !important; } }\n\n@media screen and (min-width: 769px), print {\n  .has-text-centered-tablet {\n    text-align: center !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .has-text-centered-tablet-only {\n    text-align: center !important; } }\n\n@media screen and (max-width: 1055px) {\n  .has-text-centered-touch {\n    text-align: center !important; } }\n\n@media screen and (min-width: 1056px) {\n  .has-text-centered-desktop {\n    text-align: center !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .has-text-centered-desktop-only {\n    text-align: center !important; } }\n\n@media screen and (min-width: 1216px) {\n  .has-text-centered-widescreen {\n    text-align: center !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .has-text-centered-widescreen-only {\n    text-align: center !important; } }\n\n@media screen and (min-width: 1408px) {\n  .has-text-centered-fullhd {\n    text-align: center !important; } }\n\n@media screen and (max-width: 768px) {\n  .has-text-justified-mobile {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 769px), print {\n  .has-text-justified-tablet {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .has-text-justified-tablet-only {\n    text-align: justify !important; } }\n\n@media screen and (max-width: 1055px) {\n  .has-text-justified-touch {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 1056px) {\n  .has-text-justified-desktop {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .has-text-justified-desktop-only {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 1216px) {\n  .has-text-justified-widescreen {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .has-text-justified-widescreen-only {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 1408px) {\n  .has-text-justified-fullhd {\n    text-align: justify !important; } }\n\n@media screen and (max-width: 768px) {\n  .has-text-left-mobile {\n    text-align: left !important; } }\n\n@media screen and (min-width: 769px), print {\n  .has-text-left-tablet {\n    text-align: left !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .has-text-left-tablet-only {\n    text-align: left !important; } }\n\n@media screen and (max-width: 1055px) {\n  .has-text-left-touch {\n    text-align: left !important; } }\n\n@media screen and (min-width: 1056px) {\n  .has-text-left-desktop {\n    text-align: left !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .has-text-left-desktop-only {\n    text-align: left !important; } }\n\n@media screen and (min-width: 1216px) {\n  .has-text-left-widescreen {\n    text-align: left !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .has-text-left-widescreen-only {\n    text-align: left !important; } }\n\n@media screen and (min-width: 1408px) {\n  .has-text-left-fullhd {\n    text-align: left !important; } }\n\n@media screen and (max-width: 768px) {\n  .has-text-right-mobile {\n    text-align: right !important; } }\n\n@media screen and (min-width: 769px), print {\n  .has-text-right-tablet {\n    text-align: right !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .has-text-right-tablet-only {\n    text-align: right !important; } }\n\n@media screen and (max-width: 1055px) {\n  .has-text-right-touch {\n    text-align: right !important; } }\n\n@media screen and (min-width: 1056px) {\n  .has-text-right-desktop {\n    text-align: right !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .has-text-right-desktop-only {\n    text-align: right !important; } }\n\n@media screen and (min-width: 1216px) {\n  .has-text-right-widescreen {\n    text-align: right !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .has-text-right-widescreen-only {\n    text-align: right !important; } }\n\n@media screen and (min-width: 1408px) {\n  .has-text-right-fullhd {\n    text-align: right !important; } }\n\n.is-capitalized {\n  text-transform: capitalize !important; }\n\n.is-lowercase {\n  text-transform: lowercase !important; }\n\n.is-uppercase {\n  text-transform: uppercase !important; }\n\n.is-italic {\n  font-style: italic !important; }\n\n.has-text-white {\n  color: white !important; }\n\na.has-text-white:hover, a.has-text-white:focus {\n  color: #e6e6e6 !important; }\n\n.has-background-white {\n  background-color: white !important; }\n\n.has-text-black {\n  color: #0a0a0a !important; }\n\na.has-text-black:hover, a.has-text-black:focus {\n  color: black !important; }\n\n.has-background-black {\n  background-color: #0a0a0a !important; }\n\n.has-text-light {\n  color: whitesmoke !important; }\n\na.has-text-light:hover, a.has-text-light:focus {\n  color: #dbdbdb !important; }\n\n.has-background-light {\n  background-color: whitesmoke !important; }\n\n.has-text-dark {\n  color: #363636 !important; }\n\na.has-text-dark:hover, a.has-text-dark:focus {\n  color: #1c1c1c !important; }\n\n.has-background-dark {\n  background-color: #363636 !important; }\n\n.has-text-primary {\n  color: #4eb5de !important; }\n\na.has-text-primary:hover, a.has-text-primary:focus {\n  color: #27a1d2 !important; }\n\n.has-background-primary {\n  background-color: #4eb5de !important; }\n\n.has-text-link {\n  color: #e37733 !important; }\n\na.has-text-link:hover, a.has-text-link:focus {\n  color: #c75e1c !important; }\n\n.has-background-link {\n  background-color: #e37733 !important; }\n\n.has-text-info {\n  color: #209cee !important; }\n\na.has-text-info:hover, a.has-text-info:focus {\n  color: #0f81cc !important; }\n\n.has-background-info {\n  background-color: #209cee !important; }\n\n.has-text-success {\n  color: #22c35b !important; }\n\na.has-text-success:hover, a.has-text-success:focus {\n  color: #1a9847 !important; }\n\n.has-background-success {\n  background-color: #22c35b !important; }\n\n.has-text-warning {\n  color: #ffdd57 !important; }\n\na.has-text-warning:hover, a.has-text-warning:focus {\n  color: #ffd324 !important; }\n\n.has-background-warning {\n  background-color: #ffdd57 !important; }\n\n.has-text-danger {\n  color: #da0b00 !important; }\n\na.has-text-danger:hover, a.has-text-danger:focus {\n  color: #a70800 !important; }\n\n.has-background-danger {\n  background-color: #da0b00 !important; }\n\n.has-text-black-bis {\n  color: #121212 !important; }\n\n.has-background-black-bis {\n  background-color: #121212 !important; }\n\n.has-text-black-ter {\n  color: #242424 !important; }\n\n.has-background-black-ter {\n  background-color: #242424 !important; }\n\n.has-text-grey-darker {\n  color: #363636 !important; }\n\n.has-background-grey-darker {\n  background-color: #363636 !important; }\n\n.has-text-grey-dark {\n  color: #4a4a4a !important; }\n\n.has-background-grey-dark {\n  background-color: #4a4a4a !important; }\n\n.has-text-grey {\n  color: #7a7a7a !important; }\n\n.has-background-grey {\n  background-color: #7a7a7a !important; }\n\n.has-text-grey-light {\n  color: #b5b5b5 !important; }\n\n.has-background-grey-light {\n  background-color: #b5b5b5 !important; }\n\n.has-text-grey-lighter {\n  color: #dbdbdb !important; }\n\n.has-background-grey-lighter {\n  background-color: #dbdbdb !important; }\n\n.has-text-white-ter {\n  color: whitesmoke !important; }\n\n.has-background-white-ter {\n  background-color: whitesmoke !important; }\n\n.has-text-white-bis {\n  color: #fafafa !important; }\n\n.has-background-white-bis {\n  background-color: #fafafa !important; }\n\n.has-text-weight-light {\n  font-weight: 300 !important; }\n\n.has-text-weight-normal {\n  font-weight: 400 !important; }\n\n.has-text-weight-medium {\n  font-weight: 500 !important; }\n\n.has-text-weight-semibold {\n  font-weight: 600 !important; }\n\n.has-text-weight-bold {\n  font-weight: 700 !important; }\n\n.is-family-primary {\n  font-family: \"Montserrat\", sans-serif !important; }\n\n.is-family-secondary {\n  font-family: \"Montserrat\", sans-serif !important; }\n\n.is-family-sans-serif {\n  font-family: \"Montserrat\", sans-serif !important; }\n\n.is-family-monospace {\n  font-family: \"Source Code Pro\", monospace !important; }\n\n.is-family-code {\n  font-family: \"Source Code Pro\", monospace !important; }\n\n.is-block {\n  display: block !important; }\n\n@media screen and (max-width: 768px) {\n  .is-block-mobile {\n    display: block !important; } }\n\n@media screen and (min-width: 769px), print {\n  .is-block-tablet {\n    display: block !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .is-block-tablet-only {\n    display: block !important; } }\n\n@media screen and (max-width: 1055px) {\n  .is-block-touch {\n    display: block !important; } }\n\n@media screen and (min-width: 1056px) {\n  .is-block-desktop {\n    display: block !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .is-block-desktop-only {\n    display: block !important; } }\n\n@media screen and (min-width: 1216px) {\n  .is-block-widescreen {\n    display: block !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .is-block-widescreen-only {\n    display: block !important; } }\n\n@media screen and (min-width: 1408px) {\n  .is-block-fullhd {\n    display: block !important; } }\n\n.is-flex {\n  display: flex !important; }\n\n@media screen and (max-width: 768px) {\n  .is-flex-mobile {\n    display: flex !important; } }\n\n@media screen and (min-width: 769px), print {\n  .is-flex-tablet {\n    display: flex !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .is-flex-tablet-only {\n    display: flex !important; } }\n\n@media screen and (max-width: 1055px) {\n  .is-flex-touch {\n    display: flex !important; } }\n\n@media screen and (min-width: 1056px) {\n  .is-flex-desktop {\n    display: flex !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .is-flex-desktop-only {\n    display: flex !important; } }\n\n@media screen and (min-width: 1216px) {\n  .is-flex-widescreen {\n    display: flex !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .is-flex-widescreen-only {\n    display: flex !important; } }\n\n@media screen and (min-width: 1408px) {\n  .is-flex-fullhd {\n    display: flex !important; } }\n\n.is-inline {\n  display: inline !important; }\n\n@media screen and (max-width: 768px) {\n  .is-inline-mobile {\n    display: inline !important; } }\n\n@media screen and (min-width: 769px), print {\n  .is-inline-tablet {\n    display: inline !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .is-inline-tablet-only {\n    display: inline !important; } }\n\n@media screen and (max-width: 1055px) {\n  .is-inline-touch {\n    display: inline !important; } }\n\n@media screen and (min-width: 1056px) {\n  .is-inline-desktop {\n    display: inline !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .is-inline-desktop-only {\n    display: inline !important; } }\n\n@media screen and (min-width: 1216px) {\n  .is-inline-widescreen {\n    display: inline !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .is-inline-widescreen-only {\n    display: inline !important; } }\n\n@media screen and (min-width: 1408px) {\n  .is-inline-fullhd {\n    display: inline !important; } }\n\n.is-inline-block {\n  display: inline-block !important; }\n\n@media screen and (max-width: 768px) {\n  .is-inline-block-mobile {\n    display: inline-block !important; } }\n\n@media screen and (min-width: 769px), print {\n  .is-inline-block-tablet {\n    display: inline-block !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .is-inline-block-tablet-only {\n    display: inline-block !important; } }\n\n@media screen and (max-width: 1055px) {\n  .is-inline-block-touch {\n    display: inline-block !important; } }\n\n@media screen and (min-width: 1056px) {\n  .is-inline-block-desktop {\n    display: inline-block !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .is-inline-block-desktop-only {\n    display: inline-block !important; } }\n\n@media screen and (min-width: 1216px) {\n  .is-inline-block-widescreen {\n    display: inline-block !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .is-inline-block-widescreen-only {\n    display: inline-block !important; } }\n\n@media screen and (min-width: 1408px) {\n  .is-inline-block-fullhd {\n    display: inline-block !important; } }\n\n.is-inline-flex {\n  display: inline-flex !important; }\n\n@media screen and (max-width: 768px) {\n  .is-inline-flex-mobile {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 769px), print {\n  .is-inline-flex-tablet {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .is-inline-flex-tablet-only {\n    display: inline-flex !important; } }\n\n@media screen and (max-width: 1055px) {\n  .is-inline-flex-touch {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 1056px) {\n  .is-inline-flex-desktop {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .is-inline-flex-desktop-only {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 1216px) {\n  .is-inline-flex-widescreen {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .is-inline-flex-widescreen-only {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 1408px) {\n  .is-inline-flex-fullhd {\n    display: inline-flex !important; } }\n\n.is-hidden {\n  display: none !important; }\n\n.is-sr-only {\n  border: none !important;\n  clip: rect(0, 0, 0, 0) !important;\n  height: 0.01em !important;\n  overflow: hidden !important;\n  padding: 0 !important;\n  position: absolute !important;\n  white-space: nowrap !important;\n  width: 0.01em !important; }\n\n@media screen and (max-width: 768px) {\n  .is-hidden-mobile {\n    display: none !important; } }\n\n@media screen and (min-width: 769px), print {\n  .is-hidden-tablet {\n    display: none !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .is-hidden-tablet-only {\n    display: none !important; } }\n\n@media screen and (max-width: 1055px) {\n  .is-hidden-touch {\n    display: none !important; } }\n\n@media screen and (min-width: 1056px) {\n  .is-hidden-desktop {\n    display: none !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .is-hidden-desktop-only {\n    display: none !important; } }\n\n@media screen and (min-width: 1216px) {\n  .is-hidden-widescreen {\n    display: none !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .is-hidden-widescreen-only {\n    display: none !important; } }\n\n@media screen and (min-width: 1408px) {\n  .is-hidden-fullhd {\n    display: none !important; } }\n\n.is-invisible {\n  visibility: hidden !important; }\n\n@media screen and (max-width: 768px) {\n  .is-invisible-mobile {\n    visibility: hidden !important; } }\n\n@media screen and (min-width: 769px), print {\n  .is-invisible-tablet {\n    visibility: hidden !important; } }\n\n@media screen and (min-width: 769px) and (max-width: 1055px) {\n  .is-invisible-tablet-only {\n    visibility: hidden !important; } }\n\n@media screen and (max-width: 1055px) {\n  .is-invisible-touch {\n    visibility: hidden !important; } }\n\n@media screen and (min-width: 1056px) {\n  .is-invisible-desktop {\n    visibility: hidden !important; } }\n\n@media screen and (min-width: 1056px) and (max-width: 1215px) {\n  .is-invisible-desktop-only {\n    visibility: hidden !important; } }\n\n@media screen and (min-width: 1216px) {\n  .is-invisible-widescreen {\n    visibility: hidden !important; } }\n\n@media screen and (min-width: 1216px) and (max-width: 1407px) {\n  .is-invisible-widescreen-only {\n    visibility: hidden !important; } }\n\n@media screen and (min-width: 1408px) {\n  .is-invisible-fullhd {\n    visibility: hidden !important; } }\n\n.is-marginless {\n  margin: 0 !important; }\n\n.is-paddingless {\n  padding: 0 !important; }\n\n.is-radiusless {\n  border-radius: 0 !important; }\n\n.is-shadowless {\n  box-shadow: none !important; }\n\n.is-relative {\n  position: relative !important; }\n\nhtml.theme--documenter-dark {\n  /* This file contain the overall layout.\n *\n * The main container is <div> that is identified by id #documenter.\n */\n  /* a11y-dark theme */\n  /* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */\n  /* @author: ericwbailey */\n  /* Comment */\n  /* Red */\n  /* Orange */\n  /* Yellow */\n  /* Green */\n  /* Blue */\n  /* Purple */ }\n  html.theme--documenter-dark html {\n    background-color: #1b1f28;\n    font-size: 16px;\n    -moz-osx-font-smoothing: grayscale;\n    -webkit-font-smoothing: antialiased;\n    min-width: 300px;\n    overflow-x: auto;\n    overflow-y: scroll;\n    text-rendering: optimizeLegibility;\n    text-size-adjust: 100%; }\n  html.theme--documenter-dark article,\n  html.theme--documenter-dark aside,\n  html.theme--documenter-dark figure,\n  html.theme--documenter-dark footer,\n  html.theme--documenter-dark header,\n  html.theme--documenter-dark hgroup,\n  html.theme--documenter-dark section {\n    display: block; }\n  html.theme--documenter-dark body,\n  html.theme--documenter-dark button,\n  html.theme--documenter-dark input,\n  html.theme--documenter-dark select,\n  html.theme--documenter-dark textarea {\n    font-family: \"Montserrat\", sans-serif; }\n  html.theme--documenter-dark code,\n  html.theme--documenter-dark pre {\n    -moz-osx-font-smoothing: auto;\n    -webkit-font-smoothing: auto;\n    font-family: \"Source Code Pro\", monospace; }\n  html.theme--documenter-dark body {\n    color: #ececec;\n    font-size: 1em;\n    font-weight: 400;\n    line-height: 1.5; }\n  html.theme--documenter-dark a {\n    color: #e37733;\n    cursor: pointer;\n    text-decoration: none; }\n    html.theme--documenter-dark a strong {\n      color: currentColor; }\n    html.theme--documenter-dark a:hover {\n      color: #f2be9e; }\n  html.theme--documenter-dark code {\n    background-color: #101f38;\n    color: #fff;\n    font-size: 0.875em;\n    font-weight: normal;\n    padding: 0.1em; }\n  html.theme--documenter-dark hr {\n    background-color: whitesmoke;\n    border: none;\n    display: block;\n    height: 2px;\n    margin: 1.5rem 0; }\n  html.theme--documenter-dark img {\n    height: auto;\n    max-width: 100%; }\n  html.theme--documenter-dark input[type=\"checkbox\"],\n  html.theme--documenter-dark input[type=\"radio\"] {\n    vertical-align: baseline; }\n  html.theme--documenter-dark small {\n    font-size: 0.875em; }\n  html.theme--documenter-dark span {\n    font-style: inherit;\n    font-weight: inherit; }\n  html.theme--documenter-dark strong {\n    color: #97b3e2;\n    font-weight: 700; }\n  html.theme--documenter-dark fieldset {\n    border: none; }\n  html.theme--documenter-dark pre {\n    -webkit-overflow-scrolling: touch;\n    background-color: #101f38;\n    color: #ececec;\n    font-size: 0.875em;\n    overflow-x: auto;\n    padding: 1.25rem 1.5rem;\n    white-space: pre;\n    word-wrap: normal; }\n    html.theme--documenter-dark pre code {\n      background-color: transparent;\n      color: currentColor;\n      font-size: 1em;\n      padding: 0; }\n  html.theme--documenter-dark table td,\n  html.theme--documenter-dark table th {\n    vertical-align: top; }\n    html.theme--documenter-dark table td:not([align]),\n    html.theme--documenter-dark table th:not([align]) {\n      text-align: left; }\n  html.theme--documenter-dark table th {\n    color: #97b3e2; }\n  html.theme--documenter-dark .box {\n    background-color: white;\n    border-radius: 6px;\n    box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n    color: #ececec;\n    display: block;\n    padding: 1.25rem; }\n  html.theme--documenter-dark a.box:hover, html.theme--documenter-dark a.box:focus {\n    box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px #e37733; }\n  html.theme--documenter-dark a.box:active {\n    box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #e37733; }\n  html.theme--documenter-dark .button {\n    background-color: white;\n    border-color: #dbdbdb;\n    border-width: 1px;\n    color: #363636;\n    cursor: pointer;\n    justify-content: center;\n    padding-bottom: calc(0.375em - 1px);\n    padding-left: 0.75em;\n    padding-right: 0.75em;\n    padding-top: calc(0.375em - 1px);\n    text-align: center;\n    white-space: nowrap; }\n    html.theme--documenter-dark .button strong {\n      color: inherit; }\n    html.theme--documenter-dark .button .icon, html.theme--documenter-dark .button .icon.is-small, html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search > input.icon, html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search > input.icon, html.theme--documenter-dark .button .icon.is-medium, html.theme--documenter-dark .button .icon.is-large {\n      height: 1.5em;\n      width: 1.5em; }\n    html.theme--documenter-dark .button .icon:first-child:not(:last-child) {\n      margin-left: calc(-0.375em - 1px);\n      margin-right: 0.1875em; }\n    html.theme--documenter-dark .button .icon:last-child:not(:first-child) {\n      margin-left: 0.1875em;\n      margin-right: calc(-0.375em - 1px); }\n    html.theme--documenter-dark .button .icon:first-child:last-child {\n      margin-left: calc(-0.375em - 1px);\n      margin-right: calc(-0.375em - 1px); }\n    html.theme--documenter-dark .button:hover, html.theme--documenter-dark .button.is-hovered {\n      border-color: #b5b5b5;\n      color: #f2be9e; }\n    html.theme--documenter-dark .button:focus, html.theme--documenter-dark .button.is-focused {\n      border-color: #2e63b8;\n      color: #363636; }\n      html.theme--documenter-dark .button:focus:not(:active), html.theme--documenter-dark .button.is-focused:not(:active) {\n        box-shadow: 0 0 0 0.125em rgba(227, 119, 51, 0.25); }\n    html.theme--documenter-dark .button:active, html.theme--documenter-dark .button.is-active {\n      border-color: #4a4a4a;\n      color: #363636; }\n    html.theme--documenter-dark .button.is-text {\n      background-color: transparent;\n      border-color: transparent;\n      color: #ececec;\n      text-decoration: underline; }\n      html.theme--documenter-dark .button.is-text:hover, html.theme--documenter-dark .button.is-text.is-hovered, html.theme--documenter-dark .button.is-text:focus, html.theme--documenter-dark .button.is-text.is-focused {\n        background-color: whitesmoke;\n        color: #97b3e2; }\n      html.theme--documenter-dark .button.is-text:active, html.theme--documenter-dark .button.is-text.is-active {\n        background-color: #e8e8e8;\n        color: #97b3e2; }\n      html.theme--documenter-dark .button.is-text[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-text {\n        background-color: transparent;\n        border-color: transparent;\n        box-shadow: none; }\n    html.theme--documenter-dark .button.is-white {\n      background-color: white;\n      border-color: transparent;\n      color: #0a0a0a; }\n      html.theme--documenter-dark .button.is-white:hover, html.theme--documenter-dark .button.is-white.is-hovered {\n        background-color: #f9f9f9;\n        border-color: transparent;\n        color: #0a0a0a; }\n      html.theme--documenter-dark .button.is-white:focus, html.theme--documenter-dark .button.is-white.is-focused {\n        border-color: transparent;\n        color: #0a0a0a; }\n        html.theme--documenter-dark .button.is-white:focus:not(:active), html.theme--documenter-dark .button.is-white.is-focused:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); }\n      html.theme--documenter-dark .button.is-white:active, html.theme--documenter-dark .button.is-white.is-active {\n        background-color: #f2f2f2;\n        border-color: transparent;\n        color: #0a0a0a; }\n      html.theme--documenter-dark .button.is-white[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-white {\n        background-color: white;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-white.is-inverted {\n        background-color: #0a0a0a;\n        color: white; }\n        html.theme--documenter-dark .button.is-white.is-inverted:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-hovered {\n          background-color: black; }\n        html.theme--documenter-dark .button.is-white.is-inverted[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted {\n          background-color: #0a0a0a;\n          border-color: transparent;\n          box-shadow: none;\n          color: white; }\n      html.theme--documenter-dark .button.is-white.is-loading::after {\n        border-color: transparent transparent #0a0a0a #0a0a0a !important; }\n      html.theme--documenter-dark .button.is-white.is-outlined {\n        background-color: transparent;\n        border-color: white;\n        color: white; }\n        html.theme--documenter-dark .button.is-white.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-outlined.is-focused {\n          background-color: white;\n          border-color: white;\n          color: #0a0a0a; }\n        html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after {\n          border-color: transparent transparent white white !important; }\n        html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #0a0a0a #0a0a0a !important; }\n        html.theme--documenter-dark .button.is-white.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined {\n          background-color: transparent;\n          border-color: white;\n          box-shadow: none;\n          color: white; }\n      html.theme--documenter-dark .button.is-white.is-inverted.is-outlined {\n        background-color: transparent;\n        border-color: #0a0a0a;\n        color: #0a0a0a; }\n        html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused {\n          background-color: #0a0a0a;\n          color: white; }\n        html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent white white !important; }\n        html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined {\n          background-color: transparent;\n          border-color: #0a0a0a;\n          box-shadow: none;\n          color: #0a0a0a; }\n    html.theme--documenter-dark .button.is-black {\n      background-color: #0a0a0a;\n      border-color: transparent;\n      color: white; }\n      html.theme--documenter-dark .button.is-black:hover, html.theme--documenter-dark .button.is-black.is-hovered {\n        background-color: #040404;\n        border-color: transparent;\n        color: white; }\n      html.theme--documenter-dark .button.is-black:focus, html.theme--documenter-dark .button.is-black.is-focused {\n        border-color: transparent;\n        color: white; }\n        html.theme--documenter-dark .button.is-black:focus:not(:active), html.theme--documenter-dark .button.is-black.is-focused:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); }\n      html.theme--documenter-dark .button.is-black:active, html.theme--documenter-dark .button.is-black.is-active {\n        background-color: black;\n        border-color: transparent;\n        color: white; }\n      html.theme--documenter-dark .button.is-black[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-black {\n        background-color: #0a0a0a;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-black.is-inverted {\n        background-color: white;\n        color: #0a0a0a; }\n        html.theme--documenter-dark .button.is-black.is-inverted:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-hovered {\n          background-color: #f2f2f2; }\n        html.theme--documenter-dark .button.is-black.is-inverted[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted {\n          background-color: white;\n          border-color: transparent;\n          box-shadow: none;\n          color: #0a0a0a; }\n      html.theme--documenter-dark .button.is-black.is-loading::after {\n        border-color: transparent transparent white white !important; }\n      html.theme--documenter-dark .button.is-black.is-outlined {\n        background-color: transparent;\n        border-color: #0a0a0a;\n        color: #0a0a0a; }\n        html.theme--documenter-dark .button.is-black.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-outlined.is-focused {\n          background-color: #0a0a0a;\n          border-color: #0a0a0a;\n          color: white; }\n        html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after {\n          border-color: transparent transparent #0a0a0a #0a0a0a !important; }\n        html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent white white !important; }\n        html.theme--documenter-dark .button.is-black.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined {\n          background-color: transparent;\n          border-color: #0a0a0a;\n          box-shadow: none;\n          color: #0a0a0a; }\n      html.theme--documenter-dark .button.is-black.is-inverted.is-outlined {\n        background-color: transparent;\n        border-color: white;\n        color: white; }\n        html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused {\n          background-color: white;\n          color: #0a0a0a; }\n        html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #0a0a0a #0a0a0a !important; }\n        html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined {\n          background-color: transparent;\n          border-color: white;\n          box-shadow: none;\n          color: white; }\n    html.theme--documenter-dark .button.is-light {\n      background-color: whitesmoke;\n      border-color: transparent;\n      color: #363636; }\n      html.theme--documenter-dark .button.is-light:hover, html.theme--documenter-dark .button.is-light.is-hovered {\n        background-color: #eeeeee;\n        border-color: transparent;\n        color: #363636; }\n      html.theme--documenter-dark .button.is-light:focus, html.theme--documenter-dark .button.is-light.is-focused {\n        border-color: transparent;\n        color: #363636; }\n        html.theme--documenter-dark .button.is-light:focus:not(:active), html.theme--documenter-dark .button.is-light.is-focused:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); }\n      html.theme--documenter-dark .button.is-light:active, html.theme--documenter-dark .button.is-light.is-active {\n        background-color: #e8e8e8;\n        border-color: transparent;\n        color: #363636; }\n      html.theme--documenter-dark .button.is-light[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-light {\n        background-color: whitesmoke;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-light.is-inverted {\n        background-color: #363636;\n        color: whitesmoke; }\n        html.theme--documenter-dark .button.is-light.is-inverted:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-hovered {\n          background-color: #292929; }\n        html.theme--documenter-dark .button.is-light.is-inverted[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted {\n          background-color: #363636;\n          border-color: transparent;\n          box-shadow: none;\n          color: whitesmoke; }\n      html.theme--documenter-dark .button.is-light.is-loading::after {\n        border-color: transparent transparent #363636 #363636 !important; }\n      html.theme--documenter-dark .button.is-light.is-outlined {\n        background-color: transparent;\n        border-color: whitesmoke;\n        color: whitesmoke; }\n        html.theme--documenter-dark .button.is-light.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-outlined.is-focused {\n          background-color: whitesmoke;\n          border-color: whitesmoke;\n          color: #363636; }\n        html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after {\n          border-color: transparent transparent whitesmoke whitesmoke !important; }\n        html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #363636 #363636 !important; }\n        html.theme--documenter-dark .button.is-light.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined {\n          background-color: transparent;\n          border-color: whitesmoke;\n          box-shadow: none;\n          color: whitesmoke; }\n      html.theme--documenter-dark .button.is-light.is-inverted.is-outlined {\n        background-color: transparent;\n        border-color: #363636;\n        color: #363636; }\n        html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused {\n          background-color: #363636;\n          color: whitesmoke; }\n        html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent whitesmoke whitesmoke !important; }\n        html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined {\n          background-color: transparent;\n          border-color: #363636;\n          box-shadow: none;\n          color: #363636; }\n    html.theme--documenter-dark .button.is-dark, html.theme--documenter-dark .content kbd.button {\n      background-color: #363636;\n      border-color: transparent;\n      color: whitesmoke; }\n      html.theme--documenter-dark .button.is-dark:hover, html.theme--documenter-dark .content kbd.button:hover, html.theme--documenter-dark .button.is-dark.is-hovered, html.theme--documenter-dark .content kbd.button.is-hovered {\n        background-color: #2f2f2f;\n        border-color: transparent;\n        color: whitesmoke; }\n      html.theme--documenter-dark .button.is-dark:focus, html.theme--documenter-dark .content kbd.button:focus, html.theme--documenter-dark .button.is-dark.is-focused, html.theme--documenter-dark .content kbd.button.is-focused {\n        border-color: transparent;\n        color: whitesmoke; }\n        html.theme--documenter-dark .button.is-dark:focus:not(:active), html.theme--documenter-dark .content kbd.button:focus:not(:active), html.theme--documenter-dark .button.is-dark.is-focused:not(:active), html.theme--documenter-dark .content kbd.button.is-focused:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); }\n      html.theme--documenter-dark .button.is-dark:active, html.theme--documenter-dark .content kbd.button:active, html.theme--documenter-dark .button.is-dark.is-active, html.theme--documenter-dark .content kbd.button.is-active {\n        background-color: #292929;\n        border-color: transparent;\n        color: whitesmoke; }\n      html.theme--documenter-dark .button.is-dark[disabled], html.theme--documenter-dark .content kbd.button[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-dark,\n      fieldset[disabled] html.theme--documenter-dark .content kbd.button {\n        background-color: #363636;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-dark.is-inverted, html.theme--documenter-dark .content kbd.button.is-inverted {\n        background-color: whitesmoke;\n        color: #363636; }\n        html.theme--documenter-dark .button.is-dark.is-inverted:hover, html.theme--documenter-dark .content kbd.button.is-inverted:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered {\n          background-color: #e8e8e8; }\n        html.theme--documenter-dark .button.is-dark.is-inverted[disabled], html.theme--documenter-dark .content kbd.button.is-inverted[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,\n        fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted {\n          background-color: whitesmoke;\n          border-color: transparent;\n          box-shadow: none;\n          color: #363636; }\n      html.theme--documenter-dark .button.is-dark.is-loading::after, html.theme--documenter-dark .content kbd.button.is-loading::after {\n        border-color: transparent transparent whitesmoke whitesmoke !important; }\n      html.theme--documenter-dark .button.is-dark.is-outlined, html.theme--documenter-dark .content kbd.button.is-outlined {\n        background-color: transparent;\n        border-color: #363636;\n        color: #363636; }\n        html.theme--documenter-dark .button.is-dark.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-outlined.is-focused {\n          background-color: #363636;\n          border-color: #363636;\n          color: whitesmoke; }\n        html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after {\n          border-color: transparent transparent #363636 #363636 !important; }\n        html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent whitesmoke whitesmoke !important; }\n        html.theme--documenter-dark .button.is-dark.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,\n        fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined {\n          background-color: transparent;\n          border-color: #363636;\n          box-shadow: none;\n          color: #363636; }\n      html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined {\n        background-color: transparent;\n        border-color: whitesmoke;\n        color: whitesmoke; }\n        html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused {\n          background-color: whitesmoke;\n          color: #363636; }\n        html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #363636 #363636 !important; }\n        html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled], html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,\n        fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined {\n          background-color: transparent;\n          border-color: whitesmoke;\n          box-shadow: none;\n          color: whitesmoke; }\n    html.theme--documenter-dark .button.is-primary, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink {\n      background-color: #4eb5de;\n      border-color: transparent;\n      color: #fff; }\n      html.theme--documenter-dark .button.is-primary:hover, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-hovered.docs-sourcelink {\n        background-color: #43b1dc;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-primary:focus, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink {\n        border-color: transparent;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-primary:focus:not(:active), html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:focus:not(:active), html.theme--documenter-dark .button.is-primary.is-focused:not(:active), html.theme--documenter-dark .docstring > section > a.button.is-focused.docs-sourcelink:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); }\n      html.theme--documenter-dark .button.is-primary:active, html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink:active, html.theme--documenter-dark .button.is-primary.is-active, html.theme--documenter-dark .docstring > section > a.button.is-active.docs-sourcelink {\n        background-color: #39acda;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-primary[disabled], html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-primary,\n      fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.docs-sourcelink {\n        background-color: #4eb5de;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-primary.is-inverted, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink {\n        background-color: #fff;\n        color: #4eb5de; }\n        html.theme--documenter-dark .button.is-primary.is-inverted:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-hovered.docs-sourcelink {\n          background-color: #f2f2f2; }\n        html.theme--documenter-dark .button.is-primary.is-inverted[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,\n        fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.docs-sourcelink {\n          background-color: #fff;\n          border-color: transparent;\n          box-shadow: none;\n          color: #4eb5de; }\n      html.theme--documenter-dark .button.is-primary.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-loading.docs-sourcelink::after {\n        border-color: transparent transparent #fff #fff !important; }\n      html.theme--documenter-dark .button.is-primary.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink {\n        background-color: transparent;\n        border-color: #4eb5de;\n        color: #4eb5de; }\n        html.theme--documenter-dark .button.is-primary.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-focused.docs-sourcelink {\n          background-color: #4eb5de;\n          border-color: #4eb5de;\n          color: #fff; }\n        html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink::after {\n          border-color: transparent transparent #4eb5de #4eb5de !important; }\n        html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after {\n          border-color: transparent transparent #fff #fff !important; }\n        html.theme--documenter-dark .button.is-primary.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,\n        fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-outlined.docs-sourcelink {\n          background-color: transparent;\n          border-color: #4eb5de;\n          box-shadow: none;\n          color: #4eb5de; }\n      html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink {\n        background-color: transparent;\n        border-color: #fff;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:hover, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink:focus, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-focused.docs-sourcelink {\n          background-color: #fff;\n          color: #4eb5de; }\n        html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after, html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after, html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after {\n          border-color: transparent transparent #4eb5de #4eb5de !important; }\n        html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled], html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,\n        fieldset[disabled] html.theme--documenter-dark .docstring > section > a.button.is-inverted.is-outlined.docs-sourcelink {\n          background-color: transparent;\n          border-color: #fff;\n          box-shadow: none;\n          color: #fff; }\n    html.theme--documenter-dark .button.is-link {\n      background-color: #e37733;\n      border-color: transparent;\n      color: #fff; }\n      html.theme--documenter-dark .button.is-link:hover, html.theme--documenter-dark .button.is-link.is-hovered {\n        background-color: #e16f28;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-link:focus, html.theme--documenter-dark .button.is-link.is-focused {\n        border-color: transparent;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-link:focus:not(:active), html.theme--documenter-dark .button.is-link.is-focused:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(227, 119, 51, 0.25); }\n      html.theme--documenter-dark .button.is-link:active, html.theme--documenter-dark .button.is-link.is-active {\n        background-color: #dd681f;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-link[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-link {\n        background-color: #e37733;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-link.is-inverted {\n        background-color: #fff;\n        color: #e37733; }\n        html.theme--documenter-dark .button.is-link.is-inverted:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-hovered {\n          background-color: #f2f2f2; }\n        html.theme--documenter-dark .button.is-link.is-inverted[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted {\n          background-color: #fff;\n          border-color: transparent;\n          box-shadow: none;\n          color: #e37733; }\n      html.theme--documenter-dark .button.is-link.is-loading::after {\n        border-color: transparent transparent #fff #fff !important; }\n      html.theme--documenter-dark .button.is-link.is-outlined {\n        background-color: transparent;\n        border-color: #e37733;\n        color: #e37733; }\n        html.theme--documenter-dark .button.is-link.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-outlined.is-focused {\n          background-color: #e37733;\n          border-color: #e37733;\n          color: #fff; }\n        html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after {\n          border-color: transparent transparent #e37733 #e37733 !important; }\n        html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #fff #fff !important; }\n        html.theme--documenter-dark .button.is-link.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined {\n          background-color: transparent;\n          border-color: #e37733;\n          box-shadow: none;\n          color: #e37733; }\n      html.theme--documenter-dark .button.is-link.is-inverted.is-outlined {\n        background-color: transparent;\n        border-color: #fff;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused {\n          background-color: #fff;\n          color: #e37733; }\n        html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #e37733 #e37733 !important; }\n        html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined {\n          background-color: transparent;\n          border-color: #fff;\n          box-shadow: none;\n          color: #fff; }\n    html.theme--documenter-dark .button.is-info {\n      background-color: #209cee;\n      border-color: transparent;\n      color: #fff; }\n      html.theme--documenter-dark .button.is-info:hover, html.theme--documenter-dark .button.is-info.is-hovered {\n        background-color: #1496ed;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-info:focus, html.theme--documenter-dark .button.is-info.is-focused {\n        border-color: transparent;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-info:focus:not(:active), html.theme--documenter-dark .button.is-info.is-focused:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); }\n      html.theme--documenter-dark .button.is-info:active, html.theme--documenter-dark .button.is-info.is-active {\n        background-color: #118fe4;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-info[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-info {\n        background-color: #209cee;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-info.is-inverted {\n        background-color: #fff;\n        color: #209cee; }\n        html.theme--documenter-dark .button.is-info.is-inverted:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-hovered {\n          background-color: #f2f2f2; }\n        html.theme--documenter-dark .button.is-info.is-inverted[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted {\n          background-color: #fff;\n          border-color: transparent;\n          box-shadow: none;\n          color: #209cee; }\n      html.theme--documenter-dark .button.is-info.is-loading::after {\n        border-color: transparent transparent #fff #fff !important; }\n      html.theme--documenter-dark .button.is-info.is-outlined {\n        background-color: transparent;\n        border-color: #209cee;\n        color: #209cee; }\n        html.theme--documenter-dark .button.is-info.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-outlined.is-focused {\n          background-color: #209cee;\n          border-color: #209cee;\n          color: #fff; }\n        html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after {\n          border-color: transparent transparent #209cee #209cee !important; }\n        html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #fff #fff !important; }\n        html.theme--documenter-dark .button.is-info.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined {\n          background-color: transparent;\n          border-color: #209cee;\n          box-shadow: none;\n          color: #209cee; }\n      html.theme--documenter-dark .button.is-info.is-inverted.is-outlined {\n        background-color: transparent;\n        border-color: #fff;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused {\n          background-color: #fff;\n          color: #209cee; }\n        html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #209cee #209cee !important; }\n        html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined {\n          background-color: transparent;\n          border-color: #fff;\n          box-shadow: none;\n          color: #fff; }\n    html.theme--documenter-dark .button.is-success {\n      background-color: #22c35b;\n      border-color: transparent;\n      color: #fff; }\n      html.theme--documenter-dark .button.is-success:hover, html.theme--documenter-dark .button.is-success.is-hovered {\n        background-color: #20b856;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-success:focus, html.theme--documenter-dark .button.is-success.is-focused {\n        border-color: transparent;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-success:focus:not(:active), html.theme--documenter-dark .button.is-success.is-focused:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); }\n      html.theme--documenter-dark .button.is-success:active, html.theme--documenter-dark .button.is-success.is-active {\n        background-color: #1ead51;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-success[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-success {\n        background-color: #22c35b;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-success.is-inverted {\n        background-color: #fff;\n        color: #22c35b; }\n        html.theme--documenter-dark .button.is-success.is-inverted:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-hovered {\n          background-color: #f2f2f2; }\n        html.theme--documenter-dark .button.is-success.is-inverted[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted {\n          background-color: #fff;\n          border-color: transparent;\n          box-shadow: none;\n          color: #22c35b; }\n      html.theme--documenter-dark .button.is-success.is-loading::after {\n        border-color: transparent transparent #fff #fff !important; }\n      html.theme--documenter-dark .button.is-success.is-outlined {\n        background-color: transparent;\n        border-color: #22c35b;\n        color: #22c35b; }\n        html.theme--documenter-dark .button.is-success.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-outlined.is-focused {\n          background-color: #22c35b;\n          border-color: #22c35b;\n          color: #fff; }\n        html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after {\n          border-color: transparent transparent #22c35b #22c35b !important; }\n        html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #fff #fff !important; }\n        html.theme--documenter-dark .button.is-success.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined {\n          background-color: transparent;\n          border-color: #22c35b;\n          box-shadow: none;\n          color: #22c35b; }\n      html.theme--documenter-dark .button.is-success.is-inverted.is-outlined {\n        background-color: transparent;\n        border-color: #fff;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused {\n          background-color: #fff;\n          color: #22c35b; }\n        html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #22c35b #22c35b !important; }\n        html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined {\n          background-color: transparent;\n          border-color: #fff;\n          box-shadow: none;\n          color: #fff; }\n    html.theme--documenter-dark .button.is-warning {\n      background-color: #ffdd57;\n      border-color: transparent;\n      color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .button.is-warning:hover, html.theme--documenter-dark .button.is-warning.is-hovered {\n        background-color: #ffdb4a;\n        border-color: transparent;\n        color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .button.is-warning:focus, html.theme--documenter-dark .button.is-warning.is-focused {\n        border-color: transparent;\n        color: rgba(0, 0, 0, 0.7); }\n        html.theme--documenter-dark .button.is-warning:focus:not(:active), html.theme--documenter-dark .button.is-warning.is-focused:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); }\n      html.theme--documenter-dark .button.is-warning:active, html.theme--documenter-dark .button.is-warning.is-active {\n        background-color: #ffd83d;\n        border-color: transparent;\n        color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .button.is-warning[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-warning {\n        background-color: #ffdd57;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-warning.is-inverted {\n        background-color: rgba(0, 0, 0, 0.7);\n        color: #ffdd57; }\n        html.theme--documenter-dark .button.is-warning.is-inverted:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered {\n          background-color: rgba(0, 0, 0, 0.7); }\n        html.theme--documenter-dark .button.is-warning.is-inverted[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted {\n          background-color: rgba(0, 0, 0, 0.7);\n          border-color: transparent;\n          box-shadow: none;\n          color: #ffdd57; }\n      html.theme--documenter-dark .button.is-warning.is-loading::after {\n        border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; }\n      html.theme--documenter-dark .button.is-warning.is-outlined {\n        background-color: transparent;\n        border-color: #ffdd57;\n        color: #ffdd57; }\n        html.theme--documenter-dark .button.is-warning.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-outlined.is-focused {\n          background-color: #ffdd57;\n          border-color: #ffdd57;\n          color: rgba(0, 0, 0, 0.7); }\n        html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after {\n          border-color: transparent transparent #ffdd57 #ffdd57 !important; }\n        html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important; }\n        html.theme--documenter-dark .button.is-warning.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined {\n          background-color: transparent;\n          border-color: #ffdd57;\n          box-shadow: none;\n          color: #ffdd57; }\n      html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined {\n        background-color: transparent;\n        border-color: rgba(0, 0, 0, 0.7);\n        color: rgba(0, 0, 0, 0.7); }\n        html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused {\n          background-color: rgba(0, 0, 0, 0.7);\n          color: #ffdd57; }\n        html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #ffdd57 #ffdd57 !important; }\n        html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined {\n          background-color: transparent;\n          border-color: rgba(0, 0, 0, 0.7);\n          box-shadow: none;\n          color: rgba(0, 0, 0, 0.7); }\n    html.theme--documenter-dark .button.is-danger {\n      background-color: #da0b00;\n      border-color: transparent;\n      color: #fff; }\n      html.theme--documenter-dark .button.is-danger:hover, html.theme--documenter-dark .button.is-danger.is-hovered {\n        background-color: #cd0a00;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-danger:focus, html.theme--documenter-dark .button.is-danger.is-focused {\n        border-color: transparent;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-danger:focus:not(:active), html.theme--documenter-dark .button.is-danger.is-focused:not(:active) {\n          box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); }\n      html.theme--documenter-dark .button.is-danger:active, html.theme--documenter-dark .button.is-danger.is-active {\n        background-color: #c10a00;\n        border-color: transparent;\n        color: #fff; }\n      html.theme--documenter-dark .button.is-danger[disabled],\n      fieldset[disabled] html.theme--documenter-dark .button.is-danger {\n        background-color: #da0b00;\n        border-color: transparent;\n        box-shadow: none; }\n      html.theme--documenter-dark .button.is-danger.is-inverted {\n        background-color: #fff;\n        color: #da0b00; }\n        html.theme--documenter-dark .button.is-danger.is-inverted:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered {\n          background-color: #f2f2f2; }\n        html.theme--documenter-dark .button.is-danger.is-inverted[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted {\n          background-color: #fff;\n          border-color: transparent;\n          box-shadow: none;\n          color: #da0b00; }\n      html.theme--documenter-dark .button.is-danger.is-loading::after {\n        border-color: transparent transparent #fff #fff !important; }\n      html.theme--documenter-dark .button.is-danger.is-outlined {\n        background-color: transparent;\n        border-color: #da0b00;\n        color: #da0b00; }\n        html.theme--documenter-dark .button.is-danger.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-outlined.is-focused {\n          background-color: #da0b00;\n          border-color: #da0b00;\n          color: #fff; }\n        html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after {\n          border-color: transparent transparent #da0b00 #da0b00 !important; }\n        html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #fff #fff !important; }\n        html.theme--documenter-dark .button.is-danger.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined {\n          background-color: transparent;\n          border-color: #da0b00;\n          box-shadow: none;\n          color: #da0b00; }\n      html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined {\n        background-color: transparent;\n        border-color: #fff;\n        color: #fff; }\n        html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused {\n          background-color: #fff;\n          color: #da0b00; }\n        html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after {\n          border-color: transparent transparent #da0b00 #da0b00 !important; }\n        html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],\n        fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined {\n          background-color: transparent;\n          border-color: #fff;\n          box-shadow: none;\n          color: #fff; }\n    html.theme--documenter-dark .button.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button {\n      border-radius: 2px;\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .button.is-normal {\n      font-size: 1rem; }\n    html.theme--documenter-dark .button.is-medium {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .button.is-large {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .button[disabled],\n    fieldset[disabled] html.theme--documenter-dark .button {\n      background-color: white;\n      border-color: #dbdbdb;\n      box-shadow: none;\n      opacity: 0.5; }\n    html.theme--documenter-dark .button.is-fullwidth {\n      display: flex;\n      width: 100%; }\n    html.theme--documenter-dark .button.is-loading {\n      color: transparent !important;\n      pointer-events: none; }\n      html.theme--documenter-dark .button.is-loading::after {\n        position: absolute;\n        left: calc(50% - (1em / 2));\n        top: calc(50% - (1em / 2));\n        position: absolute !important; }\n    html.theme--documenter-dark .button.is-static {\n      background-color: whitesmoke;\n      border-color: #dbdbdb;\n      color: #7a7a7a;\n      box-shadow: none;\n      pointer-events: none; }\n    html.theme--documenter-dark .button.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.button {\n      border-radius: 290486px;\n      padding-left: 1em;\n      padding-right: 1em; }\n  html.theme--documenter-dark .buttons {\n    align-items: center;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: flex-start; }\n    html.theme--documenter-dark .buttons .button {\n      margin-bottom: 0.5rem; }\n      html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth) {\n        margin-right: 0.5rem; }\n    html.theme--documenter-dark .buttons:last-child {\n      margin-bottom: -0.5rem; }\n    html.theme--documenter-dark .buttons:not(:last-child) {\n      margin-bottom: 1rem; }\n    html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) {\n      border-radius: 2px;\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .buttons.has-addons .button:not(:first-child) {\n      border-bottom-left-radius: 0;\n      border-top-left-radius: 0; }\n    html.theme--documenter-dark .buttons.has-addons .button:not(:last-child) {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0;\n      margin-right: -1px; }\n    html.theme--documenter-dark .buttons.has-addons .button:last-child {\n      margin-right: 0; }\n    html.theme--documenter-dark .buttons.has-addons .button:hover, html.theme--documenter-dark .buttons.has-addons .button.is-hovered {\n      z-index: 2; }\n    html.theme--documenter-dark .buttons.has-addons .button:focus, html.theme--documenter-dark .buttons.has-addons .button.is-focused, html.theme--documenter-dark .buttons.has-addons .button:active, html.theme--documenter-dark .buttons.has-addons .button.is-active, html.theme--documenter-dark .buttons.has-addons .button.is-selected {\n      z-index: 3; }\n      html.theme--documenter-dark .buttons.has-addons .button:focus:hover, html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover, html.theme--documenter-dark .buttons.has-addons .button:active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-active:hover, html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover {\n        z-index: 4; }\n    html.theme--documenter-dark .buttons.has-addons .button.is-expanded {\n      flex-grow: 1;\n      flex-shrink: 1; }\n    html.theme--documenter-dark .buttons.is-centered {\n      justify-content: center; }\n      html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) {\n        margin-left: 0.25rem;\n        margin-right: 0.25rem; }\n    html.theme--documenter-dark .buttons.is-right {\n      justify-content: flex-end; }\n      html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) {\n        margin-left: 0.25rem;\n        margin-right: 0.25rem; }\n  html.theme--documenter-dark .container {\n    flex-grow: 1;\n    margin: 0 auto;\n    position: relative;\n    width: auto; }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .container {\n        max-width: 992px; }\n        html.theme--documenter-dark .container.is-fluid {\n          margin-left: 32px;\n          margin-right: 32px;\n          max-width: none; } }\n    @media screen and (max-width: 1215px) {\n      html.theme--documenter-dark .container.is-widescreen {\n        max-width: 1152px; } }\n    @media screen and (max-width: 1407px) {\n      html.theme--documenter-dark .container.is-fullhd {\n        max-width: 1344px; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .container {\n        max-width: 1152px; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .container {\n        max-width: 1344px; } }\n  html.theme--documenter-dark .content li + li {\n    margin-top: 0.25em; }\n  html.theme--documenter-dark .content p:not(:last-child),\n  html.theme--documenter-dark .content dl:not(:last-child),\n  html.theme--documenter-dark .content ol:not(:last-child),\n  html.theme--documenter-dark .content ul:not(:last-child),\n  html.theme--documenter-dark .content blockquote:not(:last-child),\n  html.theme--documenter-dark .content pre:not(:last-child),\n  html.theme--documenter-dark .content table:not(:last-child) {\n    margin-bottom: 1em; }\n  html.theme--documenter-dark .content h1,\n  html.theme--documenter-dark .content h2,\n  html.theme--documenter-dark .content h3,\n  html.theme--documenter-dark .content h4,\n  html.theme--documenter-dark .content h5,\n  html.theme--documenter-dark .content h6 {\n    color: #97b3e2;\n    font-weight: 600;\n    line-height: 1.125; }\n  html.theme--documenter-dark .content h1 {\n    font-size: 2em;\n    margin-bottom: 0.5em; }\n    html.theme--documenter-dark .content h1:not(:first-child) {\n      margin-top: 1em; }\n  html.theme--documenter-dark .content h2 {\n    font-size: 1.75em;\n    margin-bottom: 0.5714em; }\n    html.theme--documenter-dark .content h2:not(:first-child) {\n      margin-top: 1.1428em; }\n  html.theme--documenter-dark .content h3 {\n    font-size: 1.5em;\n    margin-bottom: 0.6666em; }\n    html.theme--documenter-dark .content h3:not(:first-child) {\n      margin-top: 1.3333em; }\n  html.theme--documenter-dark .content h4 {\n    font-size: 1.25em;\n    margin-bottom: 0.8em; }\n  html.theme--documenter-dark .content h5 {\n    font-size: 1.125em;\n    margin-bottom: 0.8888em; }\n  html.theme--documenter-dark .content h6 {\n    font-size: 1em;\n    margin-bottom: 1em; }\n  html.theme--documenter-dark .content blockquote {\n    background-color: whitesmoke;\n    border-left: 5px solid #dbdbdb;\n    padding: 1.25em 1.5em; }\n  html.theme--documenter-dark .content ol {\n    list-style-position: outside;\n    margin-left: 2em;\n    margin-top: 1em; }\n    html.theme--documenter-dark .content ol:not([type]) {\n      list-style-type: decimal; }\n      html.theme--documenter-dark .content ol:not([type]).is-lower-alpha {\n        list-style-type: lower-alpha; }\n      html.theme--documenter-dark .content ol:not([type]).is-lower-roman {\n        list-style-type: lower-roman; }\n      html.theme--documenter-dark .content ol:not([type]).is-upper-alpha {\n        list-style-type: upper-alpha; }\n      html.theme--documenter-dark .content ol:not([type]).is-upper-roman {\n        list-style-type: upper-roman; }\n  html.theme--documenter-dark .content ul {\n    list-style: disc outside;\n    margin-left: 2em;\n    margin-top: 1em; }\n    html.theme--documenter-dark .content ul ul {\n      list-style-type: circle;\n      margin-top: 0.5em; }\n      html.theme--documenter-dark .content ul ul ul {\n        list-style-type: square; }\n  html.theme--documenter-dark .content dd {\n    margin-left: 2em; }\n  html.theme--documenter-dark .content figure {\n    margin-left: 2em;\n    margin-right: 2em;\n    text-align: center; }\n    html.theme--documenter-dark .content figure:not(:first-child) {\n      margin-top: 2em; }\n    html.theme--documenter-dark .content figure:not(:last-child) {\n      margin-bottom: 2em; }\n    html.theme--documenter-dark .content figure img {\n      display: inline-block; }\n    html.theme--documenter-dark .content figure figcaption {\n      font-style: italic; }\n  html.theme--documenter-dark .content pre {\n    -webkit-overflow-scrolling: touch;\n    overflow-x: auto;\n    padding: 0.7rem 0.5rem;\n    white-space: pre;\n    word-wrap: normal; }\n  html.theme--documenter-dark .content sup,\n  html.theme--documenter-dark .content sub {\n    font-size: 75%; }\n  html.theme--documenter-dark .content table {\n    width: 100%; }\n    html.theme--documenter-dark .content table td,\n    html.theme--documenter-dark .content table th {\n      border: 1px solid #dbdbdb;\n      border-width: 0 0 1px;\n      padding: 0.5em 0.75em;\n      vertical-align: top; }\n    html.theme--documenter-dark .content table th {\n      color: #97b3e2; }\n      html.theme--documenter-dark .content table th:not([align]) {\n        text-align: left; }\n    html.theme--documenter-dark .content table thead td,\n    html.theme--documenter-dark .content table thead th {\n      border-width: 0 0 2px;\n      color: #97b3e2; }\n    html.theme--documenter-dark .content table tfoot td,\n    html.theme--documenter-dark .content table tfoot th {\n      border-width: 2px 0 0;\n      color: #97b3e2; }\n    html.theme--documenter-dark .content table tbody tr:last-child td,\n    html.theme--documenter-dark .content table tbody tr:last-child th {\n      border-bottom-width: 0; }\n  html.theme--documenter-dark .content .tabs li + li {\n    margin-top: 0; }\n  html.theme--documenter-dark .content.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.content {\n    font-size: 0.75rem; }\n  html.theme--documenter-dark .content.is-medium {\n    font-size: 1.25rem; }\n  html.theme--documenter-dark .content.is-large {\n    font-size: 1.5rem; }\n  html.theme--documenter-dark .icon {\n    align-items: center;\n    display: inline-flex;\n    justify-content: center;\n    height: 1.5rem;\n    width: 1.5rem; }\n    html.theme--documenter-dark .icon.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.icon {\n      height: 1rem;\n      width: 1rem; }\n    html.theme--documenter-dark .icon.is-medium {\n      height: 2rem;\n      width: 2rem; }\n    html.theme--documenter-dark .icon.is-large {\n      height: 3rem;\n      width: 3rem; }\n  html.theme--documenter-dark .image, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img {\n    display: block;\n    position: relative; }\n    html.theme--documenter-dark .image img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img {\n      display: block;\n      height: auto;\n      width: 100%; }\n      html.theme--documenter-dark .image img.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img img.is-rounded {\n        border-radius: 290486px; }\n    html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img,\n    html.theme--documenter-dark .image.is-square .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img,\n    html.theme--documenter-dark .image.is-1by1 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img,\n    html.theme--documenter-dark .image.is-5by4 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img,\n    html.theme--documenter-dark .image.is-4by3 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img,\n    html.theme--documenter-dark .image.is-3by2 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img,\n    html.theme--documenter-dark .image.is-5by3 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img,\n    html.theme--documenter-dark .image.is-16by9 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img,\n    html.theme--documenter-dark .image.is-2by1 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img,\n    html.theme--documenter-dark .image.is-3by1 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img,\n    html.theme--documenter-dark .image.is-4by5 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img,\n    html.theme--documenter-dark .image.is-3by4 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img,\n    html.theme--documenter-dark .image.is-2by3 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img,\n    html.theme--documenter-dark .image.is-3by5 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img,\n    html.theme--documenter-dark .image.is-9by16 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img,\n    html.theme--documenter-dark .image.is-1by2 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img,\n    html.theme--documenter-dark .image.is-1by3 .has-ratio,\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio {\n      height: 100%;\n      width: 100%; }\n    html.theme--documenter-dark .image.is-square, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square, html.theme--documenter-dark .image.is-1by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 {\n      padding-top: 100%; }\n    html.theme--documenter-dark .image.is-5by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 {\n      padding-top: 80%; }\n    html.theme--documenter-dark .image.is-4by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 {\n      padding-top: 75%; }\n    html.theme--documenter-dark .image.is-3by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 {\n      padding-top: 66.6666%; }\n    html.theme--documenter-dark .image.is-5by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 {\n      padding-top: 60%; }\n    html.theme--documenter-dark .image.is-16by9, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 {\n      padding-top: 56.25%; }\n    html.theme--documenter-dark .image.is-2by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 {\n      padding-top: 50%; }\n    html.theme--documenter-dark .image.is-3by1, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 {\n      padding-top: 33.3333%; }\n    html.theme--documenter-dark .image.is-4by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 {\n      padding-top: 125%; }\n    html.theme--documenter-dark .image.is-3by4, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 {\n      padding-top: 133.3333%; }\n    html.theme--documenter-dark .image.is-2by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 {\n      padding-top: 150%; }\n    html.theme--documenter-dark .image.is-3by5, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 {\n      padding-top: 166.6666%; }\n    html.theme--documenter-dark .image.is-9by16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 {\n      padding-top: 177.7777%; }\n    html.theme--documenter-dark .image.is-1by2, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 {\n      padding-top: 200%; }\n    html.theme--documenter-dark .image.is-1by3, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 {\n      padding-top: 300%; }\n    html.theme--documenter-dark .image.is-16x16, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16x16 {\n      height: 16px;\n      width: 16px; }\n    html.theme--documenter-dark .image.is-24x24, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-24x24 {\n      height: 24px;\n      width: 24px; }\n    html.theme--documenter-dark .image.is-32x32, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-32x32 {\n      height: 32px;\n      width: 32px; }\n    html.theme--documenter-dark .image.is-48x48, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-48x48 {\n      height: 48px;\n      width: 48px; }\n    html.theme--documenter-dark .image.is-64x64, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-64x64 {\n      height: 64px;\n      width: 64px; }\n    html.theme--documenter-dark .image.is-96x96, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-96x96 {\n      height: 96px;\n      width: 96px; }\n    html.theme--documenter-dark .image.is-128x128, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-128x128 {\n      height: 128px;\n      width: 128px; }\n  html.theme--documenter-dark .notification {\n    background-color: whitesmoke;\n    border-radius: 4px;\n    padding: 1.25rem 2.5rem 1.25rem 1.5rem;\n    position: relative; }\n    html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item) {\n      color: currentColor;\n      text-decoration: underline; }\n    html.theme--documenter-dark .notification strong {\n      color: currentColor; }\n    html.theme--documenter-dark .notification code,\n    html.theme--documenter-dark .notification pre {\n      background: white; }\n    html.theme--documenter-dark .notification pre code {\n      background: transparent; }\n    html.theme--documenter-dark .notification > .delete {\n      position: absolute;\n      right: 0.5rem;\n      top: 0.5rem; }\n    html.theme--documenter-dark .notification .title,\n    html.theme--documenter-dark .notification .subtitle,\n    html.theme--documenter-dark .notification .content {\n      color: currentColor; }\n    html.theme--documenter-dark .notification.is-white {\n      background-color: white;\n      color: #0a0a0a; }\n    html.theme--documenter-dark .notification.is-black {\n      background-color: #0a0a0a;\n      color: white; }\n    html.theme--documenter-dark .notification.is-light {\n      background-color: whitesmoke;\n      color: #363636; }\n    html.theme--documenter-dark .notification.is-dark, html.theme--documenter-dark .content kbd.notification {\n      background-color: #363636;\n      color: whitesmoke; }\n    html.theme--documenter-dark .notification.is-primary, html.theme--documenter-dark .docstring > section > a.notification.docs-sourcelink {\n      background-color: #4eb5de;\n      color: #fff; }\n    html.theme--documenter-dark .notification.is-link {\n      background-color: #e37733;\n      color: #fff; }\n    html.theme--documenter-dark .notification.is-info {\n      background-color: #209cee;\n      color: #fff; }\n    html.theme--documenter-dark .notification.is-success {\n      background-color: #22c35b;\n      color: #fff; }\n    html.theme--documenter-dark .notification.is-warning {\n      background-color: #ffdd57;\n      color: rgba(0, 0, 0, 0.7); }\n    html.theme--documenter-dark .notification.is-danger {\n      background-color: #da0b00;\n      color: #fff; }\n  html.theme--documenter-dark .progress {\n    -moz-appearance: none;\n    -webkit-appearance: none;\n    border: none;\n    border-radius: 290486px;\n    display: block;\n    height: 1rem;\n    overflow: hidden;\n    padding: 0;\n    width: 100%; }\n    html.theme--documenter-dark .progress::-webkit-progress-bar {\n      background-color: #dbdbdb; }\n    html.theme--documenter-dark .progress::-webkit-progress-value {\n      background-color: #ececec; }\n    html.theme--documenter-dark .progress::-moz-progress-bar {\n      background-color: #ececec; }\n    html.theme--documenter-dark .progress::-ms-fill {\n      background-color: #ececec;\n      border: none; }\n    html.theme--documenter-dark .progress.is-white::-webkit-progress-value {\n      background-color: white; }\n    html.theme--documenter-dark .progress.is-white::-moz-progress-bar {\n      background-color: white; }\n    html.theme--documenter-dark .progress.is-white::-ms-fill {\n      background-color: white; }\n    html.theme--documenter-dark .progress.is-white:indeterminate {\n      background-image: linear-gradient(to right, white 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress.is-black::-webkit-progress-value {\n      background-color: #0a0a0a; }\n    html.theme--documenter-dark .progress.is-black::-moz-progress-bar {\n      background-color: #0a0a0a; }\n    html.theme--documenter-dark .progress.is-black::-ms-fill {\n      background-color: #0a0a0a; }\n    html.theme--documenter-dark .progress.is-black:indeterminate {\n      background-image: linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress.is-light::-webkit-progress-value {\n      background-color: whitesmoke; }\n    html.theme--documenter-dark .progress.is-light::-moz-progress-bar {\n      background-color: whitesmoke; }\n    html.theme--documenter-dark .progress.is-light::-ms-fill {\n      background-color: whitesmoke; }\n    html.theme--documenter-dark .progress.is-light:indeterminate {\n      background-image: linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress.is-dark::-webkit-progress-value, html.theme--documenter-dark .content kbd.progress::-webkit-progress-value {\n      background-color: #363636; }\n    html.theme--documenter-dark .progress.is-dark::-moz-progress-bar, html.theme--documenter-dark .content kbd.progress::-moz-progress-bar {\n      background-color: #363636; }\n    html.theme--documenter-dark .progress.is-dark::-ms-fill, html.theme--documenter-dark .content kbd.progress::-ms-fill {\n      background-color: #363636; }\n    html.theme--documenter-dark .progress.is-dark:indeterminate, html.theme--documenter-dark .content kbd.progress:indeterminate {\n      background-image: linear-gradient(to right, #363636 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress.is-primary::-webkit-progress-value, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-webkit-progress-value {\n      background-color: #4eb5de; }\n    html.theme--documenter-dark .progress.is-primary::-moz-progress-bar, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-moz-progress-bar {\n      background-color: #4eb5de; }\n    html.theme--documenter-dark .progress.is-primary::-ms-fill, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink::-ms-fill {\n      background-color: #4eb5de; }\n    html.theme--documenter-dark .progress.is-primary:indeterminate, html.theme--documenter-dark .docstring > section > a.progress.docs-sourcelink:indeterminate {\n      background-image: linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress.is-link::-webkit-progress-value {\n      background-color: #e37733; }\n    html.theme--documenter-dark .progress.is-link::-moz-progress-bar {\n      background-color: #e37733; }\n    html.theme--documenter-dark .progress.is-link::-ms-fill {\n      background-color: #e37733; }\n    html.theme--documenter-dark .progress.is-link:indeterminate {\n      background-image: linear-gradient(to right, #e37733 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress.is-info::-webkit-progress-value {\n      background-color: #209cee; }\n    html.theme--documenter-dark .progress.is-info::-moz-progress-bar {\n      background-color: #209cee; }\n    html.theme--documenter-dark .progress.is-info::-ms-fill {\n      background-color: #209cee; }\n    html.theme--documenter-dark .progress.is-info:indeterminate {\n      background-image: linear-gradient(to right, #209cee 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress.is-success::-webkit-progress-value {\n      background-color: #22c35b; }\n    html.theme--documenter-dark .progress.is-success::-moz-progress-bar {\n      background-color: #22c35b; }\n    html.theme--documenter-dark .progress.is-success::-ms-fill {\n      background-color: #22c35b; }\n    html.theme--documenter-dark .progress.is-success:indeterminate {\n      background-image: linear-gradient(to right, #22c35b 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress.is-warning::-webkit-progress-value {\n      background-color: #ffdd57; }\n    html.theme--documenter-dark .progress.is-warning::-moz-progress-bar {\n      background-color: #ffdd57; }\n    html.theme--documenter-dark .progress.is-warning::-ms-fill {\n      background-color: #ffdd57; }\n    html.theme--documenter-dark .progress.is-warning:indeterminate {\n      background-image: linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress.is-danger::-webkit-progress-value {\n      background-color: #da0b00; }\n    html.theme--documenter-dark .progress.is-danger::-moz-progress-bar {\n      background-color: #da0b00; }\n    html.theme--documenter-dark .progress.is-danger::-ms-fill {\n      background-color: #da0b00; }\n    html.theme--documenter-dark .progress.is-danger:indeterminate {\n      background-image: linear-gradient(to right, #da0b00 30%, #dbdbdb 30%); }\n    html.theme--documenter-dark .progress:indeterminate {\n      animation-duration: 1.5s;\n      animation-iteration-count: infinite;\n      animation-name: moveIndeterminate;\n      animation-timing-function: linear;\n      background-color: #dbdbdb;\n      background-image: linear-gradient(to right, #ececec 30%, #dbdbdb 30%);\n      background-position: top left;\n      background-repeat: no-repeat;\n      background-size: 150% 150%; }\n      html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar {\n        background-color: transparent; }\n      html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar {\n        background-color: transparent; }\n    html.theme--documenter-dark .progress.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.progress {\n      height: 0.75rem; }\n    html.theme--documenter-dark .progress.is-medium {\n      height: 1.25rem; }\n    html.theme--documenter-dark .progress.is-large {\n      height: 1.5rem; }\n\n@keyframes moveIndeterminate {\n  from {\n    background-position: 200% 0; }\n  to {\n    background-position: -200% 0; } }\n  html.theme--documenter-dark .table {\n    background-color: white;\n    color: #363636; }\n    html.theme--documenter-dark .table td,\n    html.theme--documenter-dark .table th {\n      border: 1px solid #dbdbdb;\n      border-width: 0 0 1px;\n      padding: 0.5em 0.75em;\n      vertical-align: top; }\n      html.theme--documenter-dark .table td.is-white,\n      html.theme--documenter-dark .table th.is-white {\n        background-color: white;\n        border-color: white;\n        color: #0a0a0a; }\n      html.theme--documenter-dark .table td.is-black,\n      html.theme--documenter-dark .table th.is-black {\n        background-color: #0a0a0a;\n        border-color: #0a0a0a;\n        color: white; }\n      html.theme--documenter-dark .table td.is-light,\n      html.theme--documenter-dark .table th.is-light {\n        background-color: whitesmoke;\n        border-color: whitesmoke;\n        color: #363636; }\n      html.theme--documenter-dark .table td.is-dark,\n      html.theme--documenter-dark .table th.is-dark {\n        background-color: #363636;\n        border-color: #363636;\n        color: whitesmoke; }\n      html.theme--documenter-dark .table td.is-primary,\n      html.theme--documenter-dark .table th.is-primary {\n        background-color: #4eb5de;\n        border-color: #4eb5de;\n        color: #fff; }\n      html.theme--documenter-dark .table td.is-link,\n      html.theme--documenter-dark .table th.is-link {\n        background-color: #e37733;\n        border-color: #e37733;\n        color: #fff; }\n      html.theme--documenter-dark .table td.is-info,\n      html.theme--documenter-dark .table th.is-info {\n        background-color: #209cee;\n        border-color: #209cee;\n        color: #fff; }\n      html.theme--documenter-dark .table td.is-success,\n      html.theme--documenter-dark .table th.is-success {\n        background-color: #22c35b;\n        border-color: #22c35b;\n        color: #fff; }\n      html.theme--documenter-dark .table td.is-warning,\n      html.theme--documenter-dark .table th.is-warning {\n        background-color: #ffdd57;\n        border-color: #ffdd57;\n        color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .table td.is-danger,\n      html.theme--documenter-dark .table th.is-danger {\n        background-color: #da0b00;\n        border-color: #da0b00;\n        color: #fff; }\n      html.theme--documenter-dark .table td.is-narrow,\n      html.theme--documenter-dark .table th.is-narrow {\n        white-space: nowrap;\n        width: 1%; }\n      html.theme--documenter-dark .table td.is-selected,\n      html.theme--documenter-dark .table th.is-selected {\n        background-color: #4eb5de;\n        color: #fff; }\n        html.theme--documenter-dark .table td.is-selected a,\n        html.theme--documenter-dark .table td.is-selected strong,\n        html.theme--documenter-dark .table th.is-selected a,\n        html.theme--documenter-dark .table th.is-selected strong {\n          color: currentColor; }\n    html.theme--documenter-dark .table th {\n      color: #97b3e2; }\n      html.theme--documenter-dark .table th:not([align]) {\n        text-align: left; }\n    html.theme--documenter-dark .table tr.is-selected {\n      background-color: #4eb5de;\n      color: #fff; }\n      html.theme--documenter-dark .table tr.is-selected a,\n      html.theme--documenter-dark .table tr.is-selected strong {\n        color: currentColor; }\n      html.theme--documenter-dark .table tr.is-selected td,\n      html.theme--documenter-dark .table tr.is-selected th {\n        border-color: #fff;\n        color: currentColor; }\n    html.theme--documenter-dark .table thead {\n      background-color: transparent; }\n      html.theme--documenter-dark .table thead td,\n      html.theme--documenter-dark .table thead th {\n        border-width: 0 0 2px;\n        color: #97b3e2; }\n    html.theme--documenter-dark .table tfoot {\n      background-color: transparent; }\n      html.theme--documenter-dark .table tfoot td,\n      html.theme--documenter-dark .table tfoot th {\n        border-width: 2px 0 0;\n        color: #97b3e2; }\n    html.theme--documenter-dark .table tbody {\n      background-color: transparent; }\n      html.theme--documenter-dark .table tbody tr:last-child td,\n      html.theme--documenter-dark .table tbody tr:last-child th {\n        border-bottom-width: 0; }\n    html.theme--documenter-dark .table.is-bordered td,\n    html.theme--documenter-dark .table.is-bordered th {\n      border-width: 1px; }\n    html.theme--documenter-dark .table.is-bordered tr:last-child td,\n    html.theme--documenter-dark .table.is-bordered tr:last-child th {\n      border-bottom-width: 1px; }\n    html.theme--documenter-dark .table.is-fullwidth {\n      width: 100%; }\n    html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover {\n      background-color: #fafafa; }\n    html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover {\n      background-color: #fafafa; }\n      html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) {\n        background-color: whitesmoke; }\n    html.theme--documenter-dark .table.is-narrow td,\n    html.theme--documenter-dark .table.is-narrow th {\n      padding: 0.25em 0.5em; }\n    html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even) {\n      background-color: #fafafa; }\n  html.theme--documenter-dark .table-container {\n    -webkit-overflow-scrolling: touch;\n    overflow: auto;\n    overflow-y: hidden;\n    max-width: 100%; }\n  html.theme--documenter-dark .tags {\n    align-items: center;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: flex-start; }\n    html.theme--documenter-dark .tags .tag, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags .content kbd, html.theme--documenter-dark .content .tags kbd {\n      margin-bottom: 0.5rem; }\n      html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child) {\n        margin-right: 0.5rem; }\n    html.theme--documenter-dark .tags:last-child {\n      margin-bottom: -0.5rem; }\n    html.theme--documenter-dark .tags:not(:last-child) {\n      margin-bottom: 1rem; }\n    html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large) {\n      font-size: 1rem; }\n    html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium) {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .tags.is-centered {\n      justify-content: center; }\n      html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd {\n        margin-right: 0.25rem;\n        margin-left: 0.25rem; }\n    html.theme--documenter-dark .tags.is-right {\n      justify-content: flex-end; }\n      html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child) {\n        margin-left: 0.5rem; }\n      html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child) {\n        margin-right: 0; }\n    html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd {\n      margin-right: 0; }\n      html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child) {\n        margin-left: 0;\n        border-bottom-left-radius: 0;\n        border-top-left-radius: 0; }\n      html.theme--documenter-dark .tags.has-addons .tag:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child) {\n        border-bottom-right-radius: 0;\n        border-top-right-radius: 0; }\n  html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body) {\n    align-items: center;\n    background-color: whitesmoke;\n    border-radius: 4px;\n    color: #ececec;\n    display: inline-flex;\n    font-size: 0.75rem;\n    height: 2em;\n    justify-content: center;\n    line-height: 1.5;\n    padding-left: 0.75em;\n    padding-right: 0.75em;\n    white-space: nowrap; }\n    html.theme--documenter-dark .tag:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete, html.theme--documenter-dark .content kbd:not(body) .delete {\n      margin-left: 0.25rem;\n      margin-right: -0.375rem; }\n    html.theme--documenter-dark .tag:not(body).is-white, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-white, html.theme--documenter-dark .content kbd:not(body).is-white {\n      background-color: white;\n      color: #0a0a0a; }\n    html.theme--documenter-dark .tag:not(body).is-black, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-black, html.theme--documenter-dark .content kbd:not(body).is-black {\n      background-color: #0a0a0a;\n      color: white; }\n    html.theme--documenter-dark .tag:not(body).is-light, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-light, html.theme--documenter-dark .content kbd:not(body).is-light {\n      background-color: whitesmoke;\n      color: #363636; }\n    html.theme--documenter-dark .tag:not(body).is-dark, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-dark, html.theme--documenter-dark .content kbd:not(body) {\n      background-color: #363636;\n      color: whitesmoke; }\n    html.theme--documenter-dark .tag:not(body).is-primary, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body), html.theme--documenter-dark .content kbd:not(body).is-primary {\n      background-color: #4eb5de;\n      color: #fff; }\n    html.theme--documenter-dark .tag:not(body).is-link, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-link, html.theme--documenter-dark .content kbd:not(body).is-link {\n      background-color: #e37733;\n      color: #fff; }\n    html.theme--documenter-dark .tag:not(body).is-info, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-info, html.theme--documenter-dark .content kbd:not(body).is-info {\n      background-color: #209cee;\n      color: #fff; }\n    html.theme--documenter-dark .tag:not(body).is-success, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-success, html.theme--documenter-dark .content kbd:not(body).is-success {\n      background-color: #22c35b;\n      color: #fff; }\n    html.theme--documenter-dark .tag:not(body).is-warning, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-warning, html.theme--documenter-dark .content kbd:not(body).is-warning {\n      background-color: #ffdd57;\n      color: rgba(0, 0, 0, 0.7); }\n    html.theme--documenter-dark .tag:not(body).is-danger, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-danger, html.theme--documenter-dark .content kbd:not(body).is-danger {\n      background-color: #da0b00;\n      color: #fff; }\n    html.theme--documenter-dark .tag:not(body).is-normal, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-normal, html.theme--documenter-dark .content kbd:not(body).is-normal {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .tag:not(body).is-medium, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-medium, html.theme--documenter-dark .content kbd:not(body).is-medium {\n      font-size: 1rem; }\n    html.theme--documenter-dark .tag:not(body).is-large, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-large, html.theme--documenter-dark .content kbd:not(body).is-large {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child) {\n      margin-left: -0.375em;\n      margin-right: 0.1875em; }\n    html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child) {\n      margin-left: 0.1875em;\n      margin-right: -0.375em; }\n    html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child {\n      margin-left: -0.375em;\n      margin-right: -0.375em; }\n    html.theme--documenter-dark .tag:not(body).is-delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete, html.theme--documenter-dark .content kbd:not(body).is-delete {\n      margin-left: 1px;\n      padding: 0;\n      position: relative;\n      width: 2em; }\n      html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before, html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after {\n        background-color: currentColor;\n        content: \"\";\n        display: block;\n        left: 50%;\n        position: absolute;\n        top: 50%;\n        transform: translateX(-50%) translateY(-50%) rotate(45deg);\n        transform-origin: center center; }\n      html.theme--documenter-dark .tag:not(body).is-delete::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::before, html.theme--documenter-dark .content kbd:not(body).is-delete::before {\n        height: 1px;\n        width: 50%; }\n      html.theme--documenter-dark .tag:not(body).is-delete::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete::after, html.theme--documenter-dark .content kbd:not(body).is-delete::after {\n        height: 50%;\n        width: 1px; }\n      html.theme--documenter-dark .tag:not(body).is-delete:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:hover, html.theme--documenter-dark .content kbd:not(body).is-delete:hover, html.theme--documenter-dark .tag:not(body).is-delete:focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:focus, html.theme--documenter-dark .content kbd:not(body).is-delete:focus {\n        background-color: #e8e8e8; }\n      html.theme--documenter-dark .tag:not(body).is-delete:active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-delete:active, html.theme--documenter-dark .content kbd:not(body).is-delete:active {\n        background-color: #dbdbdb; }\n    html.theme--documenter-dark .tag:not(body).is-rounded, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body).is-rounded, html.theme--documenter-dark .content kbd:not(body).is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tag:not(body) {\n      border-radius: 290486px; }\n  html.theme--documenter-dark a.tag:hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:hover {\n    text-decoration: underline; }\n  html.theme--documenter-dark .title,\n  html.theme--documenter-dark .subtitle {\n    word-break: break-word; }\n    html.theme--documenter-dark .title em,\n    html.theme--documenter-dark .title span,\n    html.theme--documenter-dark .subtitle em,\n    html.theme--documenter-dark .subtitle span {\n      font-weight: inherit; }\n    html.theme--documenter-dark .title sub,\n    html.theme--documenter-dark .subtitle sub {\n      font-size: 0.75em; }\n    html.theme--documenter-dark .title sup,\n    html.theme--documenter-dark .subtitle sup {\n      font-size: 0.75em; }\n    html.theme--documenter-dark .title .tag, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, html.theme--documenter-dark .title .content kbd, html.theme--documenter-dark .content .title kbd,\n    html.theme--documenter-dark .subtitle .tag,\n    html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink,\n    html.theme--documenter-dark .subtitle .content kbd,\n    html.theme--documenter-dark .content .subtitle kbd {\n      vertical-align: middle; }\n  html.theme--documenter-dark .title {\n    color: #363636;\n    font-size: 2rem;\n    font-weight: 600;\n    line-height: 1.125; }\n    html.theme--documenter-dark .title strong {\n      color: inherit;\n      font-weight: inherit; }\n    html.theme--documenter-dark .title + .highlight {\n      margin-top: -0.75rem; }\n    html.theme--documenter-dark .title:not(.is-spaced) + .subtitle {\n      margin-top: -1.25rem; }\n    html.theme--documenter-dark .title.is-1 {\n      font-size: 3rem; }\n    html.theme--documenter-dark .title.is-2 {\n      font-size: 2.5rem; }\n    html.theme--documenter-dark .title.is-3 {\n      font-size: 2rem; }\n    html.theme--documenter-dark .title.is-4 {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .title.is-5 {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .title.is-6 {\n      font-size: 1rem; }\n    html.theme--documenter-dark .title.is-7 {\n      font-size: 0.75rem; }\n  html.theme--documenter-dark .subtitle {\n    color: #4a4a4a;\n    font-size: 1.25rem;\n    font-weight: 400;\n    line-height: 1.25; }\n    html.theme--documenter-dark .subtitle strong {\n      color: #363636;\n      font-weight: 600; }\n    html.theme--documenter-dark .subtitle:not(.is-spaced) + .title {\n      margin-top: -1.25rem; }\n    html.theme--documenter-dark .subtitle.is-1 {\n      font-size: 3rem; }\n    html.theme--documenter-dark .subtitle.is-2 {\n      font-size: 2.5rem; }\n    html.theme--documenter-dark .subtitle.is-3 {\n      font-size: 2rem; }\n    html.theme--documenter-dark .subtitle.is-4 {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .subtitle.is-5 {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .subtitle.is-6 {\n      font-size: 1rem; }\n    html.theme--documenter-dark .subtitle.is-7 {\n      font-size: 0.75rem; }\n  html.theme--documenter-dark .heading {\n    display: block;\n    font-size: 11px;\n    letter-spacing: 1px;\n    margin-bottom: 5px;\n    text-transform: uppercase; }\n  html.theme--documenter-dark .highlight {\n    font-weight: 400;\n    max-width: 100%;\n    overflow: hidden;\n    padding: 0; }\n    html.theme--documenter-dark .highlight pre {\n      overflow: auto;\n      max-width: 100%; }\n  html.theme--documenter-dark .number {\n    align-items: center;\n    background-color: whitesmoke;\n    border-radius: 290486px;\n    display: inline-flex;\n    font-size: 1.25rem;\n    height: 2em;\n    justify-content: center;\n    margin-right: 1.5rem;\n    min-width: 2.5em;\n    padding: 0.25rem 0.5rem;\n    text-align: center;\n    vertical-align: top; }\n  html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea, html.theme--documenter-dark .select select {\n    background-color: white;\n    border-color: #dbdbdb;\n    border-radius: 4px;\n    color: #363636; }\n    html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .select select::-moz-placeholder {\n      color: rgba(54, 54, 54, 0.3); }\n    html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .select select::-webkit-input-placeholder {\n      color: rgba(54, 54, 54, 0.3); }\n    html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .select select:-moz-placeholder {\n      color: rgba(54, 54, 54, 0.3); }\n    html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .select select:-ms-input-placeholder {\n      color: rgba(54, 54, 54, 0.3); }\n    html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .select select.is-hovered {\n      border-color: #ac5118; }\n    html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .select select.is-active {\n      border-color: #f0f0f0;\n      box-shadow: 0 0 0 0.125em rgba(227, 119, 51, 0.25); }\n    html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .select select[disabled],\n    fieldset[disabled] html.theme--documenter-dark .input,\n    fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input,\n    fieldset[disabled] html.theme--documenter-dark .textarea,\n    fieldset[disabled] html.theme--documenter-dark .select select {\n      background-color: whitesmoke;\n      border-color: whitesmoke;\n      box-shadow: none;\n      color: #7a7a7a; }\n      html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .select select[disabled]::-moz-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,\n      fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder {\n        color: rgba(122, 122, 122, 0.3); }\n      html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,\n      fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder {\n        color: rgba(122, 122, 122, 0.3); }\n      html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .select select[disabled]:-moz-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,\n      fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder {\n        color: rgba(122, 122, 122, 0.3); }\n      html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,\n      fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,\n      fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder {\n        color: rgba(122, 122, 122, 0.3); }\n  html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .textarea {\n    box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1);\n    max-width: 100%;\n    width: 100%; }\n    html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly], html.theme--documenter-dark .textarea[readonly] {\n      box-shadow: none; }\n    html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white, html.theme--documenter-dark .is-white.textarea {\n      border-color: white; }\n      html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-focused, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white.is-active, html.theme--documenter-dark .is-white.is-active.textarea {\n        box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); }\n    html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black, html.theme--documenter-dark .is-black.textarea {\n      border-color: #0a0a0a; }\n      html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-focused, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black.is-active, html.theme--documenter-dark .is-black.is-active.textarea {\n        box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); }\n    html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light, html.theme--documenter-dark .is-light.textarea {\n      border-color: whitesmoke; }\n      html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-focused, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light.is-active, html.theme--documenter-dark .is-light.is-active.textarea {\n        box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); }\n    html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark .content kbd.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea {\n      border-color: #363636; }\n      html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-focused, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark.is-active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea {\n        box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); }\n    html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink {\n      border-color: #4eb5de; }\n      html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-focused, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary.is-active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink {\n        box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); }\n    html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link, html.theme--documenter-dark .is-link.textarea {\n      border-color: #e37733; }\n      html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-focused, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link.is-active, html.theme--documenter-dark .is-link.is-active.textarea {\n        box-shadow: 0 0 0 0.125em rgba(227, 119, 51, 0.25); }\n    html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info, html.theme--documenter-dark .is-info.textarea {\n      border-color: #209cee; }\n      html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-focused, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info.is-active, html.theme--documenter-dark .is-info.is-active.textarea {\n        box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); }\n    html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success, html.theme--documenter-dark .is-success.textarea {\n      border-color: #22c35b; }\n      html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-focused, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success.is-active, html.theme--documenter-dark .is-success.is-active.textarea {\n        box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); }\n    html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning, html.theme--documenter-dark .is-warning.textarea {\n      border-color: #ffdd57; }\n      html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-focused, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning.is-active, html.theme--documenter-dark .is-warning.is-active.textarea {\n        box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); }\n    html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger, html.theme--documenter-dark .is-danger.textarea {\n      border-color: #da0b00; }\n      html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-focused, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger.is-active, html.theme--documenter-dark .is-danger.is-active.textarea {\n        box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); }\n    html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .is-small.textarea {\n      border-radius: 2px;\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium, html.theme--documenter-dark .is-medium.textarea {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large, html.theme--documenter-dark .is-large.textarea {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth, html.theme--documenter-dark .is-fullwidth.textarea {\n      display: block;\n      width: 100%; }\n    html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline, html.theme--documenter-dark .is-inline.textarea {\n      display: inline;\n      width: auto; }\n  html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input {\n    border-radius: 290486px;\n    padding-left: 1em;\n    padding-right: 1em; }\n  html.theme--documenter-dark .input.is-static, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-static {\n    background-color: transparent;\n    border-color: transparent;\n    box-shadow: none;\n    padding-left: 0;\n    padding-right: 0; }\n  html.theme--documenter-dark .textarea {\n    display: block;\n    max-width: 100%;\n    min-width: 100%;\n    padding: 0.625em;\n    resize: vertical; }\n    html.theme--documenter-dark .textarea:not([rows]) {\n      max-height: 600px;\n      min-height: 120px; }\n    html.theme--documenter-dark .textarea[rows] {\n      height: initial; }\n    html.theme--documenter-dark .textarea.has-fixed-size {\n      resize: none; }\n  html.theme--documenter-dark .checkbox, html.theme--documenter-dark .radio {\n    cursor: pointer;\n    display: inline-block;\n    line-height: 1.25;\n    position: relative; }\n    html.theme--documenter-dark .checkbox input, html.theme--documenter-dark .radio input {\n      cursor: pointer; }\n    html.theme--documenter-dark .checkbox:hover, html.theme--documenter-dark .radio:hover {\n      color: #363636; }\n    html.theme--documenter-dark .checkbox[disabled], html.theme--documenter-dark .radio[disabled],\n    fieldset[disabled] html.theme--documenter-dark .checkbox,\n    fieldset[disabled] html.theme--documenter-dark .radio {\n      color: #7a7a7a;\n      cursor: not-allowed; }\n  html.theme--documenter-dark .radio + .radio {\n    margin-left: 0.5em; }\n  html.theme--documenter-dark .select {\n    display: inline-block;\n    max-width: 100%;\n    position: relative;\n    vertical-align: top; }\n    html.theme--documenter-dark .select:not(.is-multiple) {\n      height: 2.25em; }\n    html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after {\n      border-color: #e37733;\n      right: 1.125em;\n      z-index: 4; }\n    html.theme--documenter-dark .select.is-rounded select, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select select {\n      border-radius: 290486px;\n      padding-left: 1em; }\n    html.theme--documenter-dark .select select {\n      cursor: pointer;\n      display: block;\n      font-size: 1em;\n      max-width: 100%;\n      outline: none; }\n      html.theme--documenter-dark .select select::-ms-expand {\n        display: none; }\n      html.theme--documenter-dark .select select[disabled]:hover,\n      fieldset[disabled] html.theme--documenter-dark .select select:hover {\n        border-color: whitesmoke; }\n      html.theme--documenter-dark .select select:not([multiple]) {\n        padding-right: 2.5em; }\n      html.theme--documenter-dark .select select[multiple] {\n        height: auto;\n        padding: 0; }\n        html.theme--documenter-dark .select select[multiple] option {\n          padding: 0.5em 1em; }\n    html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after {\n      border-color: #363636; }\n    html.theme--documenter-dark .select.is-white:not(:hover)::after {\n      border-color: white; }\n    html.theme--documenter-dark .select.is-white select {\n      border-color: white; }\n      html.theme--documenter-dark .select.is-white select:hover, html.theme--documenter-dark .select.is-white select.is-hovered {\n        border-color: #f2f2f2; }\n      html.theme--documenter-dark .select.is-white select:focus, html.theme--documenter-dark .select.is-white select.is-focused, html.theme--documenter-dark .select.is-white select:active, html.theme--documenter-dark .select.is-white select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); }\n    html.theme--documenter-dark .select.is-black:not(:hover)::after {\n      border-color: #0a0a0a; }\n    html.theme--documenter-dark .select.is-black select {\n      border-color: #0a0a0a; }\n      html.theme--documenter-dark .select.is-black select:hover, html.theme--documenter-dark .select.is-black select.is-hovered {\n        border-color: black; }\n      html.theme--documenter-dark .select.is-black select:focus, html.theme--documenter-dark .select.is-black select.is-focused, html.theme--documenter-dark .select.is-black select:active, html.theme--documenter-dark .select.is-black select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); }\n    html.theme--documenter-dark .select.is-light:not(:hover)::after {\n      border-color: whitesmoke; }\n    html.theme--documenter-dark .select.is-light select {\n      border-color: whitesmoke; }\n      html.theme--documenter-dark .select.is-light select:hover, html.theme--documenter-dark .select.is-light select.is-hovered {\n        border-color: #e8e8e8; }\n      html.theme--documenter-dark .select.is-light select:focus, html.theme--documenter-dark .select.is-light select.is-focused, html.theme--documenter-dark .select.is-light select:active, html.theme--documenter-dark .select.is-light select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); }\n    html.theme--documenter-dark .select.is-dark:not(:hover)::after, html.theme--documenter-dark .content kbd.select:not(:hover)::after {\n      border-color: #363636; }\n    html.theme--documenter-dark .select.is-dark select, html.theme--documenter-dark .content kbd.select select {\n      border-color: #363636; }\n      html.theme--documenter-dark .select.is-dark select:hover, html.theme--documenter-dark .content kbd.select select:hover, html.theme--documenter-dark .select.is-dark select.is-hovered, html.theme--documenter-dark .content kbd.select select.is-hovered {\n        border-color: #292929; }\n      html.theme--documenter-dark .select.is-dark select:focus, html.theme--documenter-dark .content kbd.select select:focus, html.theme--documenter-dark .select.is-dark select.is-focused, html.theme--documenter-dark .content kbd.select select.is-focused, html.theme--documenter-dark .select.is-dark select:active, html.theme--documenter-dark .content kbd.select select:active, html.theme--documenter-dark .select.is-dark select.is-active, html.theme--documenter-dark .content kbd.select select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); }\n    html.theme--documenter-dark .select.is-primary:not(:hover)::after, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink:not(:hover)::after {\n      border-color: #4eb5de; }\n    html.theme--documenter-dark .select.is-primary select, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select {\n      border-color: #4eb5de; }\n      html.theme--documenter-dark .select.is-primary select:hover, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:hover, html.theme--documenter-dark .select.is-primary select.is-hovered, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-hovered {\n        border-color: #39acda; }\n      html.theme--documenter-dark .select.is-primary select:focus, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:focus, html.theme--documenter-dark .select.is-primary select.is-focused, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-focused, html.theme--documenter-dark .select.is-primary select:active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select:active, html.theme--documenter-dark .select.is-primary select.is-active, html.theme--documenter-dark .docstring > section > a.select.docs-sourcelink select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); }\n    html.theme--documenter-dark .select.is-link:not(:hover)::after {\n      border-color: #e37733; }\n    html.theme--documenter-dark .select.is-link select {\n      border-color: #e37733; }\n      html.theme--documenter-dark .select.is-link select:hover, html.theme--documenter-dark .select.is-link select.is-hovered {\n        border-color: #dd681f; }\n      html.theme--documenter-dark .select.is-link select:focus, html.theme--documenter-dark .select.is-link select.is-focused, html.theme--documenter-dark .select.is-link select:active, html.theme--documenter-dark .select.is-link select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(227, 119, 51, 0.25); }\n    html.theme--documenter-dark .select.is-info:not(:hover)::after {\n      border-color: #209cee; }\n    html.theme--documenter-dark .select.is-info select {\n      border-color: #209cee; }\n      html.theme--documenter-dark .select.is-info select:hover, html.theme--documenter-dark .select.is-info select.is-hovered {\n        border-color: #118fe4; }\n      html.theme--documenter-dark .select.is-info select:focus, html.theme--documenter-dark .select.is-info select.is-focused, html.theme--documenter-dark .select.is-info select:active, html.theme--documenter-dark .select.is-info select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); }\n    html.theme--documenter-dark .select.is-success:not(:hover)::after {\n      border-color: #22c35b; }\n    html.theme--documenter-dark .select.is-success select {\n      border-color: #22c35b; }\n      html.theme--documenter-dark .select.is-success select:hover, html.theme--documenter-dark .select.is-success select.is-hovered {\n        border-color: #1ead51; }\n      html.theme--documenter-dark .select.is-success select:focus, html.theme--documenter-dark .select.is-success select.is-focused, html.theme--documenter-dark .select.is-success select:active, html.theme--documenter-dark .select.is-success select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); }\n    html.theme--documenter-dark .select.is-warning:not(:hover)::after {\n      border-color: #ffdd57; }\n    html.theme--documenter-dark .select.is-warning select {\n      border-color: #ffdd57; }\n      html.theme--documenter-dark .select.is-warning select:hover, html.theme--documenter-dark .select.is-warning select.is-hovered {\n        border-color: #ffd83d; }\n      html.theme--documenter-dark .select.is-warning select:focus, html.theme--documenter-dark .select.is-warning select.is-focused, html.theme--documenter-dark .select.is-warning select:active, html.theme--documenter-dark .select.is-warning select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); }\n    html.theme--documenter-dark .select.is-danger:not(:hover)::after {\n      border-color: #da0b00; }\n    html.theme--documenter-dark .select.is-danger select {\n      border-color: #da0b00; }\n      html.theme--documenter-dark .select.is-danger select:hover, html.theme--documenter-dark .select.is-danger select.is-hovered {\n        border-color: #c10a00; }\n      html.theme--documenter-dark .select.is-danger select:focus, html.theme--documenter-dark .select.is-danger select.is-focused, html.theme--documenter-dark .select.is-danger select:active, html.theme--documenter-dark .select.is-danger select.is-active {\n        box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); }\n    html.theme--documenter-dark .select.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select {\n      border-radius: 2px;\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .select.is-medium {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .select.is-large {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .select.is-disabled::after {\n      border-color: #7a7a7a; }\n    html.theme--documenter-dark .select.is-fullwidth {\n      width: 100%; }\n      html.theme--documenter-dark .select.is-fullwidth select {\n        width: 100%; }\n    html.theme--documenter-dark .select.is-loading::after {\n      margin-top: 0;\n      position: absolute;\n      right: 0.625em;\n      top: 0.625em;\n      transform: none; }\n    html.theme--documenter-dark .select.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.select.is-loading:after {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .select.is-loading.is-medium:after {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .select.is-loading.is-large:after {\n      font-size: 1.5rem; }\n  html.theme--documenter-dark .file {\n    align-items: stretch;\n    display: flex;\n    justify-content: flex-start;\n    position: relative; }\n    html.theme--documenter-dark .file.is-white .file-cta {\n      background-color: white;\n      border-color: transparent;\n      color: #0a0a0a; }\n    html.theme--documenter-dark .file.is-white:hover .file-cta, html.theme--documenter-dark .file.is-white.is-hovered .file-cta {\n      background-color: #f9f9f9;\n      border-color: transparent;\n      color: #0a0a0a; }\n    html.theme--documenter-dark .file.is-white:focus .file-cta, html.theme--documenter-dark .file.is-white.is-focused .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25);\n      color: #0a0a0a; }\n    html.theme--documenter-dark .file.is-white:active .file-cta, html.theme--documenter-dark .file.is-white.is-active .file-cta {\n      background-color: #f2f2f2;\n      border-color: transparent;\n      color: #0a0a0a; }\n    html.theme--documenter-dark .file.is-black .file-cta {\n      background-color: #0a0a0a;\n      border-color: transparent;\n      color: white; }\n    html.theme--documenter-dark .file.is-black:hover .file-cta, html.theme--documenter-dark .file.is-black.is-hovered .file-cta {\n      background-color: #040404;\n      border-color: transparent;\n      color: white; }\n    html.theme--documenter-dark .file.is-black:focus .file-cta, html.theme--documenter-dark .file.is-black.is-focused .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25);\n      color: white; }\n    html.theme--documenter-dark .file.is-black:active .file-cta, html.theme--documenter-dark .file.is-black.is-active .file-cta {\n      background-color: black;\n      border-color: transparent;\n      color: white; }\n    html.theme--documenter-dark .file.is-light .file-cta {\n      background-color: whitesmoke;\n      border-color: transparent;\n      color: #363636; }\n    html.theme--documenter-dark .file.is-light:hover .file-cta, html.theme--documenter-dark .file.is-light.is-hovered .file-cta {\n      background-color: #eeeeee;\n      border-color: transparent;\n      color: #363636; }\n    html.theme--documenter-dark .file.is-light:focus .file-cta, html.theme--documenter-dark .file.is-light.is-focused .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25);\n      color: #363636; }\n    html.theme--documenter-dark .file.is-light:active .file-cta, html.theme--documenter-dark .file.is-light.is-active .file-cta {\n      background-color: #e8e8e8;\n      border-color: transparent;\n      color: #363636; }\n    html.theme--documenter-dark .file.is-dark .file-cta, html.theme--documenter-dark .content kbd.file .file-cta {\n      background-color: #363636;\n      border-color: transparent;\n      color: whitesmoke; }\n    html.theme--documenter-dark .file.is-dark:hover .file-cta, html.theme--documenter-dark .content kbd.file:hover .file-cta, html.theme--documenter-dark .file.is-dark.is-hovered .file-cta, html.theme--documenter-dark .content kbd.file.is-hovered .file-cta {\n      background-color: #2f2f2f;\n      border-color: transparent;\n      color: whitesmoke; }\n    html.theme--documenter-dark .file.is-dark:focus .file-cta, html.theme--documenter-dark .content kbd.file:focus .file-cta, html.theme--documenter-dark .file.is-dark.is-focused .file-cta, html.theme--documenter-dark .content kbd.file.is-focused .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25);\n      color: whitesmoke; }\n    html.theme--documenter-dark .file.is-dark:active .file-cta, html.theme--documenter-dark .content kbd.file:active .file-cta, html.theme--documenter-dark .file.is-dark.is-active .file-cta, html.theme--documenter-dark .content kbd.file.is-active .file-cta {\n      background-color: #292929;\n      border-color: transparent;\n      color: whitesmoke; }\n    html.theme--documenter-dark .file.is-primary .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink .file-cta {\n      background-color: #4eb5de;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-primary:hover .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:hover .file-cta, html.theme--documenter-dark .file.is-primary.is-hovered .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-hovered.docs-sourcelink .file-cta {\n      background-color: #43b1dc;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-primary:focus .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:focus .file-cta, html.theme--documenter-dark .file.is-primary.is-focused .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-focused.docs-sourcelink .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(78, 181, 222, 0.25);\n      color: #fff; }\n    html.theme--documenter-dark .file.is-primary:active .file-cta, html.theme--documenter-dark .docstring > section > a.file.docs-sourcelink:active .file-cta, html.theme--documenter-dark .file.is-primary.is-active .file-cta, html.theme--documenter-dark .docstring > section > a.file.is-active.docs-sourcelink .file-cta {\n      background-color: #39acda;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-link .file-cta {\n      background-color: #e37733;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-link:hover .file-cta, html.theme--documenter-dark .file.is-link.is-hovered .file-cta {\n      background-color: #e16f28;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-link:focus .file-cta, html.theme--documenter-dark .file.is-link.is-focused .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(227, 119, 51, 0.25);\n      color: #fff; }\n    html.theme--documenter-dark .file.is-link:active .file-cta, html.theme--documenter-dark .file.is-link.is-active .file-cta {\n      background-color: #dd681f;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-info .file-cta {\n      background-color: #209cee;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-info:hover .file-cta, html.theme--documenter-dark .file.is-info.is-hovered .file-cta {\n      background-color: #1496ed;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-info:focus .file-cta, html.theme--documenter-dark .file.is-info.is-focused .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25);\n      color: #fff; }\n    html.theme--documenter-dark .file.is-info:active .file-cta, html.theme--documenter-dark .file.is-info.is-active .file-cta {\n      background-color: #118fe4;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-success .file-cta {\n      background-color: #22c35b;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-success:hover .file-cta, html.theme--documenter-dark .file.is-success.is-hovered .file-cta {\n      background-color: #20b856;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-success:focus .file-cta, html.theme--documenter-dark .file.is-success.is-focused .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25);\n      color: #fff; }\n    html.theme--documenter-dark .file.is-success:active .file-cta, html.theme--documenter-dark .file.is-success.is-active .file-cta {\n      background-color: #1ead51;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-warning .file-cta {\n      background-color: #ffdd57;\n      border-color: transparent;\n      color: rgba(0, 0, 0, 0.7); }\n    html.theme--documenter-dark .file.is-warning:hover .file-cta, html.theme--documenter-dark .file.is-warning.is-hovered .file-cta {\n      background-color: #ffdb4a;\n      border-color: transparent;\n      color: rgba(0, 0, 0, 0.7); }\n    html.theme--documenter-dark .file.is-warning:focus .file-cta, html.theme--documenter-dark .file.is-warning.is-focused .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25);\n      color: rgba(0, 0, 0, 0.7); }\n    html.theme--documenter-dark .file.is-warning:active .file-cta, html.theme--documenter-dark .file.is-warning.is-active .file-cta {\n      background-color: #ffd83d;\n      border-color: transparent;\n      color: rgba(0, 0, 0, 0.7); }\n    html.theme--documenter-dark .file.is-danger .file-cta {\n      background-color: #da0b00;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-danger:hover .file-cta, html.theme--documenter-dark .file.is-danger.is-hovered .file-cta {\n      background-color: #cd0a00;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-danger:focus .file-cta, html.theme--documenter-dark .file.is-danger.is-focused .file-cta {\n      border-color: transparent;\n      box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25);\n      color: #fff; }\n    html.theme--documenter-dark .file.is-danger:active .file-cta, html.theme--documenter-dark .file.is-danger.is-active .file-cta {\n      background-color: #c10a00;\n      border-color: transparent;\n      color: #fff; }\n    html.theme--documenter-dark .file.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .file.is-medium {\n      font-size: 1.25rem; }\n      html.theme--documenter-dark .file.is-medium .file-icon .fa {\n        font-size: 21px; }\n    html.theme--documenter-dark .file.is-large {\n      font-size: 1.5rem; }\n      html.theme--documenter-dark .file.is-large .file-icon .fa {\n        font-size: 28px; }\n    html.theme--documenter-dark .file.has-name .file-cta {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0; }\n    html.theme--documenter-dark .file.has-name .file-name {\n      border-bottom-left-radius: 0;\n      border-top-left-radius: 0; }\n    html.theme--documenter-dark .file.has-name.is-empty .file-cta {\n      border-radius: 4px; }\n    html.theme--documenter-dark .file.has-name.is-empty .file-name {\n      display: none; }\n    html.theme--documenter-dark .file.is-boxed .file-label {\n      flex-direction: column; }\n    html.theme--documenter-dark .file.is-boxed .file-cta {\n      flex-direction: column;\n      height: auto;\n      padding: 1em 3em; }\n    html.theme--documenter-dark .file.is-boxed .file-name {\n      border-width: 0 1px 1px; }\n    html.theme--documenter-dark .file.is-boxed .file-icon {\n      height: 1.5em;\n      width: 1.5em; }\n      html.theme--documenter-dark .file.is-boxed .file-icon .fa {\n        font-size: 21px; }\n    html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.file.is-boxed .file-icon .fa {\n      font-size: 14px; }\n    html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa {\n      font-size: 28px; }\n    html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa {\n      font-size: 35px; }\n    html.theme--documenter-dark .file.is-boxed.has-name .file-cta {\n      border-radius: 4px 4px 0 0; }\n    html.theme--documenter-dark .file.is-boxed.has-name .file-name {\n      border-radius: 0 0 4px 4px;\n      border-width: 0 1px 1px; }\n    html.theme--documenter-dark .file.is-centered {\n      justify-content: center; }\n    html.theme--documenter-dark .file.is-fullwidth .file-label {\n      width: 100%; }\n    html.theme--documenter-dark .file.is-fullwidth .file-name {\n      flex-grow: 1;\n      max-width: none; }\n    html.theme--documenter-dark .file.is-right {\n      justify-content: flex-end; }\n      html.theme--documenter-dark .file.is-right .file-cta {\n        border-radius: 0 4px 4px 0; }\n      html.theme--documenter-dark .file.is-right .file-name {\n        border-radius: 4px 0 0 4px;\n        border-width: 1px 0 1px 1px;\n        order: -1; }\n  html.theme--documenter-dark .file-label {\n    align-items: stretch;\n    display: flex;\n    cursor: pointer;\n    justify-content: flex-start;\n    overflow: hidden;\n    position: relative; }\n    html.theme--documenter-dark .file-label:hover .file-cta {\n      background-color: #eeeeee;\n      color: #363636; }\n    html.theme--documenter-dark .file-label:hover .file-name {\n      border-color: #d5d5d5; }\n    html.theme--documenter-dark .file-label:active .file-cta {\n      background-color: #e8e8e8;\n      color: #363636; }\n    html.theme--documenter-dark .file-label:active .file-name {\n      border-color: #cfcfcf; }\n  html.theme--documenter-dark .file-input {\n    height: 100%;\n    left: 0;\n    opacity: 0;\n    outline: none;\n    position: absolute;\n    top: 0;\n    width: 100%; }\n  html.theme--documenter-dark .file-cta,\n  html.theme--documenter-dark .file-name {\n    border-color: #dbdbdb;\n    border-radius: 4px;\n    font-size: 1em;\n    padding-left: 1em;\n    padding-right: 1em;\n    white-space: nowrap; }\n  html.theme--documenter-dark .file-cta {\n    background-color: whitesmoke;\n    color: #4a4a4a; }\n  html.theme--documenter-dark .file-name {\n    border-color: #dbdbdb;\n    border-style: solid;\n    border-width: 1px 1px 1px 0;\n    display: block;\n    max-width: 16em;\n    overflow: hidden;\n    text-align: left;\n    text-overflow: ellipsis; }\n  html.theme--documenter-dark .file-icon {\n    align-items: center;\n    display: flex;\n    height: 1em;\n    justify-content: center;\n    margin-right: 0.5em;\n    width: 1em; }\n    html.theme--documenter-dark .file-icon .fa {\n      font-size: 14px; }\n  html.theme--documenter-dark .label {\n    color: #363636;\n    display: block;\n    font-size: 1rem;\n    font-weight: 700; }\n    html.theme--documenter-dark .label:not(:last-child) {\n      margin-bottom: 0.5em; }\n    html.theme--documenter-dark .label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.label {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .label.is-medium {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .label.is-large {\n      font-size: 1.5rem; }\n  html.theme--documenter-dark .help {\n    display: block;\n    font-size: 0.75rem;\n    margin-top: 0.25rem; }\n    html.theme--documenter-dark .help.is-white {\n      color: white; }\n    html.theme--documenter-dark .help.is-black {\n      color: #0a0a0a; }\n    html.theme--documenter-dark .help.is-light {\n      color: whitesmoke; }\n    html.theme--documenter-dark .help.is-dark, html.theme--documenter-dark .content kbd.help {\n      color: #363636; }\n    html.theme--documenter-dark .help.is-primary, html.theme--documenter-dark .docstring > section > a.help.docs-sourcelink {\n      color: #4eb5de; }\n    html.theme--documenter-dark .help.is-link {\n      color: #e37733; }\n    html.theme--documenter-dark .help.is-info {\n      color: #209cee; }\n    html.theme--documenter-dark .help.is-success {\n      color: #22c35b; }\n    html.theme--documenter-dark .help.is-warning {\n      color: #ffdd57; }\n    html.theme--documenter-dark .help.is-danger {\n      color: #da0b00; }\n  html.theme--documenter-dark .field:not(:last-child) {\n    margin-bottom: 0.75rem; }\n  html.theme--documenter-dark .field.has-addons {\n    display: flex;\n    justify-content: flex-start; }\n    html.theme--documenter-dark .field.has-addons .control:not(:last-child) {\n      margin-right: -1px; }\n    html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,\n    html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,\n    html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search > input,\n    html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search > input,\n    html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select {\n      border-radius: 0; }\n    html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,\n    html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,\n    html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input,\n    html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search > input,\n    html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select {\n      border-bottom-right-radius: 0;\n      border-top-right-radius: 0; }\n    html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,\n    html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,\n    html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search > input,\n    html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search > input,\n    html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select {\n      border-bottom-left-radius: 0;\n      border-top-left-radius: 0; }\n    html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-hovered,\n    html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,\n    html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover,\n    html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover,\n    html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-hovered,\n    html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered,\n    html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered,\n    html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,\n    html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-hovered {\n      z-index: 2; }\n    html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active,\n    html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,\n    html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus,\n    html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus,\n    html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused,\n    html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused,\n    html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused,\n    html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,\n    html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active,\n    html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active,\n    html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active,\n    html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active,\n    html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active,\n    html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,\n    html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused,\n    html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,\n    html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active {\n      z-index: 3; }\n      html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-focused:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]).is-active:hover,\n      html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,\n      html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover,\n      html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover,\n      html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-focused:hover,\n      html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover,\n      html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused:hover,\n      html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,\n      html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover,\n      html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover,\n      html.theme--documenter-dark .field.has-addons .control .input:not([disabled]).is-active:hover,\n      html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover,\n      html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active:hover,\n      html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,\n      html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused:hover,\n      html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,\n      html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active:hover {\n        z-index: 4; }\n    html.theme--documenter-dark .field.has-addons .control.is-expanded {\n      flex-grow: 1;\n      flex-shrink: 1; }\n    html.theme--documenter-dark .field.has-addons.has-addons-centered {\n      justify-content: center; }\n    html.theme--documenter-dark .field.has-addons.has-addons-right {\n      justify-content: flex-end; }\n    html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control {\n      flex-grow: 1;\n      flex-shrink: 0; }\n  html.theme--documenter-dark .field.is-grouped {\n    display: flex;\n    justify-content: flex-start; }\n    html.theme--documenter-dark .field.is-grouped > .control {\n      flex-shrink: 0; }\n      html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) {\n        margin-bottom: 0;\n        margin-right: 0.75rem; }\n      html.theme--documenter-dark .field.is-grouped > .control.is-expanded {\n        flex-grow: 1;\n        flex-shrink: 1; }\n    html.theme--documenter-dark .field.is-grouped.is-grouped-centered {\n      justify-content: center; }\n    html.theme--documenter-dark .field.is-grouped.is-grouped-right {\n      justify-content: flex-end; }\n    html.theme--documenter-dark .field.is-grouped.is-grouped-multiline {\n      flex-wrap: wrap; }\n      html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:last-child, html.theme--documenter-dark .field.is-grouped.is-grouped-multiline > .control:not(:last-child) {\n        margin-bottom: 0.75rem; }\n      html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child {\n        margin-bottom: -0.75rem; }\n      html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child) {\n        margin-bottom: 0; }\n  @media screen and (min-width: 769px), print {\n    html.theme--documenter-dark .field.is-horizontal {\n      display: flex; } }\n  html.theme--documenter-dark .field-label .label {\n    font-size: inherit; }\n  @media screen and (max-width: 768px) {\n    html.theme--documenter-dark .field-label {\n      margin-bottom: 0.5rem; } }\n  @media screen and (min-width: 769px), print {\n    html.theme--documenter-dark .field-label {\n      flex-basis: 0;\n      flex-grow: 1;\n      flex-shrink: 0;\n      margin-right: 1.5rem;\n      text-align: right; }\n      html.theme--documenter-dark .field-label.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.field-label {\n        font-size: 0.75rem;\n        padding-top: 0.375em; }\n      html.theme--documenter-dark .field-label.is-normal {\n        padding-top: 0.375em; }\n      html.theme--documenter-dark .field-label.is-medium {\n        font-size: 1.25rem;\n        padding-top: 0.375em; }\n      html.theme--documenter-dark .field-label.is-large {\n        font-size: 1.5rem;\n        padding-top: 0.375em; } }\n  html.theme--documenter-dark .field-body .field .field {\n    margin-bottom: 0; }\n  @media screen and (min-width: 769px), print {\n    html.theme--documenter-dark .field-body {\n      display: flex;\n      flex-basis: 0;\n      flex-grow: 5;\n      flex-shrink: 1; }\n      html.theme--documenter-dark .field-body .field {\n        margin-bottom: 0; }\n      html.theme--documenter-dark .field-body > .field {\n        flex-shrink: 1; }\n        html.theme--documenter-dark .field-body > .field:not(.is-narrow) {\n          flex-grow: 1; }\n        html.theme--documenter-dark .field-body > .field:not(:last-child) {\n          margin-right: 0.75rem; } }\n  html.theme--documenter-dark .control {\n    box-sizing: border-box;\n    clear: both;\n    font-size: 1rem;\n    position: relative;\n    text-align: left; }\n    html.theme--documenter-dark .control.has-icons-left .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input:focus ~ .icon,\n    html.theme--documenter-dark .control.has-icons-left .select:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right .input:focus ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input:focus ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input:focus ~ .icon,\n    html.theme--documenter-dark .control.has-icons-right .select:focus ~ .icon {\n      color: #7a7a7a; }\n    html.theme--documenter-dark .control.has-icons-left .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon,\n    html.theme--documenter-dark .control.has-icons-left .select.is-small ~ .icon,\n    html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.select ~ .icon,\n    html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.select ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon,\n    html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon,\n    html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.select ~ .icon,\n    html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.select ~ .icon {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .control.has-icons-left .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-medium ~ .icon,\n    html.theme--documenter-dark .control.has-icons-left .select.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-medium ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-medium ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-medium ~ .icon,\n    html.theme--documenter-dark .control.has-icons-right .select.is-medium ~ .icon {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .control.has-icons-left .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input.is-large ~ .icon,\n    html.theme--documenter-dark .control.has-icons-left .select.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right .input.is-large ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input.is-large ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input.is-large ~ .icon,\n    html.theme--documenter-dark .control.has-icons-right .select.is-large ~ .icon {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .control.has-icons-left .icon, html.theme--documenter-dark .control.has-icons-right .icon {\n      color: #dbdbdb;\n      height: 2.25em;\n      pointer-events: none;\n      position: absolute;\n      top: 0;\n      width: 2.25em;\n      z-index: 4; }\n    html.theme--documenter-dark .control.has-icons-left .input, html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search > input,\n    html.theme--documenter-dark .control.has-icons-left .select select {\n      padding-left: 2.25em; }\n    html.theme--documenter-dark .control.has-icons-left .icon.is-left {\n      left: 0; }\n    html.theme--documenter-dark .control.has-icons-right .input, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input,\n    html.theme--documenter-dark .control.has-icons-right .select select {\n      padding-right: 2.25em; }\n    html.theme--documenter-dark .control.has-icons-right .icon.is-right {\n      right: 0; }\n    html.theme--documenter-dark .control.is-loading::after {\n      position: absolute !important;\n      right: 0.625em;\n      top: 0.625em;\n      z-index: 4; }\n    html.theme--documenter-dark .control.is-loading.is-small:after, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.control.is-loading:after {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .control.is-loading.is-medium:after {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .control.is-loading.is-large:after {\n      font-size: 1.5rem; }\n  html.theme--documenter-dark .breadcrumb {\n    font-size: 1rem;\n    white-space: nowrap; }\n    html.theme--documenter-dark .breadcrumb a {\n      align-items: center;\n      color: #e37733;\n      display: flex;\n      justify-content: center;\n      padding: 0 0.75em; }\n      html.theme--documenter-dark .breadcrumb a:hover {\n        color: #f2be9e; }\n    html.theme--documenter-dark .breadcrumb li {\n      align-items: center;\n      display: flex; }\n      html.theme--documenter-dark .breadcrumb li:first-child a {\n        padding-left: 0; }\n      html.theme--documenter-dark .breadcrumb li.is-active a {\n        color: #97b3e2;\n        cursor: default;\n        pointer-events: none; }\n      html.theme--documenter-dark .breadcrumb li + li::before {\n        color: #b5b5b5;\n        content: \"\\0002f\"; }\n    html.theme--documenter-dark .breadcrumb ul,\n    html.theme--documenter-dark .breadcrumb ol {\n      align-items: flex-start;\n      display: flex;\n      flex-wrap: wrap;\n      justify-content: flex-start; }\n    html.theme--documenter-dark .breadcrumb .icon:first-child {\n      margin-right: 0.5em; }\n    html.theme--documenter-dark .breadcrumb .icon:last-child {\n      margin-left: 0.5em; }\n    html.theme--documenter-dark .breadcrumb.is-centered ol,\n    html.theme--documenter-dark .breadcrumb.is-centered ul {\n      justify-content: center; }\n    html.theme--documenter-dark .breadcrumb.is-right ol,\n    html.theme--documenter-dark .breadcrumb.is-right ul {\n      justify-content: flex-end; }\n    html.theme--documenter-dark .breadcrumb.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.breadcrumb {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .breadcrumb.is-medium {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .breadcrumb.is-large {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .breadcrumb.has-arrow-separator li + li::before {\n      content: \"\\02192\"; }\n    html.theme--documenter-dark .breadcrumb.has-bullet-separator li + li::before {\n      content: \"\\02022\"; }\n    html.theme--documenter-dark .breadcrumb.has-dot-separator li + li::before {\n      content: \"\\000b7\"; }\n    html.theme--documenter-dark .breadcrumb.has-succeeds-separator li + li::before {\n      content: \"\\0227B\"; }\n  html.theme--documenter-dark .card {\n    background-color: white;\n    box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n    color: #ececec;\n    max-width: 100%;\n    position: relative; }\n  html.theme--documenter-dark .card-header {\n    background-color: transparent;\n    align-items: stretch;\n    box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1);\n    display: flex; }\n  html.theme--documenter-dark .card-header-title {\n    align-items: center;\n    color: #97b3e2;\n    display: flex;\n    flex-grow: 1;\n    font-weight: 700;\n    padding: 0.75rem; }\n    html.theme--documenter-dark .card-header-title.is-centered {\n      justify-content: center; }\n  html.theme--documenter-dark .card-header-icon {\n    align-items: center;\n    cursor: pointer;\n    display: flex;\n    justify-content: center;\n    padding: 0.75rem; }\n  html.theme--documenter-dark .card-image {\n    display: block;\n    position: relative; }\n  html.theme--documenter-dark .card-content {\n    background-color: transparent;\n    padding: 1rem 1.25rem; }\n  html.theme--documenter-dark .card-footer {\n    background-color: transparent;\n    border-top: 1px solid #dbdbdb;\n    align-items: stretch;\n    display: flex; }\n  html.theme--documenter-dark .card-footer-item {\n    align-items: center;\n    display: flex;\n    flex-basis: 0;\n    flex-grow: 1;\n    flex-shrink: 0;\n    justify-content: center;\n    padding: 0.75rem; }\n    html.theme--documenter-dark .card-footer-item:not(:last-child) {\n      border-right: 1px solid #dbdbdb; }\n  html.theme--documenter-dark .card .media:not(:last-child) {\n    margin-bottom: 1.5rem; }\n  html.theme--documenter-dark .dropdown {\n    display: inline-flex;\n    position: relative;\n    vertical-align: top; }\n    html.theme--documenter-dark .dropdown.is-active .dropdown-menu, html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu {\n      display: block; }\n    html.theme--documenter-dark .dropdown.is-right .dropdown-menu {\n      left: auto;\n      right: 0; }\n    html.theme--documenter-dark .dropdown.is-up .dropdown-menu {\n      bottom: 100%;\n      padding-bottom: 4px;\n      padding-top: initial;\n      top: auto; }\n  html.theme--documenter-dark .dropdown-menu {\n    display: none;\n    left: 0;\n    min-width: 12rem;\n    padding-top: 4px;\n    position: absolute;\n    top: 100%;\n    z-index: 20; }\n  html.theme--documenter-dark .dropdown-content {\n    background-color: white;\n    border-radius: 4px;\n    box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n    padding-bottom: 0.5rem;\n    padding-top: 0.5rem; }\n  html.theme--documenter-dark .dropdown-item {\n    color: #4a4a4a;\n    display: block;\n    font-size: 0.875rem;\n    line-height: 1.5;\n    padding: 0.375rem 1rem;\n    position: relative; }\n  html.theme--documenter-dark a.dropdown-item,\n  html.theme--documenter-dark button.dropdown-item {\n    padding-right: 3rem;\n    text-align: left;\n    white-space: nowrap;\n    width: 100%; }\n    html.theme--documenter-dark a.dropdown-item:hover,\n    html.theme--documenter-dark button.dropdown-item:hover {\n      background-color: whitesmoke;\n      color: #0a0a0a; }\n    html.theme--documenter-dark a.dropdown-item.is-active,\n    html.theme--documenter-dark button.dropdown-item.is-active {\n      background-color: #e37733;\n      color: #fff; }\n  html.theme--documenter-dark .dropdown-divider {\n    background-color: #dbdbdb;\n    border: none;\n    display: block;\n    height: 1px;\n    margin: 0.5rem 0; }\n  html.theme--documenter-dark .level {\n    align-items: center;\n    justify-content: space-between; }\n    html.theme--documenter-dark .level code {\n      border-radius: 4px; }\n    html.theme--documenter-dark .level img {\n      display: inline-block;\n      vertical-align: top; }\n    html.theme--documenter-dark .level.is-mobile {\n      display: flex; }\n      html.theme--documenter-dark .level.is-mobile .level-left,\n      html.theme--documenter-dark .level.is-mobile .level-right {\n        display: flex; }\n      html.theme--documenter-dark .level.is-mobile .level-left + .level-right {\n        margin-top: 0; }\n      html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child) {\n        margin-bottom: 0;\n        margin-right: 0.75rem; }\n      html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow) {\n        flex-grow: 1; }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .level {\n        display: flex; }\n        html.theme--documenter-dark .level > .level-item:not(.is-narrow) {\n          flex-grow: 1; } }\n  html.theme--documenter-dark .level-item {\n    align-items: center;\n    display: flex;\n    flex-basis: auto;\n    flex-grow: 0;\n    flex-shrink: 0;\n    justify-content: center; }\n    html.theme--documenter-dark .level-item .title,\n    html.theme--documenter-dark .level-item .subtitle {\n      margin-bottom: 0; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .level-item:not(:last-child) {\n        margin-bottom: 0.75rem; } }\n  html.theme--documenter-dark .level-left,\n  html.theme--documenter-dark .level-right {\n    flex-basis: auto;\n    flex-grow: 0;\n    flex-shrink: 0; }\n    html.theme--documenter-dark .level-left .level-item.is-flexible,\n    html.theme--documenter-dark .level-right .level-item.is-flexible {\n      flex-grow: 1; }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .level-left .level-item:not(:last-child),\n      html.theme--documenter-dark .level-right .level-item:not(:last-child) {\n        margin-right: 0.75rem; } }\n  html.theme--documenter-dark .level-left {\n    align-items: center;\n    justify-content: flex-start; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .level-left + .level-right {\n        margin-top: 1.5rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .level-left {\n        display: flex; } }\n  html.theme--documenter-dark .level-right {\n    align-items: center;\n    justify-content: flex-end; }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .level-right {\n        display: flex; } }\n  html.theme--documenter-dark .list {\n    background-color: white;\n    border-radius: 4px;\n    box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); }\n  html.theme--documenter-dark .list-item {\n    display: block;\n    padding: 0.5em 1em; }\n    html.theme--documenter-dark .list-item:not(a) {\n      color: #ececec; }\n    html.theme--documenter-dark .list-item:first-child {\n      border-top-left-radius: 4px;\n      border-top-right-radius: 4px; }\n    html.theme--documenter-dark .list-item:last-child {\n      border-bottom-left-radius: 4px;\n      border-bottom-right-radius: 4px; }\n    html.theme--documenter-dark .list-item:not(:last-child) {\n      border-bottom: 1px solid #dbdbdb; }\n    html.theme--documenter-dark .list-item.is-active {\n      background-color: #e37733;\n      color: #fff; }\n  html.theme--documenter-dark a.list-item {\n    background-color: whitesmoke;\n    cursor: pointer; }\n  html.theme--documenter-dark .media {\n    align-items: flex-start;\n    display: flex;\n    text-align: left; }\n    html.theme--documenter-dark .media .content:not(:last-child) {\n      margin-bottom: 0.75rem; }\n    html.theme--documenter-dark .media .media {\n      border-top: 1px solid rgba(219, 219, 219, 0.5);\n      display: flex;\n      padding-top: 0.75rem; }\n      html.theme--documenter-dark .media .media .content:not(:last-child),\n      html.theme--documenter-dark .media .media .control:not(:last-child) {\n        margin-bottom: 0.5rem; }\n      html.theme--documenter-dark .media .media .media {\n        padding-top: 0.5rem; }\n        html.theme--documenter-dark .media .media .media + .media {\n          margin-top: 0.5rem; }\n    html.theme--documenter-dark .media + .media {\n      border-top: 1px solid rgba(219, 219, 219, 0.5);\n      margin-top: 1rem;\n      padding-top: 1rem; }\n    html.theme--documenter-dark .media.is-large + .media {\n      margin-top: 1.5rem;\n      padding-top: 1.5rem; }\n  html.theme--documenter-dark .media-left,\n  html.theme--documenter-dark .media-right {\n    flex-basis: auto;\n    flex-grow: 0;\n    flex-shrink: 0; }\n  html.theme--documenter-dark .media-left {\n    margin-right: 1rem; }\n  html.theme--documenter-dark .media-right {\n    margin-left: 1rem; }\n  html.theme--documenter-dark .media-content {\n    flex-basis: auto;\n    flex-grow: 1;\n    flex-shrink: 1;\n    text-align: left; }\n  @media screen and (max-width: 768px) {\n    html.theme--documenter-dark .media-content {\n      overflow-x: auto; } }\n  html.theme--documenter-dark .menu {\n    font-size: 1rem; }\n    html.theme--documenter-dark .menu.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.menu {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .menu.is-medium {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .menu.is-large {\n      font-size: 1.5rem; }\n  html.theme--documenter-dark .menu-list {\n    line-height: 1.25; }\n    html.theme--documenter-dark .menu-list a {\n      border-radius: 2px;\n      color: #ececec;\n      display: block;\n      padding: 0.5em 0.75em; }\n      html.theme--documenter-dark .menu-list a:hover {\n        background-color: whitesmoke;\n        color: #97b3e2; }\n      html.theme--documenter-dark .menu-list a.is-active {\n        background-color: #e37733;\n        color: #fff; }\n    html.theme--documenter-dark .menu-list li ul {\n      border-left: 1px solid #dbdbdb;\n      margin: 0.75em;\n      padding-left: 0.75em; }\n  html.theme--documenter-dark .menu-label {\n    color: #7a7a7a;\n    font-size: 0.75em;\n    letter-spacing: 0.1em;\n    text-transform: uppercase; }\n    html.theme--documenter-dark .menu-label:not(:first-child) {\n      margin-top: 1em; }\n    html.theme--documenter-dark .menu-label:not(:last-child) {\n      margin-bottom: 1em; }\n  html.theme--documenter-dark .message {\n    background-color: whitesmoke;\n    border-radius: 4px;\n    font-size: 1rem; }\n    html.theme--documenter-dark .message strong {\n      color: currentColor; }\n    html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item) {\n      color: currentColor;\n      text-decoration: underline; }\n    html.theme--documenter-dark .message.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.message {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .message.is-medium {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .message.is-large {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .message.is-white {\n      background-color: white; }\n      html.theme--documenter-dark .message.is-white .message-header {\n        background-color: white;\n        color: #0a0a0a; }\n      html.theme--documenter-dark .message.is-white .message-body {\n        border-color: white;\n        color: #4d4d4d; }\n    html.theme--documenter-dark .message.is-black {\n      background-color: #fafafa; }\n      html.theme--documenter-dark .message.is-black .message-header {\n        background-color: #0a0a0a;\n        color: white; }\n      html.theme--documenter-dark .message.is-black .message-body {\n        border-color: #0a0a0a;\n        color: #090909; }\n    html.theme--documenter-dark .message.is-light {\n      background-color: #fafafa; }\n      html.theme--documenter-dark .message.is-light .message-header {\n        background-color: whitesmoke;\n        color: #363636; }\n      html.theme--documenter-dark .message.is-light .message-body {\n        border-color: whitesmoke;\n        color: #505050; }\n    html.theme--documenter-dark .message.is-dark, html.theme--documenter-dark .content kbd.message {\n      background-color: #fafafa; }\n      html.theme--documenter-dark .message.is-dark .message-header, html.theme--documenter-dark .content kbd.message .message-header {\n        background-color: #363636;\n        color: whitesmoke; }\n      html.theme--documenter-dark .message.is-dark .message-body, html.theme--documenter-dark .content kbd.message .message-body {\n        border-color: #363636;\n        color: #2a2a2a; }\n    html.theme--documenter-dark .message.is-primary, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink {\n      background-color: #f6fbfd; }\n      html.theme--documenter-dark .message.is-primary .message-header, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-header {\n        background-color: #4eb5de;\n        color: #fff; }\n      html.theme--documenter-dark .message.is-primary .message-body, html.theme--documenter-dark .docstring > section > a.message.docs-sourcelink .message-body {\n        border-color: #4eb5de;\n        color: #1f556a; }\n    html.theme--documenter-dark .message.is-link {\n      background-color: #fef9f6; }\n      html.theme--documenter-dark .message.is-link .message-header {\n        background-color: #e37733;\n        color: #fff; }\n      html.theme--documenter-dark .message.is-link .message-body {\n        border-color: #e37733;\n        color: #7f411b; }\n    html.theme--documenter-dark .message.is-info {\n      background-color: #f6fbfe; }\n      html.theme--documenter-dark .message.is-info .message-header {\n        background-color: #209cee;\n        color: #fff; }\n      html.theme--documenter-dark .message.is-info .message-body {\n        border-color: #209cee;\n        color: #12537e; }\n    html.theme--documenter-dark .message.is-success {\n      background-color: #f6fdf9; }\n      html.theme--documenter-dark .message.is-success .message-header {\n        background-color: #22c35b;\n        color: #fff; }\n      html.theme--documenter-dark .message.is-success .message-body {\n        border-color: #22c35b;\n        color: #0f361d; }\n    html.theme--documenter-dark .message.is-warning {\n      background-color: #fffdf5; }\n      html.theme--documenter-dark .message.is-warning .message-header {\n        background-color: #ffdd57;\n        color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .message.is-warning .message-body {\n        border-color: #ffdd57;\n        color: #3b3108; }\n    html.theme--documenter-dark .message.is-danger {\n      background-color: #fff5f5; }\n      html.theme--documenter-dark .message.is-danger .message-header {\n        background-color: #da0b00;\n        color: #fff; }\n      html.theme--documenter-dark .message.is-danger .message-body {\n        border-color: #da0b00;\n        color: #9b0c04; }\n  html.theme--documenter-dark .message-header {\n    align-items: center;\n    background-color: #ececec;\n    border-radius: 4px 4px 0 0;\n    color: rgba(0, 0, 0, 0.7);\n    display: flex;\n    font-weight: 700;\n    justify-content: space-between;\n    line-height: 1.25;\n    padding: 0.75em;\n    position: relative; }\n    html.theme--documenter-dark .message-header .delete {\n      flex-grow: 0;\n      flex-shrink: 0;\n      margin-left: 0.75em; }\n    html.theme--documenter-dark .message-header + .message-body {\n      border-width: 0;\n      border-top-left-radius: 0;\n      border-top-right-radius: 0; }\n  html.theme--documenter-dark .message-body {\n    border-color: #dbdbdb;\n    border-radius: 4px;\n    border-style: solid;\n    border-width: 0 0 0 4px;\n    color: #ececec;\n    padding: 1em 1.25em; }\n    html.theme--documenter-dark .message-body code,\n    html.theme--documenter-dark .message-body pre {\n      background-color: white; }\n    html.theme--documenter-dark .message-body pre code {\n      background-color: transparent; }\n  html.theme--documenter-dark .modal {\n    align-items: center;\n    display: none;\n    flex-direction: column;\n    justify-content: center;\n    overflow: hidden;\n    position: fixed;\n    z-index: 40; }\n    html.theme--documenter-dark .modal.is-active {\n      display: flex; }\n  html.theme--documenter-dark .modal-background {\n    background-color: rgba(10, 10, 10, 0.86); }\n  html.theme--documenter-dark .modal-content,\n  html.theme--documenter-dark .modal-card {\n    margin: 0 20px;\n    max-height: calc(100vh - 160px);\n    overflow: auto;\n    position: relative;\n    width: 100%; }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .modal-content,\n      html.theme--documenter-dark .modal-card {\n        margin: 0 auto;\n        max-height: calc(100vh - 40px);\n        width: 640px; } }\n  html.theme--documenter-dark .modal-close {\n    background: none;\n    height: 40px;\n    position: fixed;\n    right: 20px;\n    top: 20px;\n    width: 40px; }\n  html.theme--documenter-dark .modal-card {\n    display: flex;\n    flex-direction: column;\n    max-height: calc(100vh - 40px);\n    overflow: hidden;\n    -ms-overflow-y: visible; }\n  html.theme--documenter-dark .modal-card-head,\n  html.theme--documenter-dark .modal-card-foot {\n    align-items: center;\n    background-color: whitesmoke;\n    display: flex;\n    flex-shrink: 0;\n    justify-content: flex-start;\n    padding: 20px;\n    position: relative; }\n  html.theme--documenter-dark .modal-card-head {\n    border-bottom: 1px solid #dbdbdb;\n    border-top-left-radius: 6px;\n    border-top-right-radius: 6px; }\n  html.theme--documenter-dark .modal-card-title {\n    color: #97b3e2;\n    flex-grow: 1;\n    flex-shrink: 0;\n    font-size: 1.5rem;\n    line-height: 1; }\n  html.theme--documenter-dark .modal-card-foot {\n    border-bottom-left-radius: 6px;\n    border-bottom-right-radius: 6px;\n    border-top: 1px solid #dbdbdb; }\n    html.theme--documenter-dark .modal-card-foot .button:not(:last-child) {\n      margin-right: 0.5em; }\n  html.theme--documenter-dark .modal-card-body {\n    -webkit-overflow-scrolling: touch;\n    background-color: white;\n    flex-grow: 1;\n    flex-shrink: 1;\n    overflow: auto;\n    padding: 20px; }\n  html.theme--documenter-dark .navbar {\n    background-color: white;\n    min-height: 3.25rem;\n    position: relative;\n    z-index: 30; }\n    html.theme--documenter-dark .navbar.is-white {\n      background-color: white;\n      color: #0a0a0a; }\n      html.theme--documenter-dark .navbar.is-white .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link {\n        color: #0a0a0a; }\n      html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active {\n        background-color: #f2f2f2;\n        color: #0a0a0a; }\n      html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after {\n        border-color: #0a0a0a; }\n      html.theme--documenter-dark .navbar.is-white .navbar-burger {\n        color: #0a0a0a; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-white .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-white .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link {\n          color: #0a0a0a; }\n        html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-white .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-white .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active {\n          background-color: #f2f2f2;\n          color: #0a0a0a; }\n        html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after {\n          border-color: #0a0a0a; }\n        html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: #f2f2f2;\n          color: #0a0a0a; }\n        html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active {\n          background-color: white;\n          color: #0a0a0a; } }\n    html.theme--documenter-dark .navbar.is-black {\n      background-color: #0a0a0a;\n      color: white; }\n      html.theme--documenter-dark .navbar.is-black .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link {\n        color: white; }\n      html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active {\n        background-color: black;\n        color: white; }\n      html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after {\n        border-color: white; }\n      html.theme--documenter-dark .navbar.is-black .navbar-burger {\n        color: white; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-black .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-black .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link {\n          color: white; }\n        html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-black .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-black .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active {\n          background-color: black;\n          color: white; }\n        html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after {\n          border-color: white; }\n        html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: black;\n          color: white; }\n        html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active {\n          background-color: #0a0a0a;\n          color: white; } }\n    html.theme--documenter-dark .navbar.is-light {\n      background-color: whitesmoke;\n      color: #363636; }\n      html.theme--documenter-dark .navbar.is-light .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link {\n        color: #363636; }\n      html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active {\n        background-color: #e8e8e8;\n        color: #363636; }\n      html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after {\n        border-color: #363636; }\n      html.theme--documenter-dark .navbar.is-light .navbar-burger {\n        color: #363636; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-light .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-light .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link {\n          color: #363636; }\n        html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-light .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-light .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active {\n          background-color: #e8e8e8;\n          color: #363636; }\n        html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after {\n          border-color: #363636; }\n        html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: #e8e8e8;\n          color: #363636; }\n        html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active {\n          background-color: whitesmoke;\n          color: #363636; } }\n    html.theme--documenter-dark .navbar.is-dark, html.theme--documenter-dark .content kbd.navbar {\n      background-color: #363636;\n      color: whitesmoke; }\n      html.theme--documenter-dark .navbar.is-dark .navbar-brand > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,\n      html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link {\n        color: whitesmoke; }\n      html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,\n      html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active {\n        background-color: #292929;\n        color: whitesmoke; }\n      html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after {\n        border-color: whitesmoke; }\n      html.theme--documenter-dark .navbar.is-dark .navbar-burger, html.theme--documenter-dark .content kbd.navbar .navbar-burger {\n        color: whitesmoke; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-dark .navbar-start > .navbar-item, html.theme--documenter-dark .content kbd.navbar .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,\n        html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-dark .navbar-end > .navbar-item,\n        html.theme--documenter-dark .content kbd.navbar .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,\n        html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link {\n          color: whitesmoke; }\n        html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-dark .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-dark .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .content kbd.navbar .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,\n        html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active {\n          background-color: #292929;\n          color: whitesmoke; }\n        html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after, html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,\n        html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after {\n          border-color: whitesmoke; }\n        html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,\n        html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: #292929;\n          color: whitesmoke; }\n        html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active {\n          background-color: #363636;\n          color: whitesmoke; } }\n    html.theme--documenter-dark .navbar.is-primary, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink {\n      background-color: #4eb5de;\n      color: #fff; }\n      html.theme--documenter-dark .navbar.is-primary .navbar-brand > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,\n      html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link {\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-brand > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,\n      html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active {\n        background-color: #39acda;\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-brand .navbar-link::after {\n        border-color: #fff; }\n      html.theme--documenter-dark .navbar.is-primary .navbar-burger, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-burger {\n        color: #fff; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-primary .navbar-start > .navbar-item, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-primary .navbar-end > .navbar-item,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link {\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-primary .navbar-start > a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-primary .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active {\n          background-color: #39acda;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-end .navbar-link::after {\n          border-color: #fff; }\n        html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,\n        html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: #39acda;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active {\n          background-color: #4eb5de;\n          color: #fff; } }\n    html.theme--documenter-dark .navbar.is-link {\n      background-color: #e37733;\n      color: #fff; }\n      html.theme--documenter-dark .navbar.is-link .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link {\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active {\n        background-color: #dd681f;\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after {\n        border-color: #fff; }\n      html.theme--documenter-dark .navbar.is-link .navbar-burger {\n        color: #fff; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-link .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-link .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link {\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-link .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-link .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active {\n          background-color: #dd681f;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after {\n          border-color: #fff; }\n        html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: #dd681f;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active {\n          background-color: #e37733;\n          color: #fff; } }\n    html.theme--documenter-dark .navbar.is-info {\n      background-color: #209cee;\n      color: #fff; }\n      html.theme--documenter-dark .navbar.is-info .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link {\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active {\n        background-color: #118fe4;\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after {\n        border-color: #fff; }\n      html.theme--documenter-dark .navbar.is-info .navbar-burger {\n        color: #fff; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-info .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-info .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link {\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-info .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-info .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active {\n          background-color: #118fe4;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after {\n          border-color: #fff; }\n        html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: #118fe4;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active {\n          background-color: #209cee;\n          color: #fff; } }\n    html.theme--documenter-dark .navbar.is-success {\n      background-color: #22c35b;\n      color: #fff; }\n      html.theme--documenter-dark .navbar.is-success .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link {\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active {\n        background-color: #1ead51;\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after {\n        border-color: #fff; }\n      html.theme--documenter-dark .navbar.is-success .navbar-burger {\n        color: #fff; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-success .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-success .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link {\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-success .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-success .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active {\n          background-color: #1ead51;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after {\n          border-color: #fff; }\n        html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: #1ead51;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active {\n          background-color: #22c35b;\n          color: #fff; } }\n    html.theme--documenter-dark .navbar.is-warning {\n      background-color: #ffdd57;\n      color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .navbar.is-warning .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link {\n        color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active {\n        background-color: #ffd83d;\n        color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after {\n        border-color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .navbar.is-warning .navbar-burger {\n        color: rgba(0, 0, 0, 0.7); }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-warning .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-warning .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link {\n          color: rgba(0, 0, 0, 0.7); }\n        html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-warning .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-warning .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active {\n          background-color: #ffd83d;\n          color: rgba(0, 0, 0, 0.7); }\n        html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after {\n          border-color: rgba(0, 0, 0, 0.7); }\n        html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: #ffd83d;\n          color: rgba(0, 0, 0, 0.7); }\n        html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active {\n          background-color: #ffdd57;\n          color: rgba(0, 0, 0, 0.7); } }\n    html.theme--documenter-dark .navbar.is-danger {\n      background-color: #da0b00;\n      color: #fff; }\n      html.theme--documenter-dark .navbar.is-danger .navbar-brand > .navbar-item,\n      html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link {\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-brand > a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active {\n        background-color: #c10a00;\n        color: #fff; }\n      html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after {\n        border-color: #fff; }\n      html.theme--documenter-dark .navbar.is-danger .navbar-burger {\n        color: #fff; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark .navbar.is-danger .navbar-start > .navbar-item,\n        html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,\n        html.theme--documenter-dark .navbar.is-danger .navbar-end > .navbar-item,\n        html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link {\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:focus, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item:hover, html.theme--documenter-dark .navbar.is-danger .navbar-start > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,\n        html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:focus,\n        html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item:hover,\n        html.theme--documenter-dark .navbar.is-danger .navbar-end > a.navbar-item.is-active,\n        html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,\n        html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,\n        html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active {\n          background-color: #c10a00;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,\n        html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after {\n          border-color: #fff; }\n        html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,\n        html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,\n        html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link {\n          background-color: #c10a00;\n          color: #fff; }\n        html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active {\n          background-color: #da0b00;\n          color: #fff; } }\n    html.theme--documenter-dark .navbar > .container {\n      align-items: stretch;\n      display: flex;\n      min-height: 3.25rem;\n      width: 100%; }\n    html.theme--documenter-dark .navbar.has-shadow {\n      box-shadow: 0 2px 0 0 whitesmoke; }\n    html.theme--documenter-dark .navbar.is-fixed-bottom, html.theme--documenter-dark .navbar.is-fixed-top {\n      left: 0;\n      position: fixed;\n      right: 0;\n      z-index: 30; }\n    html.theme--documenter-dark .navbar.is-fixed-bottom {\n      bottom: 0; }\n      html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow {\n        box-shadow: 0 -2px 0 0 whitesmoke; }\n    html.theme--documenter-dark .navbar.is-fixed-top {\n      top: 0; }\n  html.theme--documenter-dark html.has-navbar-fixed-top,\n  html.theme--documenter-dark body.has-navbar-fixed-top {\n    padding-top: 3.25rem; }\n  html.theme--documenter-dark html.has-navbar-fixed-bottom,\n  html.theme--documenter-dark body.has-navbar-fixed-bottom {\n    padding-bottom: 3.25rem; }\n  html.theme--documenter-dark .navbar-brand,\n  html.theme--documenter-dark .navbar-tabs {\n    align-items: stretch;\n    display: flex;\n    flex-shrink: 0;\n    min-height: 3.25rem; }\n  html.theme--documenter-dark .navbar-brand a.navbar-item:focus, html.theme--documenter-dark .navbar-brand a.navbar-item:hover {\n    background-color: transparent; }\n  html.theme--documenter-dark .navbar-tabs {\n    -webkit-overflow-scrolling: touch;\n    max-width: 100vw;\n    overflow-x: auto;\n    overflow-y: hidden; }\n  html.theme--documenter-dark .navbar-burger {\n    color: #4a4a4a;\n    cursor: pointer;\n    display: block;\n    height: 3.25rem;\n    position: relative;\n    width: 3.25rem;\n    margin-left: auto; }\n    html.theme--documenter-dark .navbar-burger span {\n      background-color: currentColor;\n      display: block;\n      height: 1px;\n      left: calc(50% - 8px);\n      position: absolute;\n      transform-origin: center;\n      transition-duration: 86ms;\n      transition-property: background-color, opacity, transform;\n      transition-timing-function: ease-out;\n      width: 16px; }\n      html.theme--documenter-dark .navbar-burger span:nth-child(1) {\n        top: calc(50% - 6px); }\n      html.theme--documenter-dark .navbar-burger span:nth-child(2) {\n        top: calc(50% - 1px); }\n      html.theme--documenter-dark .navbar-burger span:nth-child(3) {\n        top: calc(50% + 4px); }\n    html.theme--documenter-dark .navbar-burger:hover {\n      background-color: rgba(0, 0, 0, 0.05); }\n    html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1) {\n      transform: translateY(5px) rotate(45deg); }\n    html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2) {\n      opacity: 0; }\n    html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3) {\n      transform: translateY(-5px) rotate(-45deg); }\n  html.theme--documenter-dark .navbar-menu {\n    display: none; }\n  html.theme--documenter-dark .navbar-item,\n  html.theme--documenter-dark .navbar-link {\n    color: #4a4a4a;\n    display: block;\n    line-height: 1.5;\n    padding: 0.5rem 0.75rem;\n    position: relative; }\n    html.theme--documenter-dark .navbar-item .icon:only-child,\n    html.theme--documenter-dark .navbar-link .icon:only-child {\n      margin-left: -0.25rem;\n      margin-right: -0.25rem; }\n  html.theme--documenter-dark a.navbar-item,\n  html.theme--documenter-dark .navbar-link {\n    cursor: pointer; }\n    html.theme--documenter-dark a.navbar-item:focus, html.theme--documenter-dark a.navbar-item:focus-within, html.theme--documenter-dark a.navbar-item:hover, html.theme--documenter-dark a.navbar-item.is-active,\n    html.theme--documenter-dark .navbar-link:focus,\n    html.theme--documenter-dark .navbar-link:focus-within,\n    html.theme--documenter-dark .navbar-link:hover,\n    html.theme--documenter-dark .navbar-link.is-active {\n      background-color: #fafafa;\n      color: #e37733; }\n  html.theme--documenter-dark .navbar-item {\n    display: block;\n    flex-grow: 0;\n    flex-shrink: 0; }\n    html.theme--documenter-dark .navbar-item img {\n      max-height: 1.75rem; }\n    html.theme--documenter-dark .navbar-item.has-dropdown {\n      padding: 0; }\n    html.theme--documenter-dark .navbar-item.is-expanded {\n      flex-grow: 1;\n      flex-shrink: 1; }\n    html.theme--documenter-dark .navbar-item.is-tab {\n      border-bottom: 1px solid transparent;\n      min-height: 3.25rem;\n      padding-bottom: calc(0.5rem - 1px); }\n      html.theme--documenter-dark .navbar-item.is-tab:focus, html.theme--documenter-dark .navbar-item.is-tab:hover {\n        background-color: transparent;\n        border-bottom-color: #e37733; }\n      html.theme--documenter-dark .navbar-item.is-tab.is-active {\n        background-color: transparent;\n        border-bottom-color: #e37733;\n        border-bottom-style: solid;\n        border-bottom-width: 3px;\n        color: #e37733;\n        padding-bottom: calc(0.5rem - 3px); }\n  html.theme--documenter-dark .navbar-content {\n    flex-grow: 1;\n    flex-shrink: 1; }\n  html.theme--documenter-dark .navbar-link:not(.is-arrowless) {\n    padding-right: 2.5em; }\n    html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after {\n      border-color: #e37733;\n      margin-top: -0.375em;\n      right: 1.125em; }\n  html.theme--documenter-dark .navbar-dropdown {\n    font-size: 0.875rem;\n    padding-bottom: 0.5rem;\n    padding-top: 0.5rem; }\n    html.theme--documenter-dark .navbar-dropdown .navbar-item {\n      padding-left: 1.5rem;\n      padding-right: 1.5rem; }\n  html.theme--documenter-dark .navbar-divider {\n    background-color: whitesmoke;\n    border: none;\n    display: none;\n    height: 2px;\n    margin: 0.5rem 0; }\n  @media screen and (max-width: 1055px) {\n    html.theme--documenter-dark .navbar > .container {\n      display: block; }\n    html.theme--documenter-dark .navbar-brand .navbar-item,\n    html.theme--documenter-dark .navbar-tabs .navbar-item {\n      align-items: center;\n      display: flex; }\n    html.theme--documenter-dark .navbar-link::after {\n      display: none; }\n    html.theme--documenter-dark .navbar-menu {\n      background-color: white;\n      box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1);\n      padding: 0.5rem 0; }\n      html.theme--documenter-dark .navbar-menu.is-active {\n        display: block; }\n    html.theme--documenter-dark .navbar.is-fixed-bottom-touch, html.theme--documenter-dark .navbar.is-fixed-top-touch {\n      left: 0;\n      position: fixed;\n      right: 0;\n      z-index: 30; }\n    html.theme--documenter-dark .navbar.is-fixed-bottom-touch {\n      bottom: 0; }\n      html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow {\n        box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); }\n    html.theme--documenter-dark .navbar.is-fixed-top-touch {\n      top: 0; }\n    html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu, html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu {\n      -webkit-overflow-scrolling: touch;\n      max-height: calc(100vh - 3.25rem);\n      overflow: auto; }\n    html.theme--documenter-dark html.has-navbar-fixed-top-touch,\n    html.theme--documenter-dark body.has-navbar-fixed-top-touch {\n      padding-top: 3.25rem; }\n    html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,\n    html.theme--documenter-dark body.has-navbar-fixed-bottom-touch {\n      padding-bottom: 3.25rem; } }\n  @media screen and (min-width: 1056px) {\n    html.theme--documenter-dark .navbar,\n    html.theme--documenter-dark .navbar-menu,\n    html.theme--documenter-dark .navbar-start,\n    html.theme--documenter-dark .navbar-end {\n      align-items: stretch;\n      display: flex; }\n    html.theme--documenter-dark .navbar {\n      min-height: 3.25rem; }\n      html.theme--documenter-dark .navbar.is-spaced {\n        padding: 1rem 2rem; }\n        html.theme--documenter-dark .navbar.is-spaced .navbar-start,\n        html.theme--documenter-dark .navbar.is-spaced .navbar-end {\n          align-items: center; }\n        html.theme--documenter-dark .navbar.is-spaced a.navbar-item,\n        html.theme--documenter-dark .navbar.is-spaced .navbar-link {\n          border-radius: 4px; }\n      html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover, html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,\n      html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,\n      html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,\n      html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active {\n        background-color: transparent !important; }\n      html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link {\n        background-color: transparent !important; }\n      html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover {\n        background-color: whitesmoke;\n        color: #0a0a0a; }\n      html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active {\n        background-color: whitesmoke;\n        color: #e37733; }\n    html.theme--documenter-dark .navbar-burger {\n      display: none; }\n    html.theme--documenter-dark .navbar-item,\n    html.theme--documenter-dark .navbar-link {\n      align-items: center;\n      display: flex; }\n    html.theme--documenter-dark .navbar-item {\n      display: flex; }\n      html.theme--documenter-dark .navbar-item.has-dropdown {\n        align-items: stretch; }\n      html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after {\n        transform: rotate(135deg) translate(0.25em, -0.25em); }\n      html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown {\n        border-bottom: 2px solid #dbdbdb;\n        border-radius: 6px 6px 0 0;\n        border-top: none;\n        bottom: 100%;\n        box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1);\n        top: auto; }\n      html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown {\n        display: block; }\n        .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown, html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed {\n          opacity: 1;\n          pointer-events: auto;\n          transform: translateY(0); }\n    html.theme--documenter-dark .navbar-menu {\n      flex-grow: 1;\n      flex-shrink: 0; }\n    html.theme--documenter-dark .navbar-start {\n      justify-content: flex-start;\n      margin-right: auto; }\n    html.theme--documenter-dark .navbar-end {\n      justify-content: flex-end;\n      margin-left: auto; }\n    html.theme--documenter-dark .navbar-dropdown {\n      background-color: white;\n      border-bottom-left-radius: 6px;\n      border-bottom-right-radius: 6px;\n      border-top: 2px solid #dbdbdb;\n      box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1);\n      display: none;\n      font-size: 0.875rem;\n      left: 0;\n      min-width: 100%;\n      position: absolute;\n      top: 100%;\n      z-index: 20; }\n      html.theme--documenter-dark .navbar-dropdown .navbar-item {\n        padding: 0.375rem 1rem;\n        white-space: nowrap; }\n      html.theme--documenter-dark .navbar-dropdown a.navbar-item {\n        padding-right: 3rem; }\n        html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus, html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover {\n          background-color: whitesmoke;\n          color: #0a0a0a; }\n        html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active {\n          background-color: whitesmoke;\n          color: #e37733; }\n      .navbar.is-spaced html.theme--documenter-dark .navbar-dropdown, html.theme--documenter-dark .navbar-dropdown.is-boxed {\n        border-radius: 6px;\n        border-top: none;\n        box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);\n        display: block;\n        opacity: 0;\n        pointer-events: none;\n        top: calc(100% + (-4px));\n        transform: translateY(-5px);\n        transition-duration: 86ms;\n        transition-property: opacity, transform; }\n      html.theme--documenter-dark .navbar-dropdown.is-right {\n        left: auto;\n        right: 0; }\n    html.theme--documenter-dark .navbar-divider {\n      display: block; }\n    html.theme--documenter-dark .navbar > .container .navbar-brand,\n    html.theme--documenter-dark .container > .navbar .navbar-brand {\n      margin-left: -.75rem; }\n    html.theme--documenter-dark .navbar > .container .navbar-menu,\n    html.theme--documenter-dark .container > .navbar .navbar-menu {\n      margin-right: -.75rem; }\n    html.theme--documenter-dark .navbar.is-fixed-bottom-desktop, html.theme--documenter-dark .navbar.is-fixed-top-desktop {\n      left: 0;\n      position: fixed;\n      right: 0;\n      z-index: 30; }\n    html.theme--documenter-dark .navbar.is-fixed-bottom-desktop {\n      bottom: 0; }\n      html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow {\n        box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1); }\n    html.theme--documenter-dark .navbar.is-fixed-top-desktop {\n      top: 0; }\n    html.theme--documenter-dark html.has-navbar-fixed-top-desktop,\n    html.theme--documenter-dark body.has-navbar-fixed-top-desktop {\n      padding-top: 3.25rem; }\n    html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,\n    html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop {\n      padding-bottom: 3.25rem; }\n    html.theme--documenter-dark html.has-spaced-navbar-fixed-top,\n    html.theme--documenter-dark body.has-spaced-navbar-fixed-top {\n      padding-top: 5.25rem; }\n    html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,\n    html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom {\n      padding-bottom: 5.25rem; }\n    html.theme--documenter-dark a.navbar-item.is-active,\n    html.theme--documenter-dark .navbar-link.is-active {\n      color: #0a0a0a; }\n    html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),\n    html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover) {\n      background-color: transparent; }\n    html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link, html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link {\n      background-color: #fafafa; } }\n  html.theme--documenter-dark .hero.is-fullheight-with-navbar {\n    min-height: calc(100vh - 3.25rem); }\n  html.theme--documenter-dark .pagination {\n    font-size: 1rem;\n    margin: -0.25rem; }\n    html.theme--documenter-dark .pagination.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .pagination.is-medium {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .pagination.is-large {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .pagination.is-rounded .pagination-previous, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-previous,\n    html.theme--documenter-dark .pagination.is-rounded .pagination-next,\n    html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-next {\n      padding-left: 1em;\n      padding-right: 1em;\n      border-radius: 290486px; }\n    html.theme--documenter-dark .pagination.is-rounded .pagination-link, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.pagination .pagination-link {\n      border-radius: 290486px; }\n  html.theme--documenter-dark .pagination,\n  html.theme--documenter-dark .pagination-list {\n    align-items: center;\n    display: flex;\n    justify-content: center;\n    text-align: center; }\n  html.theme--documenter-dark .pagination-previous,\n  html.theme--documenter-dark .pagination-next,\n  html.theme--documenter-dark .pagination-link,\n  html.theme--documenter-dark .pagination-ellipsis {\n    font-size: 1em;\n    justify-content: center;\n    margin: 0.25rem;\n    padding-left: 0.5em;\n    padding-right: 0.5em;\n    text-align: center; }\n  html.theme--documenter-dark .pagination-previous,\n  html.theme--documenter-dark .pagination-next,\n  html.theme--documenter-dark .pagination-link {\n    border-color: #dbdbdb;\n    color: #363636;\n    min-width: 2.25em; }\n    html.theme--documenter-dark .pagination-previous:hover,\n    html.theme--documenter-dark .pagination-next:hover,\n    html.theme--documenter-dark .pagination-link:hover {\n      border-color: #b5b5b5;\n      color: #f2be9e; }\n    html.theme--documenter-dark .pagination-previous:focus,\n    html.theme--documenter-dark .pagination-next:focus,\n    html.theme--documenter-dark .pagination-link:focus {\n      border-color: #2e63b8; }\n    html.theme--documenter-dark .pagination-previous:active,\n    html.theme--documenter-dark .pagination-next:active,\n    html.theme--documenter-dark .pagination-link:active {\n      box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); }\n    html.theme--documenter-dark .pagination-previous[disabled],\n    html.theme--documenter-dark .pagination-next[disabled],\n    html.theme--documenter-dark .pagination-link[disabled] {\n      background-color: #dbdbdb;\n      border-color: #dbdbdb;\n      box-shadow: none;\n      color: #7a7a7a;\n      opacity: 0.5; }\n  html.theme--documenter-dark .pagination-previous,\n  html.theme--documenter-dark .pagination-next {\n    padding-left: 0.75em;\n    padding-right: 0.75em;\n    white-space: nowrap; }\n  html.theme--documenter-dark .pagination-link.is-current {\n    background-color: #e37733;\n    border-color: #e37733;\n    color: #fff; }\n  html.theme--documenter-dark .pagination-ellipsis {\n    color: #b5b5b5;\n    pointer-events: none; }\n  html.theme--documenter-dark .pagination-list {\n    flex-wrap: wrap; }\n  @media screen and (max-width: 768px) {\n    html.theme--documenter-dark .pagination {\n      flex-wrap: wrap; }\n    html.theme--documenter-dark .pagination-previous,\n    html.theme--documenter-dark .pagination-next {\n      flex-grow: 1;\n      flex-shrink: 1; }\n    html.theme--documenter-dark .pagination-list li {\n      flex-grow: 1;\n      flex-shrink: 1; } }\n  @media screen and (min-width: 769px), print {\n    html.theme--documenter-dark .pagination-list {\n      flex-grow: 1;\n      flex-shrink: 1;\n      justify-content: flex-start;\n      order: 1; }\n    html.theme--documenter-dark .pagination-previous {\n      order: 2; }\n    html.theme--documenter-dark .pagination-next {\n      order: 3; }\n    html.theme--documenter-dark .pagination {\n      justify-content: space-between; }\n      html.theme--documenter-dark .pagination.is-centered .pagination-previous {\n        order: 1; }\n      html.theme--documenter-dark .pagination.is-centered .pagination-list {\n        justify-content: center;\n        order: 2; }\n      html.theme--documenter-dark .pagination.is-centered .pagination-next {\n        order: 3; }\n      html.theme--documenter-dark .pagination.is-right .pagination-previous {\n        order: 1; }\n      html.theme--documenter-dark .pagination.is-right .pagination-next {\n        order: 2; }\n      html.theme--documenter-dark .pagination.is-right .pagination-list {\n        justify-content: flex-end;\n        order: 3; } }\n  html.theme--documenter-dark .panel {\n    font-size: 1rem; }\n    html.theme--documenter-dark .panel:not(:last-child) {\n      margin-bottom: 1.5rem; }\n  html.theme--documenter-dark .panel-heading,\n  html.theme--documenter-dark .panel-tabs,\n  html.theme--documenter-dark .panel-block {\n    border-bottom: 1px solid #dbdbdb;\n    border-left: 1px solid #dbdbdb;\n    border-right: 1px solid #dbdbdb; }\n    html.theme--documenter-dark .panel-heading:first-child,\n    html.theme--documenter-dark .panel-tabs:first-child,\n    html.theme--documenter-dark .panel-block:first-child {\n      border-top: 1px solid #dbdbdb; }\n  html.theme--documenter-dark .panel-heading {\n    background-color: whitesmoke;\n    border-radius: 4px 4px 0 0;\n    color: #97b3e2;\n    font-size: 1.25em;\n    font-weight: 300;\n    line-height: 1.25;\n    padding: 0.5em 0.75em; }\n  html.theme--documenter-dark .panel-tabs {\n    align-items: flex-end;\n    display: flex;\n    font-size: 0.875em;\n    justify-content: center; }\n    html.theme--documenter-dark .panel-tabs a {\n      border-bottom: 1px solid #dbdbdb;\n      margin-bottom: -1px;\n      padding: 0.5em; }\n      html.theme--documenter-dark .panel-tabs a.is-active {\n        border-bottom-color: #4a4a4a;\n        color: #363636; }\n  html.theme--documenter-dark .panel-list a {\n    color: #ececec; }\n    html.theme--documenter-dark .panel-list a:hover {\n      color: #e37733; }\n  html.theme--documenter-dark .panel-block {\n    align-items: center;\n    color: #97b3e2;\n    display: flex;\n    justify-content: flex-start;\n    padding: 0.5em 0.75em; }\n    html.theme--documenter-dark .panel-block input[type=\"checkbox\"] {\n      margin-right: 0.75em; }\n    html.theme--documenter-dark .panel-block > .control {\n      flex-grow: 1;\n      flex-shrink: 1;\n      width: 100%; }\n    html.theme--documenter-dark .panel-block.is-wrapped {\n      flex-wrap: wrap; }\n    html.theme--documenter-dark .panel-block.is-active {\n      border-left-color: #e37733;\n      color: #363636; }\n      html.theme--documenter-dark .panel-block.is-active .panel-icon {\n        color: #e37733; }\n  html.theme--documenter-dark a.panel-block,\n  html.theme--documenter-dark label.panel-block {\n    cursor: pointer; }\n    html.theme--documenter-dark a.panel-block:hover,\n    html.theme--documenter-dark label.panel-block:hover {\n      background-color: whitesmoke; }\n  html.theme--documenter-dark .panel-icon {\n    display: inline-block;\n    font-size: 14px;\n    height: 1em;\n    line-height: 1em;\n    text-align: center;\n    vertical-align: top;\n    width: 1em;\n    color: #7a7a7a;\n    margin-right: 0.75em; }\n    html.theme--documenter-dark .panel-icon .fa {\n      font-size: inherit;\n      line-height: inherit; }\n  html.theme--documenter-dark .tabs {\n    -webkit-overflow-scrolling: touch;\n    align-items: stretch;\n    display: flex;\n    font-size: 1rem;\n    justify-content: space-between;\n    overflow: hidden;\n    overflow-x: auto;\n    white-space: nowrap; }\n    html.theme--documenter-dark .tabs a {\n      align-items: center;\n      border-bottom-color: #dbdbdb;\n      border-bottom-style: solid;\n      border-bottom-width: 1px;\n      color: #ececec;\n      display: flex;\n      justify-content: center;\n      margin-bottom: -1px;\n      padding: 0.5em 1em;\n      vertical-align: top; }\n      html.theme--documenter-dark .tabs a:hover {\n        border-bottom-color: #97b3e2;\n        color: #97b3e2; }\n    html.theme--documenter-dark .tabs li {\n      display: block; }\n      html.theme--documenter-dark .tabs li.is-active a {\n        border-bottom-color: #e37733;\n        color: #e37733; }\n    html.theme--documenter-dark .tabs ul {\n      align-items: center;\n      border-bottom-color: #dbdbdb;\n      border-bottom-style: solid;\n      border-bottom-width: 1px;\n      display: flex;\n      flex-grow: 1;\n      flex-shrink: 0;\n      justify-content: flex-start; }\n      html.theme--documenter-dark .tabs ul.is-left {\n        padding-right: 0.75em; }\n      html.theme--documenter-dark .tabs ul.is-center {\n        flex: none;\n        justify-content: center;\n        padding-left: 0.75em;\n        padding-right: 0.75em; }\n      html.theme--documenter-dark .tabs ul.is-right {\n        justify-content: flex-end;\n        padding-left: 0.75em; }\n    html.theme--documenter-dark .tabs .icon:first-child {\n      margin-right: 0.5em; }\n    html.theme--documenter-dark .tabs .icon:last-child {\n      margin-left: 0.5em; }\n    html.theme--documenter-dark .tabs.is-centered ul {\n      justify-content: center; }\n    html.theme--documenter-dark .tabs.is-right ul {\n      justify-content: flex-end; }\n    html.theme--documenter-dark .tabs.is-boxed a {\n      border: 1px solid transparent;\n      border-radius: 4px 4px 0 0; }\n      html.theme--documenter-dark .tabs.is-boxed a:hover {\n        background-color: whitesmoke;\n        border-bottom-color: #dbdbdb; }\n    html.theme--documenter-dark .tabs.is-boxed li.is-active a {\n      background-color: white;\n      border-color: #dbdbdb;\n      border-bottom-color: transparent !important; }\n    html.theme--documenter-dark .tabs.is-fullwidth li {\n      flex-grow: 1;\n      flex-shrink: 0; }\n    html.theme--documenter-dark .tabs.is-toggle a {\n      border-color: #dbdbdb;\n      border-style: solid;\n      border-width: 1px;\n      margin-bottom: 0;\n      position: relative; }\n      html.theme--documenter-dark .tabs.is-toggle a:hover {\n        background-color: whitesmoke;\n        border-color: #b5b5b5;\n        z-index: 2; }\n    html.theme--documenter-dark .tabs.is-toggle li + li {\n      margin-left: -1px; }\n    html.theme--documenter-dark .tabs.is-toggle li:first-child a {\n      border-radius: 4px 0 0 4px; }\n    html.theme--documenter-dark .tabs.is-toggle li:last-child a {\n      border-radius: 0 4px 4px 0; }\n    html.theme--documenter-dark .tabs.is-toggle li.is-active a {\n      background-color: #e37733;\n      border-color: #e37733;\n      color: #fff;\n      z-index: 1; }\n    html.theme--documenter-dark .tabs.is-toggle ul {\n      border-bottom: none; }\n    html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a {\n      border-bottom-left-radius: 290486px;\n      border-top-left-radius: 290486px;\n      padding-left: 1.25em; }\n    html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a {\n      border-bottom-right-radius: 290486px;\n      border-top-right-radius: 290486px;\n      padding-right: 1.25em; }\n    html.theme--documenter-dark .tabs.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.tabs {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .tabs.is-medium {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .tabs.is-large {\n      font-size: 1.5rem; }\n  html.theme--documenter-dark .column {\n    display: block;\n    flex-basis: 0;\n    flex-grow: 1;\n    flex-shrink: 1;\n    padding: 0.75rem; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-narrow {\n      flex: none; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-full {\n      flex: none;\n      width: 100%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-three-quarters {\n      flex: none;\n      width: 75%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-two-thirds {\n      flex: none;\n      width: 66.6666%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-half {\n      flex: none;\n      width: 50%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-one-third {\n      flex: none;\n      width: 33.3333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-one-quarter {\n      flex: none;\n      width: 25%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-one-fifth {\n      flex: none;\n      width: 20%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-two-fifths {\n      flex: none;\n      width: 40%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-three-fifths {\n      flex: none;\n      width: 60%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-four-fifths {\n      flex: none;\n      width: 80%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-quarters {\n      margin-left: 75%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-thirds {\n      margin-left: 66.6666%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-half {\n      margin-left: 50%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-third {\n      margin-left: 33.3333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-quarter {\n      margin-left: 25%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-one-fifth {\n      margin-left: 20%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-two-fifths {\n      margin-left: 40%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-three-fifths {\n      margin-left: 60%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-four-fifths {\n      margin-left: 80%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-0 {\n      flex: none;\n      width: 0%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-0 {\n      margin-left: 0%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-1 {\n      flex: none;\n      width: 8.33333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 {\n      margin-left: 8.33333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-2 {\n      flex: none;\n      width: 16.66667%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 {\n      margin-left: 16.66667%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-3 {\n      flex: none;\n      width: 25%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-3 {\n      margin-left: 25%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-4 {\n      flex: none;\n      width: 33.33333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 {\n      margin-left: 33.33333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-5 {\n      flex: none;\n      width: 41.66667%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 {\n      margin-left: 41.66667%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-6 {\n      flex: none;\n      width: 50%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-6 {\n      margin-left: 50%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-7 {\n      flex: none;\n      width: 58.33333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 {\n      margin-left: 58.33333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-8 {\n      flex: none;\n      width: 66.66667%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 {\n      margin-left: 66.66667%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-9 {\n      flex: none;\n      width: 75%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-9 {\n      margin-left: 75%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-10 {\n      flex: none;\n      width: 83.33333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 {\n      margin-left: 83.33333%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-11 {\n      flex: none;\n      width: 91.66667%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 {\n      margin-left: 91.66667%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-12 {\n      flex: none;\n      width: 100%; }\n    .columns.is-mobile > html.theme--documenter-dark .column.is-offset-12 {\n      margin-left: 100%; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .column.is-narrow-mobile {\n        flex: none; }\n      html.theme--documenter-dark .column.is-full-mobile {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-three-quarters-mobile {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-two-thirds-mobile {\n        flex: none;\n        width: 66.6666%; }\n      html.theme--documenter-dark .column.is-half-mobile {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-one-third-mobile {\n        flex: none;\n        width: 33.3333%; }\n      html.theme--documenter-dark .column.is-one-quarter-mobile {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-one-fifth-mobile {\n        flex: none;\n        width: 20%; }\n      html.theme--documenter-dark .column.is-two-fifths-mobile {\n        flex: none;\n        width: 40%; }\n      html.theme--documenter-dark .column.is-three-fifths-mobile {\n        flex: none;\n        width: 60%; }\n      html.theme--documenter-dark .column.is-four-fifths-mobile {\n        flex: none;\n        width: 80%; }\n      html.theme--documenter-dark .column.is-offset-three-quarters-mobile {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-offset-two-thirds-mobile {\n        margin-left: 66.6666%; }\n      html.theme--documenter-dark .column.is-offset-half-mobile {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-offset-one-third-mobile {\n        margin-left: 33.3333%; }\n      html.theme--documenter-dark .column.is-offset-one-quarter-mobile {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-offset-one-fifth-mobile {\n        margin-left: 20%; }\n      html.theme--documenter-dark .column.is-offset-two-fifths-mobile {\n        margin-left: 40%; }\n      html.theme--documenter-dark .column.is-offset-three-fifths-mobile {\n        margin-left: 60%; }\n      html.theme--documenter-dark .column.is-offset-four-fifths-mobile {\n        margin-left: 80%; }\n      html.theme--documenter-dark .column.is-0-mobile {\n        flex: none;\n        width: 0%; }\n      html.theme--documenter-dark .column.is-offset-0-mobile {\n        margin-left: 0%; }\n      html.theme--documenter-dark .column.is-1-mobile {\n        flex: none;\n        width: 8.33333%; }\n      html.theme--documenter-dark .column.is-offset-1-mobile {\n        margin-left: 8.33333%; }\n      html.theme--documenter-dark .column.is-2-mobile {\n        flex: none;\n        width: 16.66667%; }\n      html.theme--documenter-dark .column.is-offset-2-mobile {\n        margin-left: 16.66667%; }\n      html.theme--documenter-dark .column.is-3-mobile {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-offset-3-mobile {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-4-mobile {\n        flex: none;\n        width: 33.33333%; }\n      html.theme--documenter-dark .column.is-offset-4-mobile {\n        margin-left: 33.33333%; }\n      html.theme--documenter-dark .column.is-5-mobile {\n        flex: none;\n        width: 41.66667%; }\n      html.theme--documenter-dark .column.is-offset-5-mobile {\n        margin-left: 41.66667%; }\n      html.theme--documenter-dark .column.is-6-mobile {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-offset-6-mobile {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-7-mobile {\n        flex: none;\n        width: 58.33333%; }\n      html.theme--documenter-dark .column.is-offset-7-mobile {\n        margin-left: 58.33333%; }\n      html.theme--documenter-dark .column.is-8-mobile {\n        flex: none;\n        width: 66.66667%; }\n      html.theme--documenter-dark .column.is-offset-8-mobile {\n        margin-left: 66.66667%; }\n      html.theme--documenter-dark .column.is-9-mobile {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-offset-9-mobile {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-10-mobile {\n        flex: none;\n        width: 83.33333%; }\n      html.theme--documenter-dark .column.is-offset-10-mobile {\n        margin-left: 83.33333%; }\n      html.theme--documenter-dark .column.is-11-mobile {\n        flex: none;\n        width: 91.66667%; }\n      html.theme--documenter-dark .column.is-offset-11-mobile {\n        margin-left: 91.66667%; }\n      html.theme--documenter-dark .column.is-12-mobile {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-offset-12-mobile {\n        margin-left: 100%; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .column.is-narrow, html.theme--documenter-dark .column.is-narrow-tablet {\n        flex: none; }\n      html.theme--documenter-dark .column.is-full, html.theme--documenter-dark .column.is-full-tablet {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-three-quarters, html.theme--documenter-dark .column.is-three-quarters-tablet {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-two-thirds, html.theme--documenter-dark .column.is-two-thirds-tablet {\n        flex: none;\n        width: 66.6666%; }\n      html.theme--documenter-dark .column.is-half, html.theme--documenter-dark .column.is-half-tablet {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-one-third, html.theme--documenter-dark .column.is-one-third-tablet {\n        flex: none;\n        width: 33.3333%; }\n      html.theme--documenter-dark .column.is-one-quarter, html.theme--documenter-dark .column.is-one-quarter-tablet {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-one-fifth, html.theme--documenter-dark .column.is-one-fifth-tablet {\n        flex: none;\n        width: 20%; }\n      html.theme--documenter-dark .column.is-two-fifths, html.theme--documenter-dark .column.is-two-fifths-tablet {\n        flex: none;\n        width: 40%; }\n      html.theme--documenter-dark .column.is-three-fifths, html.theme--documenter-dark .column.is-three-fifths-tablet {\n        flex: none;\n        width: 60%; }\n      html.theme--documenter-dark .column.is-four-fifths, html.theme--documenter-dark .column.is-four-fifths-tablet {\n        flex: none;\n        width: 80%; }\n      html.theme--documenter-dark .column.is-offset-three-quarters, html.theme--documenter-dark .column.is-offset-three-quarters-tablet {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-offset-two-thirds, html.theme--documenter-dark .column.is-offset-two-thirds-tablet {\n        margin-left: 66.6666%; }\n      html.theme--documenter-dark .column.is-offset-half, html.theme--documenter-dark .column.is-offset-half-tablet {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-offset-one-third, html.theme--documenter-dark .column.is-offset-one-third-tablet {\n        margin-left: 33.3333%; }\n      html.theme--documenter-dark .column.is-offset-one-quarter, html.theme--documenter-dark .column.is-offset-one-quarter-tablet {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-offset-one-fifth, html.theme--documenter-dark .column.is-offset-one-fifth-tablet {\n        margin-left: 20%; }\n      html.theme--documenter-dark .column.is-offset-two-fifths, html.theme--documenter-dark .column.is-offset-two-fifths-tablet {\n        margin-left: 40%; }\n      html.theme--documenter-dark .column.is-offset-three-fifths, html.theme--documenter-dark .column.is-offset-three-fifths-tablet {\n        margin-left: 60%; }\n      html.theme--documenter-dark .column.is-offset-four-fifths, html.theme--documenter-dark .column.is-offset-four-fifths-tablet {\n        margin-left: 80%; }\n      html.theme--documenter-dark .column.is-0, html.theme--documenter-dark .column.is-0-tablet {\n        flex: none;\n        width: 0%; }\n      html.theme--documenter-dark .column.is-offset-0, html.theme--documenter-dark .column.is-offset-0-tablet {\n        margin-left: 0%; }\n      html.theme--documenter-dark .column.is-1, html.theme--documenter-dark .column.is-1-tablet {\n        flex: none;\n        width: 8.33333%; }\n      html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet {\n        margin-left: 8.33333%; }\n      html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet {\n        flex: none;\n        width: 16.66667%; }\n      html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet {\n        margin-left: 16.66667%; }\n      html.theme--documenter-dark .column.is-3, html.theme--documenter-dark .column.is-3-tablet {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-offset-3, html.theme--documenter-dark .column.is-offset-3-tablet {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-4, html.theme--documenter-dark .column.is-4-tablet {\n        flex: none;\n        width: 33.33333%; }\n      html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet {\n        margin-left: 33.33333%; }\n      html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet {\n        flex: none;\n        width: 41.66667%; }\n      html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet {\n        margin-left: 41.66667%; }\n      html.theme--documenter-dark .column.is-6, html.theme--documenter-dark .column.is-6-tablet {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-offset-6, html.theme--documenter-dark .column.is-offset-6-tablet {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-7, html.theme--documenter-dark .column.is-7-tablet {\n        flex: none;\n        width: 58.33333%; }\n      html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet {\n        margin-left: 58.33333%; }\n      html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet {\n        flex: none;\n        width: 66.66667%; }\n      html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet {\n        margin-left: 66.66667%; }\n      html.theme--documenter-dark .column.is-9, html.theme--documenter-dark .column.is-9-tablet {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-offset-9, html.theme--documenter-dark .column.is-offset-9-tablet {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-10, html.theme--documenter-dark .column.is-10-tablet {\n        flex: none;\n        width: 83.33333%; }\n      html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet {\n        margin-left: 83.33333%; }\n      html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet {\n        flex: none;\n        width: 91.66667%; }\n      html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet {\n        margin-left: 91.66667%; }\n      html.theme--documenter-dark .column.is-12, html.theme--documenter-dark .column.is-12-tablet {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-offset-12, html.theme--documenter-dark .column.is-offset-12-tablet {\n        margin-left: 100%; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .column.is-narrow-touch {\n        flex: none; }\n      html.theme--documenter-dark .column.is-full-touch {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-three-quarters-touch {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-two-thirds-touch {\n        flex: none;\n        width: 66.6666%; }\n      html.theme--documenter-dark .column.is-half-touch {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-one-third-touch {\n        flex: none;\n        width: 33.3333%; }\n      html.theme--documenter-dark .column.is-one-quarter-touch {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-one-fifth-touch {\n        flex: none;\n        width: 20%; }\n      html.theme--documenter-dark .column.is-two-fifths-touch {\n        flex: none;\n        width: 40%; }\n      html.theme--documenter-dark .column.is-three-fifths-touch {\n        flex: none;\n        width: 60%; }\n      html.theme--documenter-dark .column.is-four-fifths-touch {\n        flex: none;\n        width: 80%; }\n      html.theme--documenter-dark .column.is-offset-three-quarters-touch {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-offset-two-thirds-touch {\n        margin-left: 66.6666%; }\n      html.theme--documenter-dark .column.is-offset-half-touch {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-offset-one-third-touch {\n        margin-left: 33.3333%; }\n      html.theme--documenter-dark .column.is-offset-one-quarter-touch {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-offset-one-fifth-touch {\n        margin-left: 20%; }\n      html.theme--documenter-dark .column.is-offset-two-fifths-touch {\n        margin-left: 40%; }\n      html.theme--documenter-dark .column.is-offset-three-fifths-touch {\n        margin-left: 60%; }\n      html.theme--documenter-dark .column.is-offset-four-fifths-touch {\n        margin-left: 80%; }\n      html.theme--documenter-dark .column.is-0-touch {\n        flex: none;\n        width: 0%; }\n      html.theme--documenter-dark .column.is-offset-0-touch {\n        margin-left: 0%; }\n      html.theme--documenter-dark .column.is-1-touch {\n        flex: none;\n        width: 8.33333%; }\n      html.theme--documenter-dark .column.is-offset-1-touch {\n        margin-left: 8.33333%; }\n      html.theme--documenter-dark .column.is-2-touch {\n        flex: none;\n        width: 16.66667%; }\n      html.theme--documenter-dark .column.is-offset-2-touch {\n        margin-left: 16.66667%; }\n      html.theme--documenter-dark .column.is-3-touch {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-offset-3-touch {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-4-touch {\n        flex: none;\n        width: 33.33333%; }\n      html.theme--documenter-dark .column.is-offset-4-touch {\n        margin-left: 33.33333%; }\n      html.theme--documenter-dark .column.is-5-touch {\n        flex: none;\n        width: 41.66667%; }\n      html.theme--documenter-dark .column.is-offset-5-touch {\n        margin-left: 41.66667%; }\n      html.theme--documenter-dark .column.is-6-touch {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-offset-6-touch {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-7-touch {\n        flex: none;\n        width: 58.33333%; }\n      html.theme--documenter-dark .column.is-offset-7-touch {\n        margin-left: 58.33333%; }\n      html.theme--documenter-dark .column.is-8-touch {\n        flex: none;\n        width: 66.66667%; }\n      html.theme--documenter-dark .column.is-offset-8-touch {\n        margin-left: 66.66667%; }\n      html.theme--documenter-dark .column.is-9-touch {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-offset-9-touch {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-10-touch {\n        flex: none;\n        width: 83.33333%; }\n      html.theme--documenter-dark .column.is-offset-10-touch {\n        margin-left: 83.33333%; }\n      html.theme--documenter-dark .column.is-11-touch {\n        flex: none;\n        width: 91.66667%; }\n      html.theme--documenter-dark .column.is-offset-11-touch {\n        margin-left: 91.66667%; }\n      html.theme--documenter-dark .column.is-12-touch {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-offset-12-touch {\n        margin-left: 100%; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .column.is-narrow-desktop {\n        flex: none; }\n      html.theme--documenter-dark .column.is-full-desktop {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-three-quarters-desktop {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-two-thirds-desktop {\n        flex: none;\n        width: 66.6666%; }\n      html.theme--documenter-dark .column.is-half-desktop {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-one-third-desktop {\n        flex: none;\n        width: 33.3333%; }\n      html.theme--documenter-dark .column.is-one-quarter-desktop {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-one-fifth-desktop {\n        flex: none;\n        width: 20%; }\n      html.theme--documenter-dark .column.is-two-fifths-desktop {\n        flex: none;\n        width: 40%; }\n      html.theme--documenter-dark .column.is-three-fifths-desktop {\n        flex: none;\n        width: 60%; }\n      html.theme--documenter-dark .column.is-four-fifths-desktop {\n        flex: none;\n        width: 80%; }\n      html.theme--documenter-dark .column.is-offset-three-quarters-desktop {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-offset-two-thirds-desktop {\n        margin-left: 66.6666%; }\n      html.theme--documenter-dark .column.is-offset-half-desktop {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-offset-one-third-desktop {\n        margin-left: 33.3333%; }\n      html.theme--documenter-dark .column.is-offset-one-quarter-desktop {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-offset-one-fifth-desktop {\n        margin-left: 20%; }\n      html.theme--documenter-dark .column.is-offset-two-fifths-desktop {\n        margin-left: 40%; }\n      html.theme--documenter-dark .column.is-offset-three-fifths-desktop {\n        margin-left: 60%; }\n      html.theme--documenter-dark .column.is-offset-four-fifths-desktop {\n        margin-left: 80%; }\n      html.theme--documenter-dark .column.is-0-desktop {\n        flex: none;\n        width: 0%; }\n      html.theme--documenter-dark .column.is-offset-0-desktop {\n        margin-left: 0%; }\n      html.theme--documenter-dark .column.is-1-desktop {\n        flex: none;\n        width: 8.33333%; }\n      html.theme--documenter-dark .column.is-offset-1-desktop {\n        margin-left: 8.33333%; }\n      html.theme--documenter-dark .column.is-2-desktop {\n        flex: none;\n        width: 16.66667%; }\n      html.theme--documenter-dark .column.is-offset-2-desktop {\n        margin-left: 16.66667%; }\n      html.theme--documenter-dark .column.is-3-desktop {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-offset-3-desktop {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-4-desktop {\n        flex: none;\n        width: 33.33333%; }\n      html.theme--documenter-dark .column.is-offset-4-desktop {\n        margin-left: 33.33333%; }\n      html.theme--documenter-dark .column.is-5-desktop {\n        flex: none;\n        width: 41.66667%; }\n      html.theme--documenter-dark .column.is-offset-5-desktop {\n        margin-left: 41.66667%; }\n      html.theme--documenter-dark .column.is-6-desktop {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-offset-6-desktop {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-7-desktop {\n        flex: none;\n        width: 58.33333%; }\n      html.theme--documenter-dark .column.is-offset-7-desktop {\n        margin-left: 58.33333%; }\n      html.theme--documenter-dark .column.is-8-desktop {\n        flex: none;\n        width: 66.66667%; }\n      html.theme--documenter-dark .column.is-offset-8-desktop {\n        margin-left: 66.66667%; }\n      html.theme--documenter-dark .column.is-9-desktop {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-offset-9-desktop {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-10-desktop {\n        flex: none;\n        width: 83.33333%; }\n      html.theme--documenter-dark .column.is-offset-10-desktop {\n        margin-left: 83.33333%; }\n      html.theme--documenter-dark .column.is-11-desktop {\n        flex: none;\n        width: 91.66667%; }\n      html.theme--documenter-dark .column.is-offset-11-desktop {\n        margin-left: 91.66667%; }\n      html.theme--documenter-dark .column.is-12-desktop {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-offset-12-desktop {\n        margin-left: 100%; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .column.is-narrow-widescreen {\n        flex: none; }\n      html.theme--documenter-dark .column.is-full-widescreen {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-three-quarters-widescreen {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-two-thirds-widescreen {\n        flex: none;\n        width: 66.6666%; }\n      html.theme--documenter-dark .column.is-half-widescreen {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-one-third-widescreen {\n        flex: none;\n        width: 33.3333%; }\n      html.theme--documenter-dark .column.is-one-quarter-widescreen {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-one-fifth-widescreen {\n        flex: none;\n        width: 20%; }\n      html.theme--documenter-dark .column.is-two-fifths-widescreen {\n        flex: none;\n        width: 40%; }\n      html.theme--documenter-dark .column.is-three-fifths-widescreen {\n        flex: none;\n        width: 60%; }\n      html.theme--documenter-dark .column.is-four-fifths-widescreen {\n        flex: none;\n        width: 80%; }\n      html.theme--documenter-dark .column.is-offset-three-quarters-widescreen {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-offset-two-thirds-widescreen {\n        margin-left: 66.6666%; }\n      html.theme--documenter-dark .column.is-offset-half-widescreen {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-offset-one-third-widescreen {\n        margin-left: 33.3333%; }\n      html.theme--documenter-dark .column.is-offset-one-quarter-widescreen {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-offset-one-fifth-widescreen {\n        margin-left: 20%; }\n      html.theme--documenter-dark .column.is-offset-two-fifths-widescreen {\n        margin-left: 40%; }\n      html.theme--documenter-dark .column.is-offset-three-fifths-widescreen {\n        margin-left: 60%; }\n      html.theme--documenter-dark .column.is-offset-four-fifths-widescreen {\n        margin-left: 80%; }\n      html.theme--documenter-dark .column.is-0-widescreen {\n        flex: none;\n        width: 0%; }\n      html.theme--documenter-dark .column.is-offset-0-widescreen {\n        margin-left: 0%; }\n      html.theme--documenter-dark .column.is-1-widescreen {\n        flex: none;\n        width: 8.33333%; }\n      html.theme--documenter-dark .column.is-offset-1-widescreen {\n        margin-left: 8.33333%; }\n      html.theme--documenter-dark .column.is-2-widescreen {\n        flex: none;\n        width: 16.66667%; }\n      html.theme--documenter-dark .column.is-offset-2-widescreen {\n        margin-left: 16.66667%; }\n      html.theme--documenter-dark .column.is-3-widescreen {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-offset-3-widescreen {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-4-widescreen {\n        flex: none;\n        width: 33.33333%; }\n      html.theme--documenter-dark .column.is-offset-4-widescreen {\n        margin-left: 33.33333%; }\n      html.theme--documenter-dark .column.is-5-widescreen {\n        flex: none;\n        width: 41.66667%; }\n      html.theme--documenter-dark .column.is-offset-5-widescreen {\n        margin-left: 41.66667%; }\n      html.theme--documenter-dark .column.is-6-widescreen {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-offset-6-widescreen {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-7-widescreen {\n        flex: none;\n        width: 58.33333%; }\n      html.theme--documenter-dark .column.is-offset-7-widescreen {\n        margin-left: 58.33333%; }\n      html.theme--documenter-dark .column.is-8-widescreen {\n        flex: none;\n        width: 66.66667%; }\n      html.theme--documenter-dark .column.is-offset-8-widescreen {\n        margin-left: 66.66667%; }\n      html.theme--documenter-dark .column.is-9-widescreen {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-offset-9-widescreen {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-10-widescreen {\n        flex: none;\n        width: 83.33333%; }\n      html.theme--documenter-dark .column.is-offset-10-widescreen {\n        margin-left: 83.33333%; }\n      html.theme--documenter-dark .column.is-11-widescreen {\n        flex: none;\n        width: 91.66667%; }\n      html.theme--documenter-dark .column.is-offset-11-widescreen {\n        margin-left: 91.66667%; }\n      html.theme--documenter-dark .column.is-12-widescreen {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-offset-12-widescreen {\n        margin-left: 100%; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .column.is-narrow-fullhd {\n        flex: none; }\n      html.theme--documenter-dark .column.is-full-fullhd {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-three-quarters-fullhd {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-two-thirds-fullhd {\n        flex: none;\n        width: 66.6666%; }\n      html.theme--documenter-dark .column.is-half-fullhd {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-one-third-fullhd {\n        flex: none;\n        width: 33.3333%; }\n      html.theme--documenter-dark .column.is-one-quarter-fullhd {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-one-fifth-fullhd {\n        flex: none;\n        width: 20%; }\n      html.theme--documenter-dark .column.is-two-fifths-fullhd {\n        flex: none;\n        width: 40%; }\n      html.theme--documenter-dark .column.is-three-fifths-fullhd {\n        flex: none;\n        width: 60%; }\n      html.theme--documenter-dark .column.is-four-fifths-fullhd {\n        flex: none;\n        width: 80%; }\n      html.theme--documenter-dark .column.is-offset-three-quarters-fullhd {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-offset-two-thirds-fullhd {\n        margin-left: 66.6666%; }\n      html.theme--documenter-dark .column.is-offset-half-fullhd {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-offset-one-third-fullhd {\n        margin-left: 33.3333%; }\n      html.theme--documenter-dark .column.is-offset-one-quarter-fullhd {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-offset-one-fifth-fullhd {\n        margin-left: 20%; }\n      html.theme--documenter-dark .column.is-offset-two-fifths-fullhd {\n        margin-left: 40%; }\n      html.theme--documenter-dark .column.is-offset-three-fifths-fullhd {\n        margin-left: 60%; }\n      html.theme--documenter-dark .column.is-offset-four-fifths-fullhd {\n        margin-left: 80%; }\n      html.theme--documenter-dark .column.is-0-fullhd {\n        flex: none;\n        width: 0%; }\n      html.theme--documenter-dark .column.is-offset-0-fullhd {\n        margin-left: 0%; }\n      html.theme--documenter-dark .column.is-1-fullhd {\n        flex: none;\n        width: 8.33333%; }\n      html.theme--documenter-dark .column.is-offset-1-fullhd {\n        margin-left: 8.33333%; }\n      html.theme--documenter-dark .column.is-2-fullhd {\n        flex: none;\n        width: 16.66667%; }\n      html.theme--documenter-dark .column.is-offset-2-fullhd {\n        margin-left: 16.66667%; }\n      html.theme--documenter-dark .column.is-3-fullhd {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .column.is-offset-3-fullhd {\n        margin-left: 25%; }\n      html.theme--documenter-dark .column.is-4-fullhd {\n        flex: none;\n        width: 33.33333%; }\n      html.theme--documenter-dark .column.is-offset-4-fullhd {\n        margin-left: 33.33333%; }\n      html.theme--documenter-dark .column.is-5-fullhd {\n        flex: none;\n        width: 41.66667%; }\n      html.theme--documenter-dark .column.is-offset-5-fullhd {\n        margin-left: 41.66667%; }\n      html.theme--documenter-dark .column.is-6-fullhd {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .column.is-offset-6-fullhd {\n        margin-left: 50%; }\n      html.theme--documenter-dark .column.is-7-fullhd {\n        flex: none;\n        width: 58.33333%; }\n      html.theme--documenter-dark .column.is-offset-7-fullhd {\n        margin-left: 58.33333%; }\n      html.theme--documenter-dark .column.is-8-fullhd {\n        flex: none;\n        width: 66.66667%; }\n      html.theme--documenter-dark .column.is-offset-8-fullhd {\n        margin-left: 66.66667%; }\n      html.theme--documenter-dark .column.is-9-fullhd {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .column.is-offset-9-fullhd {\n        margin-left: 75%; }\n      html.theme--documenter-dark .column.is-10-fullhd {\n        flex: none;\n        width: 83.33333%; }\n      html.theme--documenter-dark .column.is-offset-10-fullhd {\n        margin-left: 83.33333%; }\n      html.theme--documenter-dark .column.is-11-fullhd {\n        flex: none;\n        width: 91.66667%; }\n      html.theme--documenter-dark .column.is-offset-11-fullhd {\n        margin-left: 91.66667%; }\n      html.theme--documenter-dark .column.is-12-fullhd {\n        flex: none;\n        width: 100%; }\n      html.theme--documenter-dark .column.is-offset-12-fullhd {\n        margin-left: 100%; } }\n  html.theme--documenter-dark .columns {\n    margin-left: -0.75rem;\n    margin-right: -0.75rem;\n    margin-top: -0.75rem; }\n    html.theme--documenter-dark .columns:last-child {\n      margin-bottom: -0.75rem; }\n    html.theme--documenter-dark .columns:not(:last-child) {\n      margin-bottom: calc(1.5rem - 0.75rem); }\n    html.theme--documenter-dark .columns.is-centered {\n      justify-content: center; }\n    html.theme--documenter-dark .columns.is-gapless {\n      margin-left: 0;\n      margin-right: 0;\n      margin-top: 0; }\n      html.theme--documenter-dark .columns.is-gapless > .column {\n        margin: 0;\n        padding: 0 !important; }\n      html.theme--documenter-dark .columns.is-gapless:not(:last-child) {\n        margin-bottom: 1.5rem; }\n      html.theme--documenter-dark .columns.is-gapless:last-child {\n        margin-bottom: 0; }\n    html.theme--documenter-dark .columns.is-mobile {\n      display: flex; }\n    html.theme--documenter-dark .columns.is-multiline {\n      flex-wrap: wrap; }\n    html.theme--documenter-dark .columns.is-vcentered {\n      align-items: center; }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns:not(.is-desktop) {\n        display: flex; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-desktop {\n        display: flex; } }\n  html.theme--documenter-dark .columns.is-variable {\n    --columnGap: 0.75rem;\n    margin-left: calc(-1 * var(--columnGap));\n    margin-right: calc(-1 * var(--columnGap)); }\n    html.theme--documenter-dark .columns.is-variable .column {\n      padding-left: var(--columnGap);\n      padding-right: var(--columnGap); }\n    html.theme--documenter-dark .columns.is-variable.is-0 {\n      --columnGap: 0rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .columns.is-variable.is-0-mobile {\n        --columnGap: 0rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns.is-variable.is-0-tablet {\n        --columnGap: 0rem; } }\n    @media screen and (min-width: 769px) and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-0-tablet-only {\n        --columnGap: 0rem; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-0-touch {\n        --columnGap: 0rem; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-variable.is-0-desktop {\n        --columnGap: 0rem; } }\n    @media screen and (min-width: 1056px) and (max-width: 1215px) {\n      html.theme--documenter-dark .columns.is-variable.is-0-desktop-only {\n        --columnGap: 0rem; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .columns.is-variable.is-0-widescreen {\n        --columnGap: 0rem; } }\n    @media screen and (min-width: 1216px) and (max-width: 1407px) {\n      html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only {\n        --columnGap: 0rem; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .columns.is-variable.is-0-fullhd {\n        --columnGap: 0rem; } }\n    html.theme--documenter-dark .columns.is-variable.is-1 {\n      --columnGap: 0.25rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .columns.is-variable.is-1-mobile {\n        --columnGap: 0.25rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns.is-variable.is-1-tablet {\n        --columnGap: 0.25rem; } }\n    @media screen and (min-width: 769px) and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-1-tablet-only {\n        --columnGap: 0.25rem; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-1-touch {\n        --columnGap: 0.25rem; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-variable.is-1-desktop {\n        --columnGap: 0.25rem; } }\n    @media screen and (min-width: 1056px) and (max-width: 1215px) {\n      html.theme--documenter-dark .columns.is-variable.is-1-desktop-only {\n        --columnGap: 0.25rem; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .columns.is-variable.is-1-widescreen {\n        --columnGap: 0.25rem; } }\n    @media screen and (min-width: 1216px) and (max-width: 1407px) {\n      html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only {\n        --columnGap: 0.25rem; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .columns.is-variable.is-1-fullhd {\n        --columnGap: 0.25rem; } }\n    html.theme--documenter-dark .columns.is-variable.is-2 {\n      --columnGap: 0.5rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .columns.is-variable.is-2-mobile {\n        --columnGap: 0.5rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns.is-variable.is-2-tablet {\n        --columnGap: 0.5rem; } }\n    @media screen and (min-width: 769px) and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-2-tablet-only {\n        --columnGap: 0.5rem; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-2-touch {\n        --columnGap: 0.5rem; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-variable.is-2-desktop {\n        --columnGap: 0.5rem; } }\n    @media screen and (min-width: 1056px) and (max-width: 1215px) {\n      html.theme--documenter-dark .columns.is-variable.is-2-desktop-only {\n        --columnGap: 0.5rem; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .columns.is-variable.is-2-widescreen {\n        --columnGap: 0.5rem; } }\n    @media screen and (min-width: 1216px) and (max-width: 1407px) {\n      html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only {\n        --columnGap: 0.5rem; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .columns.is-variable.is-2-fullhd {\n        --columnGap: 0.5rem; } }\n    html.theme--documenter-dark .columns.is-variable.is-3 {\n      --columnGap: 0.75rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .columns.is-variable.is-3-mobile {\n        --columnGap: 0.75rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns.is-variable.is-3-tablet {\n        --columnGap: 0.75rem; } }\n    @media screen and (min-width: 769px) and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-3-tablet-only {\n        --columnGap: 0.75rem; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-3-touch {\n        --columnGap: 0.75rem; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-variable.is-3-desktop {\n        --columnGap: 0.75rem; } }\n    @media screen and (min-width: 1056px) and (max-width: 1215px) {\n      html.theme--documenter-dark .columns.is-variable.is-3-desktop-only {\n        --columnGap: 0.75rem; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .columns.is-variable.is-3-widescreen {\n        --columnGap: 0.75rem; } }\n    @media screen and (min-width: 1216px) and (max-width: 1407px) {\n      html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only {\n        --columnGap: 0.75rem; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .columns.is-variable.is-3-fullhd {\n        --columnGap: 0.75rem; } }\n    html.theme--documenter-dark .columns.is-variable.is-4 {\n      --columnGap: 1rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .columns.is-variable.is-4-mobile {\n        --columnGap: 1rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns.is-variable.is-4-tablet {\n        --columnGap: 1rem; } }\n    @media screen and (min-width: 769px) and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-4-tablet-only {\n        --columnGap: 1rem; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-4-touch {\n        --columnGap: 1rem; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-variable.is-4-desktop {\n        --columnGap: 1rem; } }\n    @media screen and (min-width: 1056px) and (max-width: 1215px) {\n      html.theme--documenter-dark .columns.is-variable.is-4-desktop-only {\n        --columnGap: 1rem; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .columns.is-variable.is-4-widescreen {\n        --columnGap: 1rem; } }\n    @media screen and (min-width: 1216px) and (max-width: 1407px) {\n      html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only {\n        --columnGap: 1rem; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .columns.is-variable.is-4-fullhd {\n        --columnGap: 1rem; } }\n    html.theme--documenter-dark .columns.is-variable.is-5 {\n      --columnGap: 1.25rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .columns.is-variable.is-5-mobile {\n        --columnGap: 1.25rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns.is-variable.is-5-tablet {\n        --columnGap: 1.25rem; } }\n    @media screen and (min-width: 769px) and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-5-tablet-only {\n        --columnGap: 1.25rem; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-5-touch {\n        --columnGap: 1.25rem; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-variable.is-5-desktop {\n        --columnGap: 1.25rem; } }\n    @media screen and (min-width: 1056px) and (max-width: 1215px) {\n      html.theme--documenter-dark .columns.is-variable.is-5-desktop-only {\n        --columnGap: 1.25rem; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .columns.is-variable.is-5-widescreen {\n        --columnGap: 1.25rem; } }\n    @media screen and (min-width: 1216px) and (max-width: 1407px) {\n      html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only {\n        --columnGap: 1.25rem; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .columns.is-variable.is-5-fullhd {\n        --columnGap: 1.25rem; } }\n    html.theme--documenter-dark .columns.is-variable.is-6 {\n      --columnGap: 1.5rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .columns.is-variable.is-6-mobile {\n        --columnGap: 1.5rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns.is-variable.is-6-tablet {\n        --columnGap: 1.5rem; } }\n    @media screen and (min-width: 769px) and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-6-tablet-only {\n        --columnGap: 1.5rem; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-6-touch {\n        --columnGap: 1.5rem; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-variable.is-6-desktop {\n        --columnGap: 1.5rem; } }\n    @media screen and (min-width: 1056px) and (max-width: 1215px) {\n      html.theme--documenter-dark .columns.is-variable.is-6-desktop-only {\n        --columnGap: 1.5rem; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .columns.is-variable.is-6-widescreen {\n        --columnGap: 1.5rem; } }\n    @media screen and (min-width: 1216px) and (max-width: 1407px) {\n      html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only {\n        --columnGap: 1.5rem; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .columns.is-variable.is-6-fullhd {\n        --columnGap: 1.5rem; } }\n    html.theme--documenter-dark .columns.is-variable.is-7 {\n      --columnGap: 1.75rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .columns.is-variable.is-7-mobile {\n        --columnGap: 1.75rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns.is-variable.is-7-tablet {\n        --columnGap: 1.75rem; } }\n    @media screen and (min-width: 769px) and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-7-tablet-only {\n        --columnGap: 1.75rem; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-7-touch {\n        --columnGap: 1.75rem; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-variable.is-7-desktop {\n        --columnGap: 1.75rem; } }\n    @media screen and (min-width: 1056px) and (max-width: 1215px) {\n      html.theme--documenter-dark .columns.is-variable.is-7-desktop-only {\n        --columnGap: 1.75rem; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .columns.is-variable.is-7-widescreen {\n        --columnGap: 1.75rem; } }\n    @media screen and (min-width: 1216px) and (max-width: 1407px) {\n      html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only {\n        --columnGap: 1.75rem; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .columns.is-variable.is-7-fullhd {\n        --columnGap: 1.75rem; } }\n    html.theme--documenter-dark .columns.is-variable.is-8 {\n      --columnGap: 2rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .columns.is-variable.is-8-mobile {\n        --columnGap: 2rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .columns.is-variable.is-8-tablet {\n        --columnGap: 2rem; } }\n    @media screen and (min-width: 769px) and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-8-tablet-only {\n        --columnGap: 2rem; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark .columns.is-variable.is-8-touch {\n        --columnGap: 2rem; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .columns.is-variable.is-8-desktop {\n        --columnGap: 2rem; } }\n    @media screen and (min-width: 1056px) and (max-width: 1215px) {\n      html.theme--documenter-dark .columns.is-variable.is-8-desktop-only {\n        --columnGap: 2rem; } }\n    @media screen and (min-width: 1216px) {\n      html.theme--documenter-dark .columns.is-variable.is-8-widescreen {\n        --columnGap: 2rem; } }\n    @media screen and (min-width: 1216px) and (max-width: 1407px) {\n      html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only {\n        --columnGap: 2rem; } }\n    @media screen and (min-width: 1408px) {\n      html.theme--documenter-dark .columns.is-variable.is-8-fullhd {\n        --columnGap: 2rem; } }\n  html.theme--documenter-dark .tile {\n    align-items: stretch;\n    display: block;\n    flex-basis: 0;\n    flex-grow: 1;\n    flex-shrink: 1;\n    min-height: min-content; }\n    html.theme--documenter-dark .tile.is-ancestor {\n      margin-left: -0.75rem;\n      margin-right: -0.75rem;\n      margin-top: -0.75rem; }\n      html.theme--documenter-dark .tile.is-ancestor:last-child {\n        margin-bottom: -0.75rem; }\n      html.theme--documenter-dark .tile.is-ancestor:not(:last-child) {\n        margin-bottom: 0.75rem; }\n    html.theme--documenter-dark .tile.is-child {\n      margin: 0 !important; }\n    html.theme--documenter-dark .tile.is-parent {\n      padding: 0.75rem; }\n    html.theme--documenter-dark .tile.is-vertical {\n      flex-direction: column; }\n      html.theme--documenter-dark .tile.is-vertical > .tile.is-child:not(:last-child) {\n        margin-bottom: 1.5rem !important; }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .tile:not(.is-child) {\n        display: flex; }\n      html.theme--documenter-dark .tile.is-1 {\n        flex: none;\n        width: 8.33333%; }\n      html.theme--documenter-dark .tile.is-2 {\n        flex: none;\n        width: 16.66667%; }\n      html.theme--documenter-dark .tile.is-3 {\n        flex: none;\n        width: 25%; }\n      html.theme--documenter-dark .tile.is-4 {\n        flex: none;\n        width: 33.33333%; }\n      html.theme--documenter-dark .tile.is-5 {\n        flex: none;\n        width: 41.66667%; }\n      html.theme--documenter-dark .tile.is-6 {\n        flex: none;\n        width: 50%; }\n      html.theme--documenter-dark .tile.is-7 {\n        flex: none;\n        width: 58.33333%; }\n      html.theme--documenter-dark .tile.is-8 {\n        flex: none;\n        width: 66.66667%; }\n      html.theme--documenter-dark .tile.is-9 {\n        flex: none;\n        width: 75%; }\n      html.theme--documenter-dark .tile.is-10 {\n        flex: none;\n        width: 83.33333%; }\n      html.theme--documenter-dark .tile.is-11 {\n        flex: none;\n        width: 91.66667%; }\n      html.theme--documenter-dark .tile.is-12 {\n        flex: none;\n        width: 100%; } }\n  html.theme--documenter-dark .hero {\n    align-items: stretch;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-between; }\n    html.theme--documenter-dark .hero .navbar {\n      background: none; }\n    html.theme--documenter-dark .hero .tabs ul {\n      border-bottom: none; }\n    html.theme--documenter-dark .hero.is-white {\n      background-color: white;\n      color: #0a0a0a; }\n      html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-white strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-white .title {\n        color: #0a0a0a; }\n      html.theme--documenter-dark .hero.is-white .subtitle {\n        color: rgba(10, 10, 10, 0.9); }\n        html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-white .subtitle strong {\n          color: #0a0a0a; }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-white .navbar-menu {\n          background-color: white; } }\n      html.theme--documenter-dark .hero.is-white .navbar-item,\n      html.theme--documenter-dark .hero.is-white .navbar-link {\n        color: rgba(10, 10, 10, 0.7); }\n      html.theme--documenter-dark .hero.is-white a.navbar-item:hover, html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-white .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-white .navbar-link.is-active {\n        background-color: #f2f2f2;\n        color: #0a0a0a; }\n      html.theme--documenter-dark .hero.is-white .tabs a {\n        color: #0a0a0a;\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-white .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-white .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-white .tabs.is-boxed a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a {\n        color: #0a0a0a; }\n        html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover {\n        background-color: #0a0a0a;\n        border-color: #0a0a0a;\n        color: white; }\n      html.theme--documenter-dark .hero.is-white.is-bold {\n        background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu {\n            background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%); } }\n    html.theme--documenter-dark .hero.is-black {\n      background-color: #0a0a0a;\n      color: white; }\n      html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-black strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-black .title {\n        color: white; }\n      html.theme--documenter-dark .hero.is-black .subtitle {\n        color: rgba(255, 255, 255, 0.9); }\n        html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-black .subtitle strong {\n          color: white; }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-black .navbar-menu {\n          background-color: #0a0a0a; } }\n      html.theme--documenter-dark .hero.is-black .navbar-item,\n      html.theme--documenter-dark .hero.is-black .navbar-link {\n        color: rgba(255, 255, 255, 0.7); }\n      html.theme--documenter-dark .hero.is-black a.navbar-item:hover, html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-black .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-black .navbar-link.is-active {\n        background-color: black;\n        color: white; }\n      html.theme--documenter-dark .hero.is-black .tabs a {\n        color: white;\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-black .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-black .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-black .tabs.is-boxed a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a {\n        color: white; }\n        html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover {\n        background-color: white;\n        border-color: white;\n        color: #0a0a0a; }\n      html.theme--documenter-dark .hero.is-black.is-bold {\n        background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu {\n            background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%); } }\n    html.theme--documenter-dark .hero.is-light {\n      background-color: whitesmoke;\n      color: #363636; }\n      html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-light strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-light .title {\n        color: #363636; }\n      html.theme--documenter-dark .hero.is-light .subtitle {\n        color: rgba(54, 54, 54, 0.9); }\n        html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-light .subtitle strong {\n          color: #363636; }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-light .navbar-menu {\n          background-color: whitesmoke; } }\n      html.theme--documenter-dark .hero.is-light .navbar-item,\n      html.theme--documenter-dark .hero.is-light .navbar-link {\n        color: rgba(54, 54, 54, 0.7); }\n      html.theme--documenter-dark .hero.is-light a.navbar-item:hover, html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-light .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-light .navbar-link.is-active {\n        background-color: #e8e8e8;\n        color: #363636; }\n      html.theme--documenter-dark .hero.is-light .tabs a {\n        color: #363636;\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-light .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-light .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-light .tabs.is-boxed a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a {\n        color: #363636; }\n        html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover {\n        background-color: #363636;\n        border-color: #363636;\n        color: whitesmoke; }\n      html.theme--documenter-dark .hero.is-light.is-bold {\n        background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu {\n            background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%); } }\n    html.theme--documenter-dark .hero.is-dark, html.theme--documenter-dark .content kbd.hero {\n      background-color: #363636;\n      color: whitesmoke; }\n      html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-dark strong,\n      html.theme--documenter-dark .content kbd.hero strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-dark .title, html.theme--documenter-dark .content kbd.hero .title {\n        color: whitesmoke; }\n      html.theme--documenter-dark .hero.is-dark .subtitle, html.theme--documenter-dark .content kbd.hero .subtitle {\n        color: rgba(245, 245, 245, 0.9); }\n        html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button), html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-dark .subtitle strong,\n        html.theme--documenter-dark .content kbd.hero .subtitle strong {\n          color: whitesmoke; }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-dark .navbar-menu, html.theme--documenter-dark .content kbd.hero .navbar-menu {\n          background-color: #363636; } }\n      html.theme--documenter-dark .hero.is-dark .navbar-item, html.theme--documenter-dark .content kbd.hero .navbar-item,\n      html.theme--documenter-dark .hero.is-dark .navbar-link,\n      html.theme--documenter-dark .content kbd.hero .navbar-link {\n        color: rgba(245, 245, 245, 0.7); }\n      html.theme--documenter-dark .hero.is-dark a.navbar-item:hover, html.theme--documenter-dark .content kbd.hero a.navbar-item:hover, html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active, html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-dark .navbar-link:hover,\n      html.theme--documenter-dark .content kbd.hero .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,\n      html.theme--documenter-dark .content kbd.hero .navbar-link.is-active {\n        background-color: #292929;\n        color: whitesmoke; }\n      html.theme--documenter-dark .hero.is-dark .tabs a, html.theme--documenter-dark .content kbd.hero .tabs a {\n        color: whitesmoke;\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-dark .tabs a:hover, html.theme--documenter-dark .content kbd.hero .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-dark .tabs li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a {\n        color: whitesmoke; }\n        html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a:hover {\n        background-color: whitesmoke;\n        border-color: whitesmoke;\n        color: #363636; }\n      html.theme--documenter-dark .hero.is-dark.is-bold, html.theme--documenter-dark .content kbd.hero.is-bold {\n        background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu, html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu {\n            background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%); } }\n    html.theme--documenter-dark .hero.is-primary, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink {\n      background-color: #4eb5de;\n      color: #fff; }\n      html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-primary strong,\n      html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-primary .title, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .title {\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-primary .subtitle, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle {\n        color: rgba(255, 255, 255, 0.9); }\n        html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button), html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-primary .subtitle strong,\n        html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .subtitle strong {\n          color: #fff; }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-primary .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-menu {\n          background-color: #4eb5de; } }\n      html.theme--documenter-dark .hero.is-primary .navbar-item, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-item,\n      html.theme--documenter-dark .hero.is-primary .navbar-link,\n      html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link {\n        color: rgba(255, 255, 255, 0.7); }\n      html.theme--documenter-dark .hero.is-primary a.navbar-item:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item:hover, html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-primary .navbar-link:hover,\n      html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,\n      html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .navbar-link.is-active {\n        background-color: #39acda;\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-primary .tabs a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a {\n        color: #fff;\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-primary .tabs a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-primary .tabs li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a {\n        color: #fff; }\n        html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover {\n        background-color: #fff;\n        border-color: #fff;\n        color: #4eb5de; }\n      html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink {\n        background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu {\n            background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } }\n    html.theme--documenter-dark .hero.is-link {\n      background-color: #e37733;\n      color: #fff; }\n      html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-link strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-link .title {\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-link .subtitle {\n        color: rgba(255, 255, 255, 0.9); }\n        html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-link .subtitle strong {\n          color: #fff; }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-link .navbar-menu {\n          background-color: #e37733; } }\n      html.theme--documenter-dark .hero.is-link .navbar-item,\n      html.theme--documenter-dark .hero.is-link .navbar-link {\n        color: rgba(255, 255, 255, 0.7); }\n      html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-link .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-link .navbar-link.is-active {\n        background-color: #dd681f;\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-link .tabs a {\n        color: #fff;\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-link .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-link .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-link .tabs.is-boxed a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a {\n        color: #fff; }\n        html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover {\n        background-color: #fff;\n        border-color: #fff;\n        color: #e37733; }\n      html.theme--documenter-dark .hero.is-link.is-bold {\n        background-image: linear-gradient(141deg, #d23b10 0%, #e37733 71%, #eba044 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu {\n            background-image: linear-gradient(141deg, #d23b10 0%, #e37733 71%, #eba044 100%); } }\n    html.theme--documenter-dark .hero.is-info {\n      background-color: #209cee;\n      color: #fff; }\n      html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-info strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-info .title {\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-info .subtitle {\n        color: rgba(255, 255, 255, 0.9); }\n        html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-info .subtitle strong {\n          color: #fff; }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-info .navbar-menu {\n          background-color: #209cee; } }\n      html.theme--documenter-dark .hero.is-info .navbar-item,\n      html.theme--documenter-dark .hero.is-info .navbar-link {\n        color: rgba(255, 255, 255, 0.7); }\n      html.theme--documenter-dark .hero.is-info a.navbar-item:hover, html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-info .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-info .navbar-link.is-active {\n        background-color: #118fe4;\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-info .tabs a {\n        color: #fff;\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-info .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-info .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-info .tabs.is-boxed a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a {\n        color: #fff; }\n        html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover {\n        background-color: #fff;\n        border-color: #fff;\n        color: #209cee; }\n      html.theme--documenter-dark .hero.is-info.is-bold {\n        background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu {\n            background-image: linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%); } }\n    html.theme--documenter-dark .hero.is-success {\n      background-color: #22c35b;\n      color: #fff; }\n      html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-success strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-success .title {\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-success .subtitle {\n        color: rgba(255, 255, 255, 0.9); }\n        html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-success .subtitle strong {\n          color: #fff; }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-success .navbar-menu {\n          background-color: #22c35b; } }\n      html.theme--documenter-dark .hero.is-success .navbar-item,\n      html.theme--documenter-dark .hero.is-success .navbar-link {\n        color: rgba(255, 255, 255, 0.7); }\n      html.theme--documenter-dark .hero.is-success a.navbar-item:hover, html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-success .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-success .navbar-link.is-active {\n        background-color: #1ead51;\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-success .tabs a {\n        color: #fff;\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-success .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-success .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-success .tabs.is-boxed a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a {\n        color: #fff; }\n        html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover {\n        background-color: #fff;\n        border-color: #fff;\n        color: #22c35b; }\n      html.theme--documenter-dark .hero.is-success.is-bold {\n        background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu {\n            background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } }\n    html.theme--documenter-dark .hero.is-warning {\n      background-color: #ffdd57;\n      color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-warning strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-warning .title {\n        color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .hero.is-warning .subtitle {\n        color: rgba(0, 0, 0, 0.9); }\n        html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-warning .subtitle strong {\n          color: rgba(0, 0, 0, 0.7); }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-warning .navbar-menu {\n          background-color: #ffdd57; } }\n      html.theme--documenter-dark .hero.is-warning .navbar-item,\n      html.theme--documenter-dark .hero.is-warning .navbar-link {\n        color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .hero.is-warning a.navbar-item:hover, html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-warning .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-warning .navbar-link.is-active {\n        background-color: #ffd83d;\n        color: rgba(0, 0, 0, 0.7); }\n      html.theme--documenter-dark .hero.is-warning .tabs a {\n        color: rgba(0, 0, 0, 0.7);\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-warning .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-warning .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a {\n        color: rgba(0, 0, 0, 0.7); }\n        html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover {\n        background-color: rgba(0, 0, 0, 0.7);\n        border-color: rgba(0, 0, 0, 0.7);\n        color: #ffdd57; }\n      html.theme--documenter-dark .hero.is-warning.is-bold {\n        background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu {\n            background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%); } }\n    html.theme--documenter-dark .hero.is-danger {\n      background-color: #da0b00;\n      color: #fff; }\n      html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),\n      html.theme--documenter-dark .hero.is-danger strong {\n        color: inherit; }\n      html.theme--documenter-dark .hero.is-danger .title {\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-danger .subtitle {\n        color: rgba(255, 255, 255, 0.9); }\n        html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),\n        html.theme--documenter-dark .hero.is-danger .subtitle strong {\n          color: #fff; }\n      @media screen and (max-width: 1055px) {\n        html.theme--documenter-dark .hero.is-danger .navbar-menu {\n          background-color: #da0b00; } }\n      html.theme--documenter-dark .hero.is-danger .navbar-item,\n      html.theme--documenter-dark .hero.is-danger .navbar-link {\n        color: rgba(255, 255, 255, 0.7); }\n      html.theme--documenter-dark .hero.is-danger a.navbar-item:hover, html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,\n      html.theme--documenter-dark .hero.is-danger .navbar-link:hover,\n      html.theme--documenter-dark .hero.is-danger .navbar-link.is-active {\n        background-color: #c10a00;\n        color: #fff; }\n      html.theme--documenter-dark .hero.is-danger .tabs a {\n        color: #fff;\n        opacity: 0.9; }\n        html.theme--documenter-dark .hero.is-danger .tabs a:hover {\n          opacity: 1; }\n      html.theme--documenter-dark .hero.is-danger .tabs li.is-active a {\n        opacity: 1; }\n      html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a {\n        color: #fff; }\n        html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover {\n          background-color: rgba(10, 10, 10, 0.1); }\n      html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover {\n        background-color: #fff;\n        border-color: #fff;\n        color: #da0b00; }\n      html.theme--documenter-dark .hero.is-danger.is-bold {\n        background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); }\n        @media screen and (max-width: 768px) {\n          html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu {\n            background-image: linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%); } }\n    html.theme--documenter-dark .hero.is-small .hero-body, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.hero .hero-body {\n      padding-bottom: 1.5rem;\n      padding-top: 1.5rem; }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .hero.is-medium .hero-body {\n        padding-bottom: 9rem;\n        padding-top: 9rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .hero.is-large .hero-body {\n        padding-bottom: 18rem;\n        padding-top: 18rem; } }\n    html.theme--documenter-dark .hero.is-halfheight .hero-body, html.theme--documenter-dark .hero.is-fullheight .hero-body, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body {\n      align-items: center;\n      display: flex; }\n      html.theme--documenter-dark .hero.is-halfheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight .hero-body > .container, html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body > .container {\n        flex-grow: 1;\n        flex-shrink: 1; }\n    html.theme--documenter-dark .hero.is-halfheight {\n      min-height: 50vh; }\n    html.theme--documenter-dark .hero.is-fullheight {\n      min-height: 100vh; }\n  html.theme--documenter-dark .hero-video {\n    overflow: hidden; }\n    html.theme--documenter-dark .hero-video video {\n      left: 50%;\n      min-height: 100%;\n      min-width: 100%;\n      position: absolute;\n      top: 50%;\n      transform: translate3d(-50%, -50%, 0); }\n    html.theme--documenter-dark .hero-video.is-transparent {\n      opacity: 0.3; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .hero-video {\n        display: none; } }\n  html.theme--documenter-dark .hero-buttons {\n    margin-top: 1.5rem; }\n    @media screen and (max-width: 768px) {\n      html.theme--documenter-dark .hero-buttons .button {\n        display: flex; }\n        html.theme--documenter-dark .hero-buttons .button:not(:last-child) {\n          margin-bottom: 0.75rem; } }\n    @media screen and (min-width: 769px), print {\n      html.theme--documenter-dark .hero-buttons {\n        display: flex;\n        justify-content: center; }\n        html.theme--documenter-dark .hero-buttons .button:not(:last-child) {\n          margin-right: 1.5rem; } }\n  html.theme--documenter-dark .hero-head,\n  html.theme--documenter-dark .hero-foot {\n    flex-grow: 0;\n    flex-shrink: 0; }\n  html.theme--documenter-dark .hero-body {\n    flex-grow: 1;\n    flex-shrink: 0;\n    padding: 3rem 1.5rem; }\n  html.theme--documenter-dark .section {\n    padding: 3rem 1.5rem; }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark .section.is-medium {\n        padding: 9rem 1.5rem; }\n      html.theme--documenter-dark .section.is-large {\n        padding: 18rem 1.5rem; } }\n  html.theme--documenter-dark .footer {\n    background-color: #fafafa;\n    padding: 3rem 1.5rem 6rem; }\n  html.theme--documenter-dark h1 .docs-heading-anchor, html.theme--documenter-dark h1 .docs-heading-anchor:hover, html.theme--documenter-dark h1 .docs-heading-anchor:visited, html.theme--documenter-dark h2 .docs-heading-anchor, html.theme--documenter-dark h2 .docs-heading-anchor:hover, html.theme--documenter-dark h2 .docs-heading-anchor:visited, html.theme--documenter-dark h3 .docs-heading-anchor, html.theme--documenter-dark h3 .docs-heading-anchor:hover, html.theme--documenter-dark h3 .docs-heading-anchor:visited, html.theme--documenter-dark h4 .docs-heading-anchor, html.theme--documenter-dark h4 .docs-heading-anchor:hover, html.theme--documenter-dark h4 .docs-heading-anchor:visited, html.theme--documenter-dark h5 .docs-heading-anchor, html.theme--documenter-dark h5 .docs-heading-anchor:hover, html.theme--documenter-dark h5 .docs-heading-anchor:visited, html.theme--documenter-dark h6 .docs-heading-anchor, html.theme--documenter-dark h6 .docs-heading-anchor:hover, html.theme--documenter-dark h6 .docs-heading-anchor:visited {\n    color: #97b3e2; }\n  html.theme--documenter-dark h1 .docs-heading-anchor-permalink, html.theme--documenter-dark h2 .docs-heading-anchor-permalink, html.theme--documenter-dark h3 .docs-heading-anchor-permalink, html.theme--documenter-dark h4 .docs-heading-anchor-permalink, html.theme--documenter-dark h5 .docs-heading-anchor-permalink, html.theme--documenter-dark h6 .docs-heading-anchor-permalink {\n    visibility: hidden;\n    vertical-align: middle;\n    margin-left: 0.5em;\n    font-size: 0.7rem; }\n    html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before, html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before {\n      font-family: \"Font Awesome 5 Free\";\n      font-weight: 900;\n      content: \"\\f0c1\"; }\n  html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink, html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink {\n    visibility: visible; }\n  html.theme--documenter-dark .docs-light-only {\n    display: none !important; }\n  html.theme--documenter-dark .admonition {\n    background-color: #232834;\n    border-style: solid;\n    border-width: 1px;\n    border-color: #ba3f1f;\n    border-radius: 4px;\n    font-size: 1rem; }\n    html.theme--documenter-dark .admonition strong {\n      color: currentColor; }\n    html.theme--documenter-dark .admonition.is-small, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.admonition {\n      font-size: 0.75rem; }\n    html.theme--documenter-dark .admonition.is-medium {\n      font-size: 1.25rem; }\n    html.theme--documenter-dark .admonition.is-large {\n      font-size: 1.5rem; }\n    html.theme--documenter-dark .admonition.is-default {\n      background-color: #232834;\n      border-color: #ba3f1f; }\n      html.theme--documenter-dark .admonition.is-default > .admonition-header {\n        background-color: #ba3f1f; }\n    html.theme--documenter-dark .admonition.is-info {\n      background-color: #232834;\n      border-color: #28c; }\n      html.theme--documenter-dark .admonition.is-info > .admonition-header {\n        background-color: #28c; }\n    html.theme--documenter-dark .admonition.is-success {\n      background-color: #232834;\n      border-color: #42ac68; }\n      html.theme--documenter-dark .admonition.is-success > .admonition-header {\n        background-color: #42ac68; }\n    html.theme--documenter-dark .admonition.is-warning {\n      background-color: #232834;\n      border-color: #a88b17; }\n      html.theme--documenter-dark .admonition.is-warning > .admonition-header {\n        background-color: #a88b17; }\n    html.theme--documenter-dark .admonition.is-danger {\n      background-color: #232834;\n      border-color: #c7524c; }\n      html.theme--documenter-dark .admonition.is-danger > .admonition-header {\n        background-color: #c7524c; }\n    html.theme--documenter-dark .admonition.is-compat {\n      background-color: #232834;\n      border-color: #1db5c9; }\n      html.theme--documenter-dark .admonition.is-compat > .admonition-header {\n        background-color: #1db5c9; }\n  html.theme--documenter-dark .admonition-header {\n    background-color: #ba3f1f;\n    align-items: center;\n    font-weight: 700;\n    justify-content: space-between;\n    line-height: 1.25;\n    padding: 0.75em;\n    position: relative; }\n    html.theme--documenter-dark .admonition-header:before {\n      font-family: \"Font Awesome 5 Free\";\n      font-weight: 900;\n      margin-right: 0.75em;\n      content: \"\\f06a\"; }\n  html.theme--documenter-dark .admonition-body {\n    color: #ececec;\n    padding: 1em 1.25em; }\n    html.theme--documenter-dark .admonition-body pre {\n      background-color: #101f38; }\n    html.theme--documenter-dark .admonition-body code {\n      background-color: #101f38; }\n  html.theme--documenter-dark .docstring {\n    margin-bottom: 1em;\n    background-color: transparent;\n    border: 1px solid #dbdbdb;\n    box-shadow: 3px 3px 4px #444444;\n    max-width: 100%; }\n    html.theme--documenter-dark .docstring > header {\n      display: flex;\n      flex-grow: 1;\n      align-items: stretch;\n      padding: 0.75rem;\n      background-color: #232834;\n      box-shadow: 0 1px 2px rgba(10, 10, 10, 0.1);\n      box-shadow: none;\n      border-bottom: 1px solid #dbdbdb; }\n      html.theme--documenter-dark .docstring > header code {\n        background-color: transparent; }\n      html.theme--documenter-dark .docstring > header .docstring-binding {\n        margin-right: 0.3em; }\n      html.theme--documenter-dark .docstring > header .docstring-category {\n        margin-left: 0.3em; }\n    html.theme--documenter-dark .docstring > section {\n      position: relative;\n      padding: 1rem 1.25rem;\n      border-bottom: 1px solid #dbdbdb; }\n      html.theme--documenter-dark .docstring > section:last-child {\n        border-bottom: none; }\n      html.theme--documenter-dark .docstring > section > a.docs-sourcelink {\n        transition: opacity 0.3s;\n        opacity: 0;\n        position: absolute;\n        right: 0.625rem;\n        bottom: 0.5rem; }\n    html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink {\n      opacity: 0.2; }\n    html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink {\n      opacity: 1; }\n  html.theme--documenter-dark .documenter-example-output {\n    background-color: #1b1f28; }\n  html.theme--documenter-dark .content pre {\n    border: 1px solid #dbdbdb; }\n  html.theme--documenter-dark .content code {\n    font-weight: inherit; }\n  html.theme--documenter-dark .content a code {\n    color: #e37733; }\n  html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code {\n    color: #97b3e2; }\n  html.theme--documenter-dark .content table {\n    display: block;\n    width: initial;\n    max-width: 100%;\n    overflow-x: auto; }\n  html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child {\n    margin-top: 0; }\n  html.theme--documenter-dark .breadcrumb a.is-disabled {\n    cursor: default;\n    pointer-events: none; }\n    html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover {\n      color: #97b3e2; }\n  html.theme--documenter-dark .hljs {\n    background: initial !important;\n    padding: initial !important; }\n  html.theme--documenter-dark .katex .katex-mathml {\n    top: 0;\n    right: 0; }\n  html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display {\n    margin: 0.5em 0 !important; }\n  html.theme--documenter-dark html {\n    -moz-osx-font-smoothing: auto;\n    -webkit-font-smoothing: auto; }\n  html.theme--documenter-dark #documenter .docs-main > article {\n    overflow-wrap: break-word; }\n    html.theme--documenter-dark #documenter .docs-main > article .math-container {\n      overflow-x: auto; }\n  @media screen and (min-width: 1056px) {\n    html.theme--documenter-dark #documenter .docs-main {\n      max-width: 52rem;\n      margin-left: 20rem;\n      padding-right: 1rem; } }\n  @media screen and (max-width: 1055px) {\n    html.theme--documenter-dark #documenter .docs-main {\n      width: 100%; }\n      html.theme--documenter-dark #documenter .docs-main > article {\n        max-width: 52rem;\n        margin-left: auto;\n        margin-right: auto;\n        margin-bottom: 1rem;\n        padding: 0 1rem; }\n      html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav {\n        max-width: 100%;\n        width: 100%;\n        margin: 0; } }\n  html.theme--documenter-dark #documenter .docs-main header.docs-navbar {\n    background-color: #1b1f28;\n    border-bottom: 1px solid #dbdbdb;\n    z-index: 2;\n    min-height: 4rem;\n    margin-bottom: 1rem;\n    display: flex; }\n    html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb {\n      flex-grow: 1; }\n    html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right {\n      display: flex;\n      white-space: nowrap; }\n      html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label, html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button {\n        display: inline-block; }\n      html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label {\n        padding: 0;\n        margin-left: 0.3em; }\n      html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button {\n        margin: auto 0 auto 1rem; }\n      html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button {\n        font-size: 1.5rem;\n        margin: auto 0 auto 1rem; }\n    html.theme--documenter-dark #documenter .docs-main header.docs-navbar > * {\n      margin: auto 0; }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark #documenter .docs-main header.docs-navbar {\n        position: sticky;\n        top: 0;\n        padding: 0 1rem;\n        /* For Headroom.js */\n        transition-property: top, box-shadow;\n        -webkit-transition-property: top, box-shadow;\n        /* Safari */\n        transition-duration: 0.3s;\n        -webkit-transition-duration: 0.3s;\n        /* Safari */ }\n        html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top {\n          box-shadow: 0.2rem 0rem 0.4rem #bbb;\n          transition-duration: 0.7s;\n          -webkit-transition-duration: 0.7s;\n          /* Safari */ }\n        html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom {\n          top: -4.5rem;\n          transition-duration: 0.7s;\n          -webkit-transition-duration: 0.7s;\n          /* Safari */ } }\n  html.theme--documenter-dark #documenter .docs-main section.footnotes {\n    border-top: 1px solid #dbdbdb; }\n    html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring > section > a.docs-sourcelink:first-child, html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child, html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child {\n      margin-right: 1em;\n      margin-bottom: 0.4em; }\n  html.theme--documenter-dark #documenter .docs-main .docs-footer {\n    display: flex;\n    flex-wrap: wrap;\n    margin-left: 0;\n    margin-right: 0;\n    border-top: 1px solid #dbdbdb;\n    padding-top: 1rem;\n    padding-bottom: 1rem; }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark #documenter .docs-main .docs-footer {\n        padding-left: 1rem;\n        padding-right: 1rem; } }\n    html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage, html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage {\n      flex-grow: 1; }\n    html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage {\n      text-align: right; }\n    html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break {\n      flex-basis: 100%;\n      height: 0; }\n    html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message {\n      font-size: 0.8em;\n      margin: 0.5em auto 0 auto;\n      text-align: center; }\n  html.theme--documenter-dark #documenter .docs-sidebar {\n    display: flex;\n    flex-direction: column;\n    color: #ececec;\n    background-color: #1d3968;\n    border-right: 1px solid #dbdbdb;\n    padding: 0;\n    flex: 0 0 18rem;\n    z-index: 5;\n    font-size: 1rem;\n    position: fixed;\n    left: -18rem;\n    width: 18rem;\n    height: 100%;\n    transition: left 0.3s;\n    /* Setting up a nicer theme style for the scrollbar */ }\n    html.theme--documenter-dark #documenter .docs-sidebar.visible {\n      left: 0;\n      box-shadow: 0.4rem 0rem 0.8rem #bbb; }\n      @media screen and (min-width: 1056px) {\n        html.theme--documenter-dark #documenter .docs-sidebar.visible {\n          box-shadow: none; } }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark #documenter .docs-sidebar {\n        left: 0;\n        top: 0; } }\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-logo {\n      margin-top: 1rem;\n      padding: 0 1rem; }\n      html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img {\n        max-height: 6rem;\n        margin: auto; }\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name {\n      flex-shrink: 0;\n      font-size: 1.5rem;\n      font-weight: 700;\n      text-align: center;\n      white-space: nowrap;\n      overflow: hidden;\n      padding: 0.5rem 0; }\n      html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit {\n        max-width: 16.2rem; }\n    html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector {\n      border-top: 1px solid #dbdbdb;\n      display: none;\n      padding: 0.5rem; }\n      html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible {\n        display: flex; }\n    html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu {\n      flex-grow: 1;\n      user-select: none;\n      border-top: 1px solid #dbdbdb;\n      padding-bottom: 1.5rem;\n      /* Managing collapsible submenus */ }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li > .tocitem {\n        font-weight: bold; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li li {\n        font-size: 0.95rem;\n        margin-left: 1em;\n        border-left: 1px solid #dbdbdb; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle {\n        display: none; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed {\n        display: none; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ ul.collapsed {\n        display: block; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem {\n        display: flex; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label {\n          flex-grow: 2; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron {\n          display: inline-block;\n          font-style: normal;\n          font-variant: normal;\n          text-rendering: auto;\n          line-height: 1;\n          font-size: 0.75rem;\n          margin-left: 1rem;\n          margin-top: auto;\n          margin-bottom: auto; }\n          html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before {\n            font-family: \"Font Awesome 5 Free\";\n            font-weight: 900;\n            content: \"\\f054\"; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked ~ label.tocitem .docs-chevron::before {\n        content: \"\\f078\"; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem {\n        display: block;\n        padding: 0.5rem 0.5rem; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover {\n          color: #ececec;\n          background: #1d3968; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover {\n        color: #ececec;\n        background-color: #122442; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active {\n        border-top: 1px solid #dbdbdb;\n        border-bottom: 1px solid #dbdbdb;\n        background-color: #1b1f28; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem, html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover {\n          background-color: #1b1f28;\n          color: #f0f0f0; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover {\n          background-color: #142748;\n          color: #f0f0f0; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu > li.is-active:first-child {\n        border-top: none; }\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal {\n        margin: 0 0.5rem 0.5rem;\n        border-top: 1px solid #dbdbdb; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li {\n          font-size: 0.85rem;\n          border-left: none;\n          margin-left: 0;\n          margin-top: 0.5rem; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem {\n          width: 100%;\n          padding: 0; }\n          html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before {\n            content: \"⚬\";\n            margin-right: 0.4em; }\n    html.theme--documenter-dark #documenter .docs-sidebar form.docs-search {\n      margin: auto;\n      margin-top: 0.5rem;\n      margin-bottom: 0.5rem; }\n      html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input {\n        width: 14.4rem; }\n    @media screen and (min-width: 1056px) {\n      html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu {\n        overflow-y: auto;\n        -webkit-overflow-scroll: touch; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar {\n          width: .3rem;\n          background: none; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb {\n          border-radius: 5px 0px 0px 5px;\n          background: #142748; }\n        html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover {\n          background: #0b1628; } }\n    @media screen and (max-width: 1055px) {\n      html.theme--documenter-dark #documenter .docs-sidebar {\n        overflow-y: auto;\n        -webkit-overflow-scroll: touch; }\n        html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar {\n          width: .3rem;\n          background: none; }\n        html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb {\n          border-radius: 5px 0px 0px 5px;\n          background: #142748; }\n        html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover {\n          background: #0b1628; } }\n  html.theme--documenter-dark #documenter .docs-main #documenter-search-info {\n    margin-bottom: 1rem; }\n  html.theme--documenter-dark #documenter .docs-main #documenter-search-results {\n    list-style-type: circle;\n    list-style-position: outside; }\n    html.theme--documenter-dark #documenter .docs-main #documenter-search-results li {\n      margin-left: 2rem; }\n    html.theme--documenter-dark #documenter .docs-main #documenter-search-results .docs-highlight {\n      background-color: yellow; }\n  html.theme--documenter-dark {\n    background-color: #1b1f28;\n    font-size: 16px;\n    min-width: 300px;\n    overflow-x: auto;\n    overflow-y: scroll;\n    text-rendering: optimizeLegibility;\n    text-size-adjust: 100%; }\n  html.theme--documenter-dark #documenter .docs-sidebar {\n    border-right: none;\n    box-shadow: 0.24rem 0rem 0.4rem #444444; }\n    html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input {\n      color: #f0f0f0;\n      background-color: #142748;\n      border-color: #0b1628;\n      margin-top: 1.0rem;\n      margin-bottom: 1.0rem; }\n      html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::placeholder {\n        color: #f0f0f0; }\n  html.theme--documenter-dark .hljs-comment,\n  html.theme--documenter-dark .hljs-quote {\n    color: #d4d0ab; }\n  html.theme--documenter-dark .hljs-variable,\n  html.theme--documenter-dark .hljs-template-variable,\n  html.theme--documenter-dark .hljs-tag,\n  html.theme--documenter-dark .hljs-name,\n  html.theme--documenter-dark .hljs-selector-id,\n  html.theme--documenter-dark .hljs-selector-class,\n  html.theme--documenter-dark .hljs-regexp,\n  html.theme--documenter-dark .hljs-deletion {\n    color: #ffa07a; }\n  html.theme--documenter-dark .hljs-number,\n  html.theme--documenter-dark .hljs-built_in,\n  html.theme--documenter-dark .hljs-builtin-name,\n  html.theme--documenter-dark .hljs-literal,\n  html.theme--documenter-dark .hljs-type,\n  html.theme--documenter-dark .hljs-params,\n  html.theme--documenter-dark .hljs-meta,\n  html.theme--documenter-dark .hljs-link {\n    color: #f5ab35; }\n  html.theme--documenter-dark .hljs-attribute {\n    color: #ffd700; }\n  html.theme--documenter-dark .hljs-string,\n  html.theme--documenter-dark .hljs-symbol,\n  html.theme--documenter-dark .hljs-bullet,\n  html.theme--documenter-dark .hljs-addition {\n    color: #abe338; }\n  html.theme--documenter-dark .hljs-title,\n  html.theme--documenter-dark .hljs-section {\n    color: #00e0e0; }\n  html.theme--documenter-dark .hljs-keyword,\n  html.theme--documenter-dark .hljs-selector-tag {\n    color: #dcc6e0; }\n  html.theme--documenter-dark .hljs {\n    display: block;\n    overflow-x: auto;\n    background: #2b2b2b;\n    color: #f8f8f2;\n    padding: 0.5em; }\n  html.theme--documenter-dark .hljs-emphasis {\n    font-style: italic; }\n  html.theme--documenter-dark .hljs-strong {\n    font-weight: bold; }\n  @media screen and (-ms-high-contrast: active) {\n    html.theme--documenter-dark .hljs-addition,\n    html.theme--documenter-dark .hljs-attribute,\n    html.theme--documenter-dark .hljs-built_in,\n    html.theme--documenter-dark .hljs-builtin-name,\n    html.theme--documenter-dark .hljs-bullet,\n    html.theme--documenter-dark .hljs-comment,\n    html.theme--documenter-dark .hljs-link,\n    html.theme--documenter-dark .hljs-literal,\n    html.theme--documenter-dark .hljs-meta,\n    html.theme--documenter-dark .hljs-number,\n    html.theme--documenter-dark .hljs-params,\n    html.theme--documenter-dark .hljs-string,\n    html.theme--documenter-dark .hljs-symbol,\n    html.theme--documenter-dark .hljs-type,\n    html.theme--documenter-dark .hljs-quote {\n      color: highlight; }\n    html.theme--documenter-dark .hljs-keyword,\n    html.theme--documenter-dark .hljs-selector-tag {\n      font-weight: bold; } }\n  html.theme--documenter-dark .hljs-subst {\n    color: #f8f8f2; }\n"
  },
  {
    "path": "docs/src/assets/themes/documenter-dark.css.css",
    "content": "﻿@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}html.theme--documenter-dark .delete,html.theme--documenter-dark .modal-close,.is-unselectable,html.theme--documenter-dark .button,html.theme--documenter-dark .file,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after,html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:\" \";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .box:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .highlight:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .list:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .admonition:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .delete,html.theme--documenter-dark .modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::after,html.theme--documenter-dark .modal-close::after{background-color:white;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::before{height:2px;width:50%}html.theme--documenter-dark .delete::after,html.theme--documenter-dark .modal-close::after{height:50%;width:2px}html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:focus,html.theme--documenter-dark .modal-close:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .delete:active,html.theme--documenter-dark .modal-close:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete,html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.delete,html.theme--documenter-dark .is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.delete,html.theme--documenter-dark .is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .button.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .control.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:\"\";display:block;height:1em;position:relative;width:1em}.is-overlay,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,html.theme--documenter-dark .modal,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .hero-video{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .button,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea,html.theme--documenter-dark .select select,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .button:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .is-active.button,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis{outline:none}html.theme--documenter-dark .button[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button,fieldset[disabled] html.theme--documenter-dark .input,html.theme--documenter-dark fieldset[disabled] .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .textarea,html.theme--documenter-dark fieldset[disabled] .textarea,fieldset[disabled] html.theme--documenter-dark .select select,html.theme--documenter-dark .select fieldset[disabled] select,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}.is-clearfix::after{clear:both;content:\" \";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:0.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:0.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:0.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:0.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:0.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:0.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:0.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:white !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:white !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:black !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:whitesmoke !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:whitesmoke !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-link{color:#e37733 !important}a.has-text-link:hover,a.has-text-link:focus{color:#c75e1c !important}.has-background-link{background-color:#e37733 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#0f81cc !important}.has-background-info{background-color:#209cee !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#7a7a7a !important}.has-background-grey{background-color:#7a7a7a !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:whitesmoke !important}.has-background-white-ter{background-color:whitesmoke !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:\"Montserrat\", sans-serif !important}.is-family-secondary{font-family:\"Montserrat\", sans-serif !important}.is-family-sans-serif{font-family:\"Montserrat\", sans-serif !important}.is-family-monospace{font-family:\"Source Code Pro\", monospace !important}.is-family-code{font-family:\"Source Code Pro\", monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}html.theme--documenter-dark html{background-color:#1b1f28;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:\"Montserrat\", sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:\"Source Code Pro\", monospace}html.theme--documenter-dark body{color:#ececec;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#e37733;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#f2be9e}html.theme--documenter-dark code{background-color:#101f38;color:#fff;font-size:0.875em;font-weight:normal;padding:0.1em}html.theme--documenter-dark hr{background-color:whitesmoke;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type=\"checkbox\"],html.theme--documenter-dark input[type=\"radio\"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:0.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#97b3e2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#101f38;color:#ececec;font-size:0.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:left}html.theme--documenter-dark table th{color:#97b3e2}html.theme--documenter-dark .box{background-color:white;border-radius:6px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#ececec;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #e37733}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #e37733}html.theme--documenter-dark .button{background-color:white;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:0.75em;padding-right:0.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#b5b5b5;color:#f2be9e}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#2e63b8;color:#363636}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#4a4a4a;color:#363636}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#ececec;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:whitesmoke;color:#97b3e2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#e8e8e8;color:#97b3e2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white{background-color:white;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:white;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:white}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:black}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:white}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:white;color:white}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:white;border-color:white;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent white white !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:white}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:white}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:white}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:white}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:black;border-color:transparent;color:white}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:white;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:white;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent white white !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:white}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;color:white}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:white;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}html.theme--documenter-dark .button.is-light{background-color:whitesmoke;border-color:transparent;color:#363636}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#eeeeee;border-color:transparent;color:#363636}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:#363636}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:#363636}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:whitesmoke;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:#292929}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:whitesmoke;border-color:whitesmoke;color:#363636}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;color:#363636}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#363636;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:whitesmoke}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#292929;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#363636;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#e8e8e8}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:whitesmoke;border-color:transparent;box-shadow:none;color:#363636}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:whitesmoke}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link{background-color:#e37733;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#e16f28;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#dd681f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#e37733;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#e37733}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#e37733}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#e37733;color:#e37733}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#e37733;border-color:#e37733;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #e37733 #e37733 !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#e37733;box-shadow:none;color:#e37733}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#e37733}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #e37733 #e37733 !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info{background-color:#209cee;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#1496ed;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#118fe4;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#209cee;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#209cee}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#22c35b;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#22c35b}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#da0b00;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:2px;font-size:0.75rem}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:white;border-color:#dbdbdb;box-shadow:none;opacity:0.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:whitesmoke;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:290486px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:0.75rem}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}html.theme--documenter-dark .container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container{max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container{max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#97b3e2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:whitesmoke;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0.7rem 0.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#97b3e2}html.theme--documenter-dark .content table th:not([align]){text-align:left}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#97b3e2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#97b3e2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:0.75rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:290486px}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:whitesmoke;border-radius:4px;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:white}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{position:absolute;right:0.5rem;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:white;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:white}html.theme--documenter-dark .notification.is-light{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .notification.is-link{background-color:#e37733;color:#fff}html.theme--documenter-dark .notification.is-info{background-color:#209cee;color:#fff}html.theme--documenter-dark .notification.is-success{background-color:#22c35b;color:#fff}html.theme--documenter-dark .notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-danger{background-color:#da0b00;color:#fff}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#dbdbdb}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#ececec}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#ececec}html.theme--documenter-dark .progress::-ms-fill{background-color:#ececec;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:white}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:white}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:white}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, white 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:whitesmoke}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:whitesmoke}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:whitesmoke}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#363636}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#363636}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#363636}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#e37733}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#e37733}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#e37733}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #e37733 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#209cee}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#209cee}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#209cee}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#22c35b}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#22c35b}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#22c35b}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ffdd57}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ffdd57}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ffdd57}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#da0b00}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#da0b00}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#da0b00}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #dbdbdb 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#dbdbdb;background-image:linear-gradient(to right, #ececec 30%, #dbdbdb 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:0.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:white;color:#363636}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:white;border-color:white;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:white}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:whitesmoke;border-color:whitesmoke;color:#363636}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#363636;border-color:#363636;color:whitesmoke}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#e37733;border-color:#e37733;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table th{color:#97b3e2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:transparent}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#97b3e2}html.theme--documenter-dark .table tfoot{background-color:transparent}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#97b3e2}html.theme--documenter-dark .table tbody{background-color:transparent}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:whitesmoke}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child){margin-right:0.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body),html.theme--documenter-dark .content kbd:not(body){align-items:center;background-color:whitesmoke;border-radius:4px;color:#ececec;display:inline-flex;font-size:0.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body){background-color:white;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body){background-color:#0a0a0a;color:white}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body){background-color:whitesmoke;color:#363636}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body){background-color:#363636;color:whitesmoke}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body){background-color:#4eb5de;color:#fff}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body){background-color:#e37733;color:#fff}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body){background-color:#209cee;color:#fff}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body){background-color:#22c35b;color:#fff}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body){background-color:#da0b00;color:#fff}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body){font-size:0.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after{background-color:currentColor;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus{background-color:#e8e8e8}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active{background-color:#dbdbdb}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tag:not(body){border-radius:290486px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:0.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:0.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd{vertical-align:middle}html.theme--documenter-dark .title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title+.highlight{margin-top:-0.75rem}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:0.75rem}html.theme--documenter-dark .subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#363636;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:0.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}html.theme--documenter-dark .highlight pre{overflow:auto;max-width:100%}html.theme--documenter-dark .number{align-items:center;background-color:whitesmoke;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea,html.theme--documenter-dark .select select{background-color:white;border-color:#dbdbdb;border-radius:4px;color:#363636}html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .select select::-moz-placeholder{color:rgba(54,54,54,0.3)}html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .select select::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .select select:-moz-placeholder{color:rgba(54,54,54,0.3)}html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .select select:-ms-input-placeholder{color:rgba(54,54,54,0.3)}html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .select select.is-hovered{border-color:#ac5118}html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .select select.is-active{border-color:#f0f0f0;box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .select select[disabled],fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .select select{background-color:whitesmoke;border-color:whitesmoke;box-shadow:none;color:#7a7a7a}html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .select select[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder{color:rgba(122,122,122,0.3)}html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder{color:rgba(122,122,122,0.3)}html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .select select[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder{color:rgba(122,122,122,0.3)}html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder{color:rgba(122,122,122,0.3)}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly],html.theme--documenter-dark .textarea[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white,html.theme--documenter-dark .is-white.textarea{border-color:white}html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white.is-focused,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white.is-active,html.theme--documenter-dark .is-white.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black,html.theme--documenter-dark .is-black.textarea{border-color:#0a0a0a}html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black.is-focused,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black.is-active,html.theme--documenter-dark .is-black.is-active.textarea{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light,html.theme--documenter-dark .is-light.textarea{border-color:whitesmoke}html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light.is-focused,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light.is-active,html.theme--documenter-dark .is-light.is-active.textarea{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark .content kbd.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea{border-color:#363636}html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark.is-focused,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark.is-active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink{border-color:#4eb5de}html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary.is-focused,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary.is-active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link,html.theme--documenter-dark .is-link.textarea{border-color:#e37733}html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link.is-focused,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link.is-active,html.theme--documenter-dark .is-link.is-active.textarea{box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info,html.theme--documenter-dark .is-info.textarea{border-color:#209cee}html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info.is-focused,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info.is-active,html.theme--documenter-dark .is-info.is-active.textarea{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success,html.theme--documenter-dark .is-success.textarea{border-color:#22c35b}html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success.is-focused,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success.is-active,html.theme--documenter-dark .is-success.is-active.textarea{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning,html.theme--documenter-dark .is-warning.textarea{border-color:#ffdd57}html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning.is-focused,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning.is-active,html.theme--documenter-dark .is-warning.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger,html.theme--documenter-dark .is-danger.textarea{border-color:#da0b00}html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger.is-focused,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger.is-active,html.theme--documenter-dark .is-danger.is-active.textarea{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .is-small.textarea{border-radius:2px;font-size:0.75rem}html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium,html.theme--documenter-dark .is-medium.textarea{font-size:1.25rem}html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large,html.theme--documenter-dark .is-large.textarea{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth,html.theme--documenter-dark .is-fullwidth.textarea{display:block;width:100%}html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline,html.theme--documenter-dark .is-inline.textarea{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:290486px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:0.625em;resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:600px;min-height:120px}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .checkbox input,html.theme--documenter-dark .radio input{cursor:pointer}html.theme--documenter-dark .checkbox:hover,html.theme--documenter-dark .radio:hover{color:#363636}html.theme--documenter-dark .checkbox[disabled],html.theme--documenter-dark .radio[disabled],fieldset[disabled] html.theme--documenter-dark .checkbox,fieldset[disabled] html.theme--documenter-dark .radio{color:#7a7a7a;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:0.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.25em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#e37733;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:290486px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:whitesmoke}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:white}html.theme--documenter-dark .select.is-white select{border-color:white}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:black}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:whitesmoke}html.theme--documenter-dark .select.is-light select{border-color:whitesmoke}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#e8e8e8}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#363636}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#363636}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#292929}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#e37733}html.theme--documenter-dark .select.is-link select{border-color:#e37733}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#dd681f}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(227,119,51,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#209cee}html.theme--documenter-dark .select.is-info select{border-color:#209cee}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#118fe4}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#22c35b}html.theme--documenter-dark .select.is-success select{border-color:#22c35b}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#1ead51}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ffdd57}html.theme--documenter-dark .select.is-warning select{border-color:#ffdd57}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#ffd83d}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#da0b00}html.theme--documenter-dark .select.is-danger select{border-color:#da0b00}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#c10a00}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:0.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#7a7a7a}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:0.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select.is-loading:after{font-size:0.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:white;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:white}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:white}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:white}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:black;border-color:transparent;color:white}html.theme--documenter-dark .file.is-light .file-cta{background-color:whitesmoke;border-color:transparent;color:#363636}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#eeeeee;border-color:transparent;color:#363636}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:#363636}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:#363636}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:whitesmoke}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:whitesmoke}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#e37733;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#e16f28;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(227,119,51,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#dd681f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#1496ed;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#118fe4;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:0.75rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:4px}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 4px 4px 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#eeeeee;color:#363636}html.theme--documenter-dark .file-label:hover .file-name{border-color:#d5d5d5}html.theme--documenter-dark .file-label:active .file-cta{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .file-label:active .file-name{border-color:#cfcfcf}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:whitesmoke;color:#4a4a4a}html.theme--documenter-dark .file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#363636;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:0.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:0.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:white}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:whitesmoke}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#363636}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#4eb5de}html.theme--documenter-dark .help.is-link{color:#e37733}html.theme--documenter-dark .help.is-info{color:#209cee}html.theme--documenter-dark .help.is-success{color:#22c35b}html.theme--documenter-dark .help.is-warning{color:#ffdd57}html.theme--documenter-dark .help.is-danger{color:#da0b00}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:0.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:0.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:0.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:left}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#7a7a7a}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.select~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.select~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.select~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.select~.icon{font-size:0.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#dbdbdb;height:2.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.25em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.25em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:0.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.control.is-loading:after{font-size:0.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#e37733;display:flex;justify-content:center;padding:0 0.75em}html.theme--documenter-dark .breadcrumb a:hover{color:#f2be9e}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#97b3e2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#b5b5b5;content:\"\\0002f\"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:0.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:0.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:0.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:\"\\02192\"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:\"\\02022\"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:\"\\000b7\"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:\"\\0227B\"}html.theme--documenter-dark .card{background-color:white;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#ececec;max-width:100%;position:relative}html.theme--documenter-dark .card-header{background-color:transparent;align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#97b3e2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-content{background-color:transparent;padding:1rem 1.25rem}html.theme--documenter-dark .card-footer{background-color:transparent;border-top:1px solid #dbdbdb;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:0.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #dbdbdb}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .dropdown-item{color:#4a4a4a;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:whitesmoke;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#e37733;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#dbdbdb;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:4px}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:0.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:0.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:0.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .list{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}html.theme--documenter-dark .list-item{display:block;padding:0.5em 1em}html.theme--documenter-dark .list-item:not(a){color:#ececec}html.theme--documenter-dark .list-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}html.theme--documenter-dark .list-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}html.theme--documenter-dark .list-item:not(:last-child){border-bottom:1px solid #dbdbdb}html.theme--documenter-dark .list-item.is-active{background-color:#e37733;color:#fff}html.theme--documenter-dark a.list-item{background-color:whitesmoke;cursor:pointer}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:left}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:0.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:0.5rem}html.theme--documenter-dark .media .media .media{padding-top:0.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:0.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:0.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:2px;color:#ececec;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:whitesmoke;color:#97b3e2}html.theme--documenter-dark .menu-list a.is-active{background-color:#e37733;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #dbdbdb;margin:0.75em;padding-left:0.75em}html.theme--documenter-dark .menu-label{color:#7a7a7a;font-size:0.75em;letter-spacing:0.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:whitesmoke;border-radius:4px;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:0.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:white}html.theme--documenter-dark .message.is-white .message-header{background-color:white;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:white;color:#4d4d4d}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:white}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a;color:#090909}html.theme--documenter-dark .message.is-light{background-color:#fafafa}html.theme--documenter-dark .message.is-light .message-header{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .message.is-light .message-body{border-color:whitesmoke;color:#505050}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#fafafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#363636;color:#2a2a2a}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f6fbfd}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1f556a}html.theme--documenter-dark .message.is-link{background-color:#fef9f6}html.theme--documenter-dark .message.is-link .message-header{background-color:#e37733;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#e37733;color:#7f411b}html.theme--documenter-dark .message.is-info{background-color:#f6fbfe}html.theme--documenter-dark .message.is-info .message-header{background-color:#209cee;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#209cee;color:#12537e}html.theme--documenter-dark .message.is-success{background-color:#f6fdf9}html.theme--documenter-dark .message.is-success .message-header{background-color:#22c35b;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#22c35b;color:#0f361d}html.theme--documenter-dark .message.is-warning{background-color:#fffdf5}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ffdd57;color:#3b3108}html.theme--documenter-dark .message.is-danger{background-color:#fff5f5}html.theme--documenter-dark .message.is-danger .message-header{background-color:#da0b00;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#da0b00;color:#9b0c04}html.theme--documenter-dark .message-header{align-items:center;background-color:#ececec;border-radius:4px 4px 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#ececec;padding:1em 1.25em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:white}html.theme--documenter-dark .message-body pre code{background-color:transparent}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),print{html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:whitesmoke;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}html.theme--documenter-dark .modal-card-title{color:#97b3e2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:0.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:white;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:white;min-height:3.25rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:white;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:white;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:white}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:white}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:black;color:white}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:white}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:white}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:white}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:black;color:white}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:white}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:black;color:white}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:white}}html.theme--documenter-dark .navbar.is-light{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:#363636}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#363636}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:whitesmoke}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:whitesmoke}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:whitesmoke}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#e37733;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#dd681f;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#dd681f;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dd681f;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#e37733;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#209cee;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#118fe4;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#118fe4;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#118fe4;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#22c35b;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-danger{background-color:#da0b00;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 whitesmoke}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 whitesmoke}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:3.25rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:3.25rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:#fafafa;color:#e37733}html.theme--documenter-dark .navbar-item{display:block;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#e37733}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#e37733;border-bottom-style:solid;border-bottom-width:3px;color:#e37733;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#e37733;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:whitesmoke;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:white;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:3.25rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:4px}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#e37733}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item{display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:white;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#e37733}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#0a0a0a}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:transparent}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-0.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:0.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:290486px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:290486px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:0.25rem;padding-left:0.5em;padding-right:0.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#dbdbdb;color:#363636;min-width:2.25em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#b5b5b5;color:#f2be9e}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#2e63b8}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#e37733;border-color:#e37733;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#b5b5b5;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs,html.theme--documenter-dark .panel-block{border-bottom:1px solid #dbdbdb;border-left:1px solid #dbdbdb;border-right:1px solid #dbdbdb}html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child,html.theme--documenter-dark .panel-block:first-child{border-top:1px solid #dbdbdb}html.theme--documenter-dark .panel-heading{background-color:whitesmoke;border-radius:4px 4px 0 0;color:#97b3e2;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:0.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}html.theme--documenter-dark .panel-list a{color:#ececec}html.theme--documenter-dark .panel-list a:hover{color:#e37733}html.theme--documenter-dark .panel-block{align-items:center;color:#97b3e2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type=\"checkbox\"]{margin-right:0.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#e37733;color:#363636}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#e37733}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:whitesmoke}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:0.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#ececec;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#97b3e2;color:#97b3e2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#e37733;color:#e37733}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:0.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:0.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:whitesmoke;border-bottom-color:#dbdbdb}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:white;border-color:#dbdbdb;border-bottom-color:transparent !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:whitesmoke;border-color:#b5b5b5;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-radius:4px 0 0 4px}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-radius:0 4px 4px 0}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#e37733;border-color:#e37733;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:0.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:0.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66667%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66667%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66667%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66667%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66667%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66667%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66667%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66667%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66667%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66667%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66667%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66667%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - 0.75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: 0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: 0.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: 0.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: 0.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: 0.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: 0.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: 0.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: 0.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: 0.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: 0.25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: 0.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: 0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: 0.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: 0.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: 0.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: 0.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: 0.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: 0.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: 0.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: 0.5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: 0.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: 0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: 0.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: 0.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: 0.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: 0.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: 0.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: 0.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: 0.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: 0.75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:0.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66667%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66667%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66667%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66667%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:white;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:white}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:white}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:white}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:white}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:white}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:black;color:white}html.theme--documenter-dark .hero.is-black .tabs a{color:white;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:white}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:white;border-color:white;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:whitesmoke;color:#363636}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:#363636}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(54,54,54,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:#363636}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:whitesmoke}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(54,54,54,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:#363636}html.theme--documenter-dark .hero.is-light .tabs a{color:#363636;opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:#363636}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:#363636;border-color:#363636;color:whitesmoke}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#363636;color:whitesmoke}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:whitesmoke}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(245,245,245,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:whitesmoke}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#363636}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(245,245,245,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#292929;color:whitesmoke}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:whitesmoke;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:whitesmoke}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a:hover{background-color:whitesmoke;border-color:whitesmoke;color:#363636}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#e37733;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#e37733}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#dd681f;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#e37733}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #d23b10 0%, #e37733 71%, #eba044 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #d23b10 0%, #e37733 71%, #eba044 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#209cee;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#209cee}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#118fe4;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#22c35b;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#22c35b}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ffdd57}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#da0b00;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#da0b00}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section.is-medium{padding:9rem 1.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 1.5rem}}html.theme--documenter-dark .footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#97b3e2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f0c1\"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark .admonition{background-color:#232834;border-style:solid;border-width:1px;border-color:#ba3f1f;border-radius:4px;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:0.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#232834;border-color:#ba3f1f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#ba3f1f}html.theme--documenter-dark .admonition.is-info{background-color:#232834;border-color:#28c}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#28c}html.theme--documenter-dark .admonition.is-success{background-color:#232834;border-color:#42ac68}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#42ac68}html.theme--documenter-dark .admonition.is-warning{background-color:#232834;border-color:#a88b17}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#a88b17}html.theme--documenter-dark .admonition.is-danger{background-color:#232834;border-color:#c7524c}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#c7524c}html.theme--documenter-dark .admonition.is-compat{background-color:#232834;border-color:#1db5c9}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#1db5c9}html.theme--documenter-dark .admonition-header{background-color:#ba3f1f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:\"Font Awesome 5 Free\";font-weight:900;margin-right:0.75em;content:\"\\f06a\"}html.theme--documenter-dark .admonition-body{color:#ececec;padding:1em 1.25em}html.theme--documenter-dark .admonition-body pre{background-color:#101f38}html.theme--documenter-dark .admonition-body code{background-color:#101f38}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:transparent;border:1px solid #dbdbdb;box-shadow:3px 3px 4px #444444;max-width:100%}html.theme--documenter-dark .docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.75rem;background-color:#232834;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:1rem 1.25rem;border-bottom:1px solid #dbdbdb}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:0.625rem;bottom:0.5rem}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1b1f28}html.theme--documenter-dark .content pre{border:1px solid #dbdbdb}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#e37733}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#97b3e2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#97b3e2}html.theme--documenter-dark .hljs{background:initial !important;padding:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1b1f28;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button{margin:auto 0 auto 1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{font-size:1.5rem;margin:auto 0 auto 1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:0.2rem 0rem 0.4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#ececec;background-color:#1d3968;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:0.4rem 0rem 0.8rem #bbb}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:0.95rem;margin-left:1em;border-left:1px solid #dbdbdb}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:0.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f054\"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:\"\\f078\"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#ececec;background:#1d3968}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#ececec;background-color:#122442}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#1b1f28}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1b1f28;color:#f0f0f0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#142748;color:#f0f0f0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:0.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:\"⚬\";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#142748}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#0b1628}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#142748}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#0b1628}}html.theme--documenter-dark #documenter .docs-main #documenter-search-info{margin-bottom:1rem}html.theme--documenter-dark #documenter .docs-main #documenter-search-results{list-style-type:circle;list-style-position:outside}html.theme--documenter-dark #documenter .docs-main #documenter-search-results li{margin-left:2rem}html.theme--documenter-dark #documenter .docs-main #documenter-search-results .docs-highlight{background-color:yellow}html.theme--documenter-dark{background-color:#1b1f28;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark #documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #444444}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#142748;border-color:#0b1628;margin-top:1.0rem;margin-bottom:1.0rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-builtin-name,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs{display:block;overflow-x:auto;background:#2b2b2b;color:#f8f8f2;padding:0.5em}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-builtin-name,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}\n"
  },
  {
    "path": "docs/src/assets/themes/documenter-light.css",
    "content": "﻿@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.delete,.modal-close,.is-unselectable,.button,.file,.breadcrumb,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select:not(.is-multiple):not(.is-loading)::after,.navbar-link:not(.is-arrowless)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:\" \";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.box:not(:last-child),.content:not(:last-child),.notification:not(:last-child),.progress:not(:last-child),.table:not(:last-child),.table-container:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.block:not(:last-child),.highlight:not(:last-child),.breadcrumb:not(:last-child),.level:not(:last-child),.list:not(:last-child),.message:not(:last-child),.tabs:not(:last-child),.admonition:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.delete::before,.modal-close::before,.delete::after,.modal-close::after{background-color:white;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:hover,.modal-close:hover,.delete:focus,.modal-close:focus{background-color:rgba(10,10,10,0.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,0.4)}.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete,.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.loader,.select.is-loading::after,.control.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:\"\";display:block;height:1em;position:relative;width:1em}.is-overlay,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.modal,.modal-background,.hero-video{bottom:0;left:0;position:absolute;right:0;top:0}.button,.input,#documenter .docs-sidebar form.docs-search>input,.textarea,.select select,.file-cta,.file-name,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}.button:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.textarea:focus,.select select:focus,.file-cta:focus,.file-name:focus,.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.is-focused.button,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.textarea,.select select.is-focused,.is-focused.file-cta,.is-focused.file-name,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.button:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.textarea:active,.select select:active,.file-cta:active,.file-name:active,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.is-active.button,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.textarea,.select select.is-active,.is-active.file-cta,.is-active.file-name,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis{outline:none}.button[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.textarea[disabled],.select select[disabled],.file-cta[disabled],.file-name[disabled],.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],fieldset[disabled] .button,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .textarea,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}html{background-color:#f0f0f0;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:\"Montserrat\", sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:\"Source Code Pro\", monospace}body{color:#202020;font-size:1em;font-weight:400;line-height:1.5}a{color:#ac5118;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#884013}code{background-color:#e7eef8;color:#000000;font-size:0.875em;font-weight:normal;padding:0.1em}hr{background-color:whitesmoke;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=\"checkbox\"],input[type=\"radio\"]{vertical-align:baseline}small{font-size:0.875em}span{font-style:inherit;font-weight:inherit}strong{color:#2a5398;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#e7eef8;color:#202020;font-size:0.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:left}table th{color:#2a5398}.is-clearfix::after{clear:both;content:\" \";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:0.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:0.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:0.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:0.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:0.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:0.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:0.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:white !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:white !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:black !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:whitesmoke !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:whitesmoke !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-link{color:#ac5118 !important}a.has-text-link:hover,a.has-text-link:focus{color:#7f3c12 !important}.has-background-link{background-color:#ac5118 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#0f81cc !important}.has-background-info{background-color:#209cee !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#7a7a7a !important}.has-background-grey{background-color:#7a7a7a !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:whitesmoke !important}.has-background-white-ter{background-color:whitesmoke !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:\"Montserrat\", sans-serif !important}.is-family-secondary{font-family:\"Montserrat\", sans-serif !important}.is-family-sans-serif{font-family:\"Montserrat\", sans-serif !important}.is-family-monospace{font-family:\"Source Code Pro\", monospace !important}.is-family-code{font-family:\"Source Code Pro\", monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}.box{background-color:white;border-radius:6px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#202020;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #ac5118}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #ac5118}.button{background-color:white;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:0.75em;padding-right:0.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}.button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#884013}.button:focus,.button.is-focused{border-color:#2e63b8;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#202020;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:whitesmoke;color:#2a5398}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#2a5398}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:white;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:white;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:white}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:black}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:white}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:white;color:white}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:white;border-color:white;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent white white !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:white}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:white}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:white}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:white}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:black;border-color:transparent;color:white}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:white;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:white;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent white white !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:white}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;color:white}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:white;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}.button.is-light{background-color:whitesmoke;border-color:transparent;color:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eeeeee;border-color:transparent;color:#363636}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:#363636}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:#363636}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:whitesmoke;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:whitesmoke}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:#292929}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:whitesmoke}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:whitesmoke;border-color:whitesmoke;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:#363636;color:whitesmoke}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:whitesmoke}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:whitesmoke}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:whitesmoke}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:whitesmoke;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#e8e8e8}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:whitesmoke;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:whitesmoke}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:whitesmoke;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link{background-color:#ac5118;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#a14c16;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#964615;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#ac5118;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#ac5118}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ac5118}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#ac5118;color:#ac5118}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#ac5118;border-color:#ac5118;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #ac5118 #ac5118 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#ac5118;box-shadow:none;color:#ac5118}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ac5118}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ac5118 #ac5118 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1496ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#118fe4;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{border-radius:2px;font-size:0.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:white;border-color:#dbdbdb;box-shadow:none;opacity:0.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}.button.is-static{background-color:whitesmoke;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:290486px;padding-left:1em;padding-right:1em}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:0.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1056px){.container{max-width:992px}.container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){.container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){.container{max-width:1152px}}@media screen and (min-width: 1408px){.container{max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#2a5398;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:whitesmoke;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0.7rem 0.5rem;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#2a5398}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#2a5398}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#2a5398}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:0.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:290486px}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:whitesmoke;border-radius:4px;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:white}.notification pre code{background:transparent}.notification>.delete{position:absolute;right:0.5rem;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:white;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:white}.notification.is-light{background-color:whitesmoke;color:#363636}.notification.is-dark,.content kbd.notification{background-color:#363636;color:whitesmoke}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-link{background-color:#ac5118;color:#fff}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-danger{background-color:#da0b00;color:#fff}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#dbdbdb}.progress::-webkit-progress-value{background-color:#202020}.progress::-moz-progress-bar{background-color:#202020}.progress::-ms-fill{background-color:#202020;border:none}.progress.is-white::-webkit-progress-value{background-color:white}.progress.is-white::-moz-progress-bar{background-color:white}.progress.is-white::-ms-fill{background-color:white}.progress.is-white:indeterminate{background-image:linear-gradient(to right, white 30%, #dbdbdb 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%)}.progress.is-light::-webkit-progress-value{background-color:whitesmoke}.progress.is-light::-moz-progress-bar{background-color:whitesmoke}.progress.is-light::-ms-fill{background-color:whitesmoke}.progress.is-light:indeterminate{background-image:linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #dbdbdb 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%)}.progress.is-link::-webkit-progress-value{background-color:#ac5118}.progress.is-link::-moz-progress-bar{background-color:#ac5118}.progress.is-link::-ms-fill{background-color:#ac5118}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #ac5118 30%, #dbdbdb 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #dbdbdb 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #dbdbdb 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #dbdbdb 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#dbdbdb;background-image:linear-gradient(to right, #202020 30%, #dbdbdb 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:0.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:white;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:white;border-color:white;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:white}.table td.is-light,.table th.is-light{background-color:whitesmoke;border-color:whitesmoke;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:whitesmoke}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#ac5118;border-color:#ac5118;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table th{color:#2a5398}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#2a5398}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#2a5398}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:whitesmoke}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .docstring>section>a.docs-sourcelink,.tags .content kbd,.content .tags kbd{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child){margin-right:0.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .docstring>section>a.docs-sourcelink,.tags.is-centered .content kbd,.content .tags.is-centered kbd{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .docstring>section>a.docs-sourcelink,.tags.has-addons .content kbd,.content .tags.has-addons kbd{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body),.docstring>section>a.docs-sourcelink:not(body),.content kbd:not(body){align-items:center;background-color:whitesmoke;border-radius:4px;color:#202020;display:inline-flex;font-size:0.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete,.content kbd:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}.tag.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body),.content kbd.is-white:not(body){background-color:white;color:#0a0a0a}.tag.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body),.content kbd.is-black:not(body){background-color:#0a0a0a;color:white}.tag.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body),.content kbd.is-light:not(body){background-color:whitesmoke;color:#363636}.tag.is-dark:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content kbd:not(body){background-color:#363636;color:whitesmoke}.tag.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body),.content kbd.is-primary:not(body){background-color:#4eb5de;color:#fff}.tag.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body),.content kbd.is-link:not(body){background-color:#ac5118;color:#fff}.tag.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body),.content kbd.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body),.content kbd.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body),.content kbd.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body),.content kbd.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body),.content kbd.is-normal:not(body){font-size:0.75rem}.tag.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body),.content kbd.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body),.content kbd.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}.tag:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body),.content kbd.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after{background-color:currentColor;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active,.content kbd.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input.tag:not(body){border-radius:290486px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:0.75em}.title sup,.subtitle sup{font-size:0.75em}.title .tag,.title .docstring>section>a.docs-sourcelink,.title .content kbd,.content .title kbd,.subtitle .tag,.subtitle .docstring>section>a.docs-sourcelink,.subtitle .content kbd,.content .subtitle kbd{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-0.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:0.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:0.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:whitesmoke;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.input,#documenter .docs-sidebar form.docs-search>input,.textarea,.select select{background-color:white;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder,.textarea::-moz-placeholder,.select select::-moz-placeholder{color:rgba(54,54,54,0.3)}.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.select select::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder,.textarea:-moz-placeholder,.select select:-moz-placeholder{color:rgba(54,54,54,0.3)}.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,.textarea:-ms-input-placeholder,.select select:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.textarea:hover,.select select:hover,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered,.is-hovered.textarea,.select select.is-hovered{border-color:#ac5118}.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.textarea:focus,.select select:focus,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.textarea,.select select.is-focused,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.textarea:active,.select select:active,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.textarea,.select select.is-active{border-color:#f0f0f0;box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.textarea[disabled],.select select[disabled],fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .textarea,fieldset[disabled] .select select,.select fieldset[disabled] select{background-color:whitesmoke;border-color:whitesmoke;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.select select[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.select select[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder{color:rgba(122,122,122,0.3)}.input,#documenter .docs-sidebar form.docs-search>input,.textarea{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white,.is-white.textarea{border-color:white}.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.textarea:focus,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-white.is-focused,.is-white.is-focused.textarea,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.textarea:active,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-white.is-active,.is-white.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black,.is-black.textarea{border-color:#0a0a0a}.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.textarea:focus,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-black.is-focused,.is-black.is-focused.textarea,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.textarea:active,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-black.is-active,.is-black.is-active.textarea{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light,.is-light.textarea{border-color:whitesmoke}.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.textarea:focus,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-light.is-focused,.is-light.is-focused.textarea,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.textarea:active,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-light.is-active,.is-light.is-active.textarea{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.input,.content kbd.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.is-dark.textarea,.content kbd.textarea{border-color:#363636}.is-dark.input:focus,.content kbd.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.is-focused.input,.content kbd.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-dark.is-focused,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.input:active,.content kbd.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.is-active.input,.content kbd.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-dark.is-active,.is-dark.is-active.textarea,.content kbd.is-active.textarea{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.input,.docstring>section>a.input.docs-sourcelink,#documenter .docs-sidebar form.docs-search>input.is-primary,.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink{border-color:#4eb5de}.is-primary.input:focus,.docstring>section>a.input.docs-sourcelink:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.is-focused.input,.docstring>section>a.is-focused.input.docs-sourcelink,#documenter .docs-sidebar form.docs-search>input.is-primary.is-focused,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.input:active,.docstring>section>a.input.docs-sourcelink:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.is-active.input,.docstring>section>a.is-active.input.docs-sourcelink,#documenter .docs-sidebar form.docs-search>input.is-primary.is-active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link,.is-link.textarea{border-color:#ac5118}.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.textarea:focus,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-link.is-focused,.is-link.is-focused.textarea,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.textarea:active,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-link.is-active,.is-link.is-active.textarea{box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info,.is-info.textarea{border-color:#209cee}.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.textarea:focus,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-info.is-focused,.is-info.is-focused.textarea,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.textarea:active,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-info.is-active,.is-info.is-active.textarea{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success,.is-success.textarea{border-color:#22c35b}.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.textarea:focus,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-success.is-focused,.is-success.is-focused.textarea,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.textarea:active,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-success.is-active,.is-success.is-active.textarea{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.textarea:focus,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-warning.is-focused,.is-warning.is-focused.textarea,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.textarea:active,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-warning.is-active,.is-warning.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger,.is-danger.textarea{border-color:#da0b00}.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.textarea:focus,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-danger.is-focused,.is-danger.is-focused.textarea,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.textarea:active,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-danger.is-active,.is-danger.is-active.textarea{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.input,#documenter .docs-sidebar form.docs-search>input,.is-small.textarea{border-radius:2px;font-size:0.75rem}.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium,.is-medium.textarea{font-size:1.25rem}.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline,.is-inline.textarea{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:290486px;padding-left:1em;padding-right:1em}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:0.625em;resize:vertical}.textarea:not([rows]){max-height:600px;min-height:120px}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:0.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.25em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#ac5118;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:whitesmoke}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:white}.select.is-white select{border-color:white}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:black}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:whitesmoke}.select.is-light select{border-color:whitesmoke}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#ac5118}.select.is-link select{border-color:#ac5118}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#964615}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#118fe4}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83d}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:0.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:0.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.select.is-loading:after{font-size:0.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:white;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:white}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:white}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:white}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:black;border-color:transparent;color:white}.file.is-light .file-cta{background-color:whitesmoke;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eeeeee;border-color:transparent;color:#363636}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:#363636}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:#363636}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:whitesmoke}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:whitesmoke}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:whitesmoke}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#ac5118;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#a14c16;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(172,81,24,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#964615;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1496ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#118fe4;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:0.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.file.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eeeeee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:whitesmoke;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:0.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:0.75rem;margin-top:0.25rem}.help.is-white{color:white}.help.is-black{color:#0a0a0a}.help.is-light{color:whitesmoke}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#ac5118}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:0.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:0.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:0.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:left}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#7a7a7a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.select~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.select~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.select~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.select~.icon{font-size:0.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.25em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.25em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:0.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.control.is-loading:after{font-size:0.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#ac5118;display:flex;justify-content:center;padding:0 0.75em}.breadcrumb a:hover{color:#884013}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#2a5398;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:\"\\0002f\"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:0.5em}.breadcrumb .icon:last-child{margin-left:0.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:0.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:\"\\02192\"}.breadcrumb.has-bullet-separator li+li::before{content:\"\\02022\"}.breadcrumb.has-dot-separator li+li::before{content:\"\\000b7\"}.breadcrumb.has-succeeds-separator li+li::before{content:\"\\0227B\"}.card{background-color:white;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#202020;max-width:100%;position:relative}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#2a5398;display:flex;flex-grow:1;font-weight:700;padding:0.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem}.card-image{display:block;position:relative}.card-content{background-color:transparent;padding:1rem 1.25rem}.card-footer{background-color:transparent;border-top:1px solid #dbdbdb;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:0.75rem}.card-footer-item:not(:last-child){border-right:1px solid #dbdbdb}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:0.5rem;padding-top:0.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:whitesmoke;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#ac5118;color:#fff}.dropdown-divider{background-color:#dbdbdb;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:0.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:0.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:0.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.list{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}.list-item{display:block;padding:0.5em 1em}.list-item:not(a){color:#202020}.list-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.list-item:not(:last-child){border-bottom:1px solid #dbdbdb}.list-item.is-active{background-color:#ac5118;color:#fff}a.list-item{background-color:whitesmoke;cursor:pointer}.media{align-items:flex-start;display:flex;text-align:left}.media .content:not(:last-child){margin-bottom:0.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:0.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:0.5rem}.media .media .media{padding-top:0.5rem}.media .media .media+.media{margin-top:0.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:0.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#202020;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:whitesmoke;color:#2a5398}.menu-list a.is-active{background-color:#ac5118;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:0.75em;padding-left:0.75em}.menu-label{color:#7a7a7a;font-size:0.75em;letter-spacing:0.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:whitesmoke;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:0.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:white}.message.is-white .message-header{background-color:white;color:#0a0a0a}.message.is-white .message-body{border-color:white;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:white}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:whitesmoke;color:#363636}.message.is-light .message-body{border-color:whitesmoke;color:#505050}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:whitesmoke}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636;color:#2a2a2a}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#f6fbfd}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1f556a}.message.is-link{background-color:#fef9f6}.message.is-link .message-header{background-color:#ac5118;color:#fff}.message.is-link .message-body{border-color:#ac5118;color:#6c3513}.message.is-info{background-color:#f6fbfe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#12537e}.message.is-success{background-color:#f6fdf9}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#0f361d}.message.is-warning{background-color:#fffdf5}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#3b3108}.message.is-danger{background-color:#fff5f5}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#9b0c04}.message-header{align-items:center;background-color:#202020;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#202020;padding:1em 1.25em}.message-body code,.message-body pre{background-color:white}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),print{.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:whitesmoke;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#2a5398;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:0.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:white;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:white;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:white;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:white;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:white}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:white}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:black;color:white}.navbar.is-black .navbar-brand .navbar-link::after{border-color:white}.navbar.is-black .navbar-burger{color:white}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:white}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:black;color:white}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:white}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:black;color:white}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:white}}.navbar.is-light{background-color:whitesmoke;color:#363636}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:#363636}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-brand .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-burger{color:#363636}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:#363636}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#363636}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:whitesmoke}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:whitesmoke}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:whitesmoke}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:whitesmoke}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:whitesmoke}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:whitesmoke}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:whitesmoke}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:whitesmoke}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:whitesmoke}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:whitesmoke}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#ac5118;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#964615;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#964615;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#964615;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#ac5118;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 whitesmoke}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 whitesmoke}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#ac5118}.navbar-item{display:block;flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#ac5118}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#ac5118;border-bottom-style:solid;border-bottom-width:3px;color:#ac5118;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#ac5118;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:whitesmoke;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:white;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#ac5118}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item{display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:white;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#ac5118}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-0.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:0.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:0.25rem;padding-left:0.5em;padding-right:0.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#363636;min-width:2.25em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#884013}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#2e63b8}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:0.5}.pagination-previous,.pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.pagination-link.is-current{background-color:#ac5118;border-color:#ac5118;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel-heading,.panel-tabs,.panel-block{border-bottom:1px solid #dbdbdb;border-left:1px solid #dbdbdb;border-right:1px solid #dbdbdb}.panel-heading:first-child,.panel-tabs:first-child,.panel-block:first-child{border-top:1px solid #dbdbdb}.panel-heading{background-color:whitesmoke;border-radius:4px 4px 0 0;color:#2a5398;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}.panel-tabs{align-items:flex-end;display:flex;font-size:0.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#202020}.panel-list a:hover{color:#ac5118}.panel-block{align-items:center;color:#2a5398;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type=\"checkbox\"]{margin-right:0.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#ac5118;color:#363636}.panel-block.is-active .panel-icon{color:#ac5118}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:whitesmoke}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:0.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#202020;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#2a5398;color:#2a5398}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#ac5118;color:#ac5118}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:0.5em}.tabs .icon:last-child{margin-left:0.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:whitesmoke;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:white;border-color:#dbdbdb;border-bottom-color:transparent !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:whitesmoke;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-radius:4px 0 0 4px}.tabs.is-toggle li:last-child a{border-radius:0 4px 4px 0}.tabs.is-toggle li.is-active a{background-color:#ac5118;border-color:#ac5118;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:0.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:0.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}.columns:last-child{margin-bottom:-0.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - 0.75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: 0.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: 0.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: 0.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: 0.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: 0.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: 0.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: 0.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: 0.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: 0.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: 0.25rem}}.columns.is-variable.is-2{--columnGap: 0.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: 0.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: 0.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: 0.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: 0.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: 0.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: 0.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: 0.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: 0.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: 0.5rem}}.columns.is-variable.is-3{--columnGap: 0.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: 0.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: 0.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: 0.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: 0.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: 0.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: 0.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: 0.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: 0.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: 0.75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}.tile.is-ancestor:last-child{margin-bottom:-0.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:0.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:0.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:white;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:white}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:white}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}}.hero.is-black{background-color:#0a0a0a;color:white}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:white}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:white}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:black;color:white}.hero.is-black .tabs a{color:white;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:white}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:white;border-color:white;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:whitesmoke;color:#363636}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:#363636}.hero.is-light .subtitle{color:rgba(54,54,54,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:#363636}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:whitesmoke}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(54,54,54,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.hero.is-light .tabs a{color:#363636;opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:#363636}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:#363636;border-color:#363636;color:whitesmoke}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:whitesmoke}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:whitesmoke}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(245,245,245,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:whitesmoke}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(245,245,245,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:whitesmoke}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:whitesmoke;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:whitesmoke}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.content kbd.hero .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover,.content kbd.hero .tabs.is-toggle li.is-active a:hover{background-color:whitesmoke;border-color:whitesmoke;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#ac5118;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#ac5118}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#964615;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ac5118}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #86260b 0%, #ac5118 71%, #c87816 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #86260b 0%, #ac5118 71%, #c87816 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#118fe4;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#2a5398}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f0c1\"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:0.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#b8dffa;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#9beeb8;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ff857e;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:#fff}.admonition.is-compat{background-color:#99e6f0;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}.admonition-header:before{font-family:\"Font Awesome 5 Free\";font-weight:900;margin-right:0.75em;content:\"\\f06a\"}.admonition-body{color:#202020;padding:1em 1.25em}.admonition-body pre{background-color:#e7eef8}.admonition-body code{background-color:#e7eef8}.docstring{margin-bottom:1em;background-color:transparent;border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.75rem;background-color:#e8e8e8;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb}.docstring>header code{background-color:transparent}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:1rem 1.25rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:0.625rem;bottom:0.5rem}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#f0f0f0}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#ac5118}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#2a5398}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#2a5398}.hljs{background:initial !important;padding:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#f0f0f0;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label,#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}#documenter .docs-main header.docs-navbar .docs-right .docs-settings-button{margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{font-size:1.5rem;margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:0.2rem 0rem 0.4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#f0f0f0;background-color:#2a5398;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1em;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:0.4rem 0rem 0.8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:0.95em;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:0.75em;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f054\"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:\"\\f078\"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#f0f0f0;background:#2a5398}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#f0f0f0;background-color:#1d3968}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#f0f0f0}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#f0f0f0;color:#202020}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#aec4e9;color:#202020}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:0.85em;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:\"⚬\";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#214278}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#183058}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#214278}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#183058}}#documenter .docs-main #documenter-search-info{margin-bottom:1rem}#documenter .docs-main #documenter-search-results{list-style-type:circle;list-style-position:outside}#documenter .docs-main #documenter-search-results li{margin-left:2rem}#documenter .docs-main #documenter-search-results .docs-highlight{background-color:yellow}.hljs{display:block;overflow-x:auto;padding:0.5em;background:#F0F0F0}.hljs,.hljs-subst{color:#444}.hljs-comment{color:#888888}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}\n"
  },
  {
    "path": "docs/src/assets/themes/documenter-light.css.css",
    "content": "﻿@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.delete,.modal-close,.is-unselectable,.button,.file,.breadcrumb,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select:not(.is-multiple):not(.is-loading)::after,.navbar-link:not(.is-arrowless)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:\" \";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.box:not(:last-child),.content:not(:last-child),.notification:not(:last-child),.progress:not(:last-child),.table:not(:last-child),.table-container:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.block:not(:last-child),.highlight:not(:last-child),.breadcrumb:not(:last-child),.level:not(:last-child),.list:not(:last-child),.message:not(:last-child),.tabs:not(:last-child),.admonition:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.delete::before,.modal-close::before,.delete::after,.modal-close::after{background-color:white;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:hover,.modal-close:hover,.delete:focus,.modal-close:focus{background-color:rgba(10,10,10,0.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,0.4)}.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete,.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.loader,.select.is-loading::after,.control.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:\"\";display:block;height:1em;position:relative;width:1em}.is-overlay,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.modal,.modal-background,.hero-video{bottom:0;left:0;position:absolute;right:0;top:0}.button,.input,#documenter .docs-sidebar form.docs-search>input,.textarea,.select select,.file-cta,.file-name,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}.button:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.textarea:focus,.select select:focus,.file-cta:focus,.file-name:focus,.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.is-focused.button,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.textarea,.select select.is-focused,.is-focused.file-cta,.is-focused.file-name,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.button:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.textarea:active,.select select:active,.file-cta:active,.file-name:active,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.is-active.button,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.textarea,.select select.is-active,.is-active.file-cta,.is-active.file-name,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis{outline:none}.button[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.textarea[disabled],.select select[disabled],.file-cta[disabled],.file-name[disabled],.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],fieldset[disabled] .button,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .textarea,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}html{background-color:#f0f0f0;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:\"Montserrat\", sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:\"Source Code Pro\", monospace}body{color:#202020;font-size:1em;font-weight:400;line-height:1.5}a{color:#ac5118;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#884013}code{background-color:#e7eef8;color:#000000;font-size:0.875em;font-weight:normal;padding:0.1em}hr{background-color:whitesmoke;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=\"checkbox\"],input[type=\"radio\"]{vertical-align:baseline}small{font-size:0.875em}span{font-style:inherit;font-weight:inherit}strong{color:#2a5398;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#e7eef8;color:#202020;font-size:0.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:left}table th{color:#2a5398}.is-clearfix::after{clear:both;content:\" \";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:0.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:0.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:0.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:0.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:0.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:0.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:0.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:white !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:white !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:black !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:whitesmoke !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:whitesmoke !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-link{color:#ac5118 !important}a.has-text-link:hover,a.has-text-link:focus{color:#7f3c12 !important}.has-background-link{background-color:#ac5118 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#0f81cc !important}.has-background-info{background-color:#209cee !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#7a7a7a !important}.has-background-grey{background-color:#7a7a7a !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:whitesmoke !important}.has-background-white-ter{background-color:whitesmoke !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:\"Montserrat\", sans-serif !important}.is-family-secondary{font-family:\"Montserrat\", sans-serif !important}.is-family-sans-serif{font-family:\"Montserrat\", sans-serif !important}.is-family-monospace{font-family:\"Source Code Pro\", monospace !important}.is-family-code{font-family:\"Source Code Pro\", monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}.box{background-color:white;border-radius:6px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#202020;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #ac5118}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #ac5118}.button{background-color:white;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:0.75em;padding-right:0.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}.button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#884013}.button:focus,.button.is-focused{border-color:#2e63b8;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#202020;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:whitesmoke;color:#2a5398}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#2a5398}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:white;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:white;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:white}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:black}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:white}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:white;color:white}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:white;border-color:white;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent white white !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:white}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:white}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:white}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:white}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:black;border-color:transparent;color:white}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:white;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:white;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent white white !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:white}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;color:white}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:white;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}.button.is-light{background-color:whitesmoke;border-color:transparent;color:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eeeeee;border-color:transparent;color:#363636}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:#363636}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:#363636}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:whitesmoke;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:whitesmoke}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:#292929}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:whitesmoke}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:whitesmoke;border-color:whitesmoke;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:#363636;color:whitesmoke}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:whitesmoke}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:whitesmoke}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:whitesmoke}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:whitesmoke;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#e8e8e8}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:whitesmoke;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:whitesmoke}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:whitesmoke;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link{background-color:#ac5118;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#a14c16;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#964615;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#ac5118;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#ac5118}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ac5118}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#ac5118;color:#ac5118}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#ac5118;border-color:#ac5118;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #ac5118 #ac5118 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#ac5118;box-shadow:none;color:#ac5118}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ac5118}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ac5118 #ac5118 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1496ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#118fe4;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{border-radius:2px;font-size:0.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:white;border-color:#dbdbdb;box-shadow:none;opacity:0.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}.button.is-static{background-color:whitesmoke;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:290486px;padding-left:1em;padding-right:1em}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:0.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1056px){.container{max-width:992px}.container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){.container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){.container{max-width:1152px}}@media screen and (min-width: 1408px){.container{max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#2a5398;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:whitesmoke;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0.7rem 0.5rem;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#2a5398}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#2a5398}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#2a5398}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:0.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:290486px}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:whitesmoke;border-radius:4px;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:white}.notification pre code{background:transparent}.notification>.delete{position:absolute;right:0.5rem;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:white;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:white}.notification.is-light{background-color:whitesmoke;color:#363636}.notification.is-dark,.content kbd.notification{background-color:#363636;color:whitesmoke}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-link{background-color:#ac5118;color:#fff}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-danger{background-color:#da0b00;color:#fff}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#dbdbdb}.progress::-webkit-progress-value{background-color:#202020}.progress::-moz-progress-bar{background-color:#202020}.progress::-ms-fill{background-color:#202020;border:none}.progress.is-white::-webkit-progress-value{background-color:white}.progress.is-white::-moz-progress-bar{background-color:white}.progress.is-white::-ms-fill{background-color:white}.progress.is-white:indeterminate{background-image:linear-gradient(to right, white 30%, #dbdbdb 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%)}.progress.is-light::-webkit-progress-value{background-color:whitesmoke}.progress.is-light::-moz-progress-bar{background-color:whitesmoke}.progress.is-light::-ms-fill{background-color:whitesmoke}.progress.is-light:indeterminate{background-image:linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #dbdbdb 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%)}.progress.is-link::-webkit-progress-value{background-color:#ac5118}.progress.is-link::-moz-progress-bar{background-color:#ac5118}.progress.is-link::-ms-fill{background-color:#ac5118}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #ac5118 30%, #dbdbdb 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #dbdbdb 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #dbdbdb 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #dbdbdb 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#dbdbdb;background-image:linear-gradient(to right, #202020 30%, #dbdbdb 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:0.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:white;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:white;border-color:white;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:white}.table td.is-light,.table th.is-light{background-color:whitesmoke;border-color:whitesmoke;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:whitesmoke}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#ac5118;border-color:#ac5118;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table th{color:#2a5398}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#2a5398}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#2a5398}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:whitesmoke}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .docstring>section>a.docs-sourcelink,.tags .content kbd,.content .tags kbd{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child){margin-right:0.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .docstring>section>a.docs-sourcelink,.tags.is-centered .content kbd,.content .tags.is-centered kbd{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .docstring>section>a.docs-sourcelink,.tags.has-addons .content kbd,.content .tags.has-addons kbd{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body),.docstring>section>a.docs-sourcelink:not(body),.content kbd:not(body){align-items:center;background-color:whitesmoke;border-radius:4px;color:#202020;display:inline-flex;font-size:0.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete,.content kbd:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}.tag.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body),.content kbd.is-white:not(body){background-color:white;color:#0a0a0a}.tag.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body),.content kbd.is-black:not(body){background-color:#0a0a0a;color:white}.tag.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body),.content kbd.is-light:not(body){background-color:whitesmoke;color:#363636}.tag.is-dark:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content kbd:not(body){background-color:#363636;color:whitesmoke}.tag.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body),.content kbd.is-primary:not(body){background-color:#4eb5de;color:#fff}.tag.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body),.content kbd.is-link:not(body){background-color:#ac5118;color:#fff}.tag.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body),.content kbd.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body),.content kbd.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body),.content kbd.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body),.content kbd.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body),.content kbd.is-normal:not(body){font-size:0.75rem}.tag.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body),.content kbd.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body),.content kbd.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}.tag:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body),.content kbd.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after{background-color:currentColor;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active,.content kbd.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input.tag:not(body){border-radius:290486px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:0.75em}.title sup,.subtitle sup{font-size:0.75em}.title .tag,.title .docstring>section>a.docs-sourcelink,.title .content kbd,.content .title kbd,.subtitle .tag,.subtitle .docstring>section>a.docs-sourcelink,.subtitle .content kbd,.content .subtitle kbd{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-0.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:0.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:0.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:whitesmoke;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.input,#documenter .docs-sidebar form.docs-search>input,.textarea,.select select{background-color:white;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder,.textarea::-moz-placeholder,.select select::-moz-placeholder{color:rgba(54,54,54,0.3)}.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.select select::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder,.textarea:-moz-placeholder,.select select:-moz-placeholder{color:rgba(54,54,54,0.3)}.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,.textarea:-ms-input-placeholder,.select select:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.textarea:hover,.select select:hover,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered,.is-hovered.textarea,.select select.is-hovered{border-color:#ac5118}.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.textarea:focus,.select select:focus,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.textarea,.select select.is-focused,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.textarea:active,.select select:active,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.textarea,.select select.is-active{border-color:#f0f0f0;box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.textarea[disabled],.select select[disabled],fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .textarea,fieldset[disabled] .select select,.select fieldset[disabled] select{background-color:whitesmoke;border-color:whitesmoke;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.select select[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.select select[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder{color:rgba(122,122,122,0.3)}.input,#documenter .docs-sidebar form.docs-search>input,.textarea{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white,.is-white.textarea{border-color:white}.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.textarea:focus,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-white.is-focused,.is-white.is-focused.textarea,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.textarea:active,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-white.is-active,.is-white.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black,.is-black.textarea{border-color:#0a0a0a}.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.textarea:focus,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-black.is-focused,.is-black.is-focused.textarea,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.textarea:active,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-black.is-active,.is-black.is-active.textarea{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light,.is-light.textarea{border-color:whitesmoke}.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.textarea:focus,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-light.is-focused,.is-light.is-focused.textarea,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.textarea:active,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-light.is-active,.is-light.is-active.textarea{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.input,.content kbd.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.is-dark.textarea,.content kbd.textarea{border-color:#363636}.is-dark.input:focus,.content kbd.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.is-focused.input,.content kbd.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-dark.is-focused,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.input:active,.content kbd.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.is-active.input,.content kbd.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-dark.is-active,.is-dark.is-active.textarea,.content kbd.is-active.textarea{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.input,.docstring>section>a.input.docs-sourcelink,#documenter .docs-sidebar form.docs-search>input.is-primary,.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink{border-color:#4eb5de}.is-primary.input:focus,.docstring>section>a.input.docs-sourcelink:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.is-focused.input,.docstring>section>a.is-focused.input.docs-sourcelink,#documenter .docs-sidebar form.docs-search>input.is-primary.is-focused,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.input:active,.docstring>section>a.input.docs-sourcelink:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.is-active.input,.docstring>section>a.is-active.input.docs-sourcelink,#documenter .docs-sidebar form.docs-search>input.is-primary.is-active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link,.is-link.textarea{border-color:#ac5118}.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.textarea:focus,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-link.is-focused,.is-link.is-focused.textarea,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.textarea:active,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-link.is-active,.is-link.is-active.textarea{box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info,.is-info.textarea{border-color:#209cee}.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.textarea:focus,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-info.is-focused,.is-info.is-focused.textarea,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.textarea:active,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-info.is-active,.is-info.is-active.textarea{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success,.is-success.textarea{border-color:#22c35b}.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.textarea:focus,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-success.is-focused,.is-success.is-focused.textarea,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.textarea:active,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-success.is-active,.is-success.is-active.textarea{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.textarea:focus,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-warning.is-focused,.is-warning.is-focused.textarea,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.textarea:active,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-warning.is-active,.is-warning.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger,.is-danger.textarea{border-color:#da0b00}.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.textarea:focus,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-danger.is-focused,.is-danger.is-focused.textarea,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.textarea:active,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-danger.is-active,.is-danger.is-active.textarea{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.input,#documenter .docs-sidebar form.docs-search>input,.is-small.textarea{border-radius:2px;font-size:0.75rem}.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium,.is-medium.textarea{font-size:1.25rem}.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline,.is-inline.textarea{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:290486px;padding-left:1em;padding-right:1em}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:0.625em;resize:vertical}.textarea:not([rows]){max-height:600px;min-height:120px}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:0.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.25em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#ac5118;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:whitesmoke}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:white}.select.is-white select{border-color:white}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:black}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:whitesmoke}.select.is-light select{border-color:whitesmoke}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#ac5118}.select.is-link select{border-color:#ac5118}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#964615}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#118fe4}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83d}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:0.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:0.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.select.is-loading:after{font-size:0.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:white;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:white}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:white}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:white}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:black;border-color:transparent;color:white}.file.is-light .file-cta{background-color:whitesmoke;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eeeeee;border-color:transparent;color:#363636}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:#363636}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:#363636}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:whitesmoke}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:whitesmoke}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:whitesmoke}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#ac5118;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#a14c16;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(172,81,24,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#964615;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1496ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#118fe4;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:0.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.file.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eeeeee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:whitesmoke;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:0.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:0.75rem;margin-top:0.25rem}.help.is-white{color:white}.help.is-black{color:#0a0a0a}.help.is-light{color:whitesmoke}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#ac5118}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:0.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:0.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:0.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:left}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#7a7a7a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.select~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.select~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.select~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.select~.icon{font-size:0.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.25em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.25em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:0.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.control.is-loading:after{font-size:0.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#ac5118;display:flex;justify-content:center;padding:0 0.75em}.breadcrumb a:hover{color:#884013}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#2a5398;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:\"\\0002f\"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:0.5em}.breadcrumb .icon:last-child{margin-left:0.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:0.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:\"\\02192\"}.breadcrumb.has-bullet-separator li+li::before{content:\"\\02022\"}.breadcrumb.has-dot-separator li+li::before{content:\"\\000b7\"}.breadcrumb.has-succeeds-separator li+li::before{content:\"\\0227B\"}.card{background-color:white;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#202020;max-width:100%;position:relative}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#2a5398;display:flex;flex-grow:1;font-weight:700;padding:0.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem}.card-image{display:block;position:relative}.card-content{background-color:transparent;padding:1rem 1.25rem}.card-footer{background-color:transparent;border-top:1px solid #dbdbdb;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:0.75rem}.card-footer-item:not(:last-child){border-right:1px solid #dbdbdb}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:0.5rem;padding-top:0.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:whitesmoke;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#ac5118;color:#fff}.dropdown-divider{background-color:#dbdbdb;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:0.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:0.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:0.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.list{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}.list-item{display:block;padding:0.5em 1em}.list-item:not(a){color:#202020}.list-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.list-item:not(:last-child){border-bottom:1px solid #dbdbdb}.list-item.is-active{background-color:#ac5118;color:#fff}a.list-item{background-color:whitesmoke;cursor:pointer}.media{align-items:flex-start;display:flex;text-align:left}.media .content:not(:last-child){margin-bottom:0.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:0.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:0.5rem}.media .media .media{padding-top:0.5rem}.media .media .media+.media{margin-top:0.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:0.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#202020;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:whitesmoke;color:#2a5398}.menu-list a.is-active{background-color:#ac5118;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:0.75em;padding-left:0.75em}.menu-label{color:#7a7a7a;font-size:0.75em;letter-spacing:0.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:whitesmoke;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:0.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:white}.message.is-white .message-header{background-color:white;color:#0a0a0a}.message.is-white .message-body{border-color:white;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:white}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:whitesmoke;color:#363636}.message.is-light .message-body{border-color:whitesmoke;color:#505050}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:whitesmoke}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636;color:#2a2a2a}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#f6fbfd}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1f556a}.message.is-link{background-color:#fef9f6}.message.is-link .message-header{background-color:#ac5118;color:#fff}.message.is-link .message-body{border-color:#ac5118;color:#6c3513}.message.is-info{background-color:#f6fbfe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#12537e}.message.is-success{background-color:#f6fdf9}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#0f361d}.message.is-warning{background-color:#fffdf5}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#3b3108}.message.is-danger{background-color:#fff5f5}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#9b0c04}.message-header{align-items:center;background-color:#202020;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#202020;padding:1em 1.25em}.message-body code,.message-body pre{background-color:white}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),print{.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:whitesmoke;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#2a5398;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:0.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:white;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:white;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:white;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:white;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:white}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:white}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:black;color:white}.navbar.is-black .navbar-brand .navbar-link::after{border-color:white}.navbar.is-black .navbar-burger{color:white}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:white}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:black;color:white}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:white}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:black;color:white}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:white}}.navbar.is-light{background-color:whitesmoke;color:#363636}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:#363636}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-brand .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-burger{color:#363636}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:#363636}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#363636}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:whitesmoke}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:whitesmoke}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:whitesmoke}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:whitesmoke}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:whitesmoke}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:whitesmoke}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:whitesmoke}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:whitesmoke}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:whitesmoke}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:whitesmoke}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#ac5118;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#964615;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#964615;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#964615;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#ac5118;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 whitesmoke}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 whitesmoke}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#ac5118}.navbar-item{display:block;flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#ac5118}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#ac5118;border-bottom-style:solid;border-bottom-width:3px;color:#ac5118;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#ac5118;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:whitesmoke;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:white;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#ac5118}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item{display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:white;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#ac5118}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-0.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:0.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:0.25rem;padding-left:0.5em;padding-right:0.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#363636;min-width:2.25em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#884013}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#2e63b8}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:0.5}.pagination-previous,.pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.pagination-link.is-current{background-color:#ac5118;border-color:#ac5118;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel-heading,.panel-tabs,.panel-block{border-bottom:1px solid #dbdbdb;border-left:1px solid #dbdbdb;border-right:1px solid #dbdbdb}.panel-heading:first-child,.panel-tabs:first-child,.panel-block:first-child{border-top:1px solid #dbdbdb}.panel-heading{background-color:whitesmoke;border-radius:4px 4px 0 0;color:#2a5398;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}.panel-tabs{align-items:flex-end;display:flex;font-size:0.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#202020}.panel-list a:hover{color:#ac5118}.panel-block{align-items:center;color:#2a5398;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type=\"checkbox\"]{margin-right:0.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#ac5118;color:#363636}.panel-block.is-active .panel-icon{color:#ac5118}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:whitesmoke}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:0.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#202020;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#2a5398;color:#2a5398}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#ac5118;color:#ac5118}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:0.5em}.tabs .icon:last-child{margin-left:0.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:whitesmoke;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:white;border-color:#dbdbdb;border-bottom-color:transparent !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:whitesmoke;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-radius:4px 0 0 4px}.tabs.is-toggle li:last-child a{border-radius:0 4px 4px 0}.tabs.is-toggle li.is-active a{background-color:#ac5118;border-color:#ac5118;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:0.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:0.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}.columns:last-child{margin-bottom:-0.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - 0.75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: 0.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: 0.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: 0.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: 0.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: 0.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: 0.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: 0.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: 0.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: 0.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: 0.25rem}}.columns.is-variable.is-2{--columnGap: 0.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: 0.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: 0.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: 0.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: 0.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: 0.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: 0.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: 0.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: 0.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: 0.5rem}}.columns.is-variable.is-3{--columnGap: 0.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: 0.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: 0.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: 0.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: 0.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: 0.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: 0.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: 0.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: 0.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: 0.75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}.tile.is-ancestor:last-child{margin-bottom:-0.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:0.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:0.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:white;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:white}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:white}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}}.hero.is-black{background-color:#0a0a0a;color:white}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:white}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:white}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:black;color:white}.hero.is-black .tabs a{color:white;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:white}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:white;border-color:white;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:whitesmoke;color:#363636}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:#363636}.hero.is-light .subtitle{color:rgba(54,54,54,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:#363636}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:whitesmoke}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(54,54,54,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.hero.is-light .tabs a{color:#363636;opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:#363636}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:#363636;border-color:#363636;color:whitesmoke}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:whitesmoke}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:whitesmoke}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(245,245,245,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:whitesmoke}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(245,245,245,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:whitesmoke}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:whitesmoke;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:whitesmoke}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.content kbd.hero .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover,.content kbd.hero .tabs.is-toggle li.is-active a:hover{background-color:whitesmoke;border-color:whitesmoke;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#ac5118;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#ac5118}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#964615;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ac5118}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #86260b 0%, #ac5118 71%, #c87816 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #86260b 0%, #ac5118 71%, #c87816 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#118fe4;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#2a5398}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f0c1\"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:0.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#b8dffa;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#9beeb8;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ff857e;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:#fff}.admonition.is-compat{background-color:#99e6f0;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}.admonition-header:before{font-family:\"Font Awesome 5 Free\";font-weight:900;margin-right:0.75em;content:\"\\f06a\"}.admonition-body{color:#202020;padding:1em 1.25em}.admonition-body pre{background-color:#e7eef8}.admonition-body code{background-color:#e7eef8}.docstring{margin-bottom:1em;background-color:transparent;border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.75rem;background-color:#e8e8e8;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb}.docstring>header code{background-color:transparent}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:1rem 1.25rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:0.625rem;bottom:0.5rem}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#f0f0f0}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#ac5118}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#2a5398}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#2a5398}.hljs{background:initial !important;padding:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#f0f0f0;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label,#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}#documenter .docs-main header.docs-navbar .docs-right .docs-settings-button{margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{font-size:1.5rem;margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:0.2rem 0rem 0.4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#f0f0f0;background-color:#2a5398;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1em;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:0.4rem 0rem 0.8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:0.95em;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:0.75em;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f054\"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:\"\\f078\"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#f0f0f0;background:#2a5398}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#f0f0f0;background-color:#1d3968}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#f0f0f0}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#f0f0f0;color:#202020}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#aec4e9;color:#202020}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:0.85em;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:\"⚬\";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#214278}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#183058}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#214278}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#183058}}#documenter .docs-main #documenter-search-info{margin-bottom:1rem}#documenter .docs-main #documenter-search-results{list-style-type:circle;list-style-position:outside}#documenter .docs-main #documenter-search-results li{margin-left:2rem}#documenter .docs-main #documenter-search-results .docs-highlight{background-color:yellow}.hljs{display:block;overflow-x:auto;padding:0.5em;background:#F0F0F0}.hljs,.hljs-subst{color:#444}.hljs-comment{color:#888888}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}\n"
  },
  {
    "path": "docs/src/assets/themes/light.scss",
    "content": "﻿@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.delete,.modal-close,.is-unselectable,.button,.file,.breadcrumb,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select:not(.is-multiple):not(.is-loading)::after,.navbar-link:not(.is-arrowless)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:\" \";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.box:not(:last-child),.content:not(:last-child),.notification:not(:last-child),.progress:not(:last-child),.table:not(:last-child),.table-container:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.block:not(:last-child),.highlight:not(:last-child),.breadcrumb:not(:last-child),.level:not(:last-child),.list:not(:last-child),.message:not(:last-child),.tabs:not(:last-child),.admonition:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.delete::before,.modal-close::before,.delete::after,.modal-close::after{background-color:white;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:hover,.modal-close:hover,.delete:focus,.modal-close:focus{background-color:rgba(10,10,10,0.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,0.4)}.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete,.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.loader,.select.is-loading::after,.control.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:\"\";display:block;height:1em;position:relative;width:1em}.is-overlay,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.modal,.modal-background,.hero-video{bottom:0;left:0;position:absolute;right:0;top:0}.button,.input,#documenter .docs-sidebar form.docs-search>input,.textarea,.select select,.file-cta,.file-name,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}.button:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.textarea:focus,.select select:focus,.file-cta:focus,.file-name:focus,.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.is-focused.button,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.textarea,.select select.is-focused,.is-focused.file-cta,.is-focused.file-name,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.button:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.textarea:active,.select select:active,.file-cta:active,.file-name:active,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.is-active.button,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.textarea,.select select.is-active,.is-active.file-cta,.is-active.file-name,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis{outline:none}.button[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.textarea[disabled],.select select[disabled],.file-cta[disabled],.file-name[disabled],.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],fieldset[disabled] .button,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .textarea,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}html{background-color:#f0f0f0;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:\"Montserrat\", sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:\"Source Code Pro\", monospace}body{color:#202020;font-size:1em;font-weight:400;line-height:1.5}a{color:#ac5118;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#884013}code{background-color:#e7eef8;color:#000000;font-size:0.875em;font-weight:normal;padding:0.1em}hr{background-color:whitesmoke;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=\"checkbox\"],input[type=\"radio\"]{vertical-align:baseline}small{font-size:0.875em}span{font-style:inherit;font-weight:inherit}strong{color:#2a5398;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#e7eef8;color:#202020;font-size:0.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:left}table th{color:#2a5398}.is-clearfix::after{clear:both;content:\" \";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:0.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:0.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:0.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:0.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:0.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:0.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:0.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:white !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:white !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:black !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:whitesmoke !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:whitesmoke !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-link{color:#ac5118 !important}a.has-text-link:hover,a.has-text-link:focus{color:#7f3c12 !important}.has-background-link{background-color:#ac5118 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#0f81cc !important}.has-background-info{background-color:#209cee !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#7a7a7a !important}.has-background-grey{background-color:#7a7a7a !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:whitesmoke !important}.has-background-white-ter{background-color:whitesmoke !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:\"Montserrat\", sans-serif !important}.is-family-secondary{font-family:\"Montserrat\", sans-serif !important}.is-family-sans-serif{font-family:\"Montserrat\", sans-serif !important}.is-family-monospace{font-family:\"Source Code Pro\", monospace !important}.is-family-code{font-family:\"Source Code Pro\", monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}.box{background-color:white;border-radius:6px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#202020;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #ac5118}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #ac5118}.button{background-color:white;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:0.75em;padding-right:0.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}.button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#884013}.button:focus,.button.is-focused{border-color:#2e63b8;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#202020;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:whitesmoke;color:#2a5398}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#2a5398}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:white;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:white;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:white}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:black}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:white}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:white;color:white}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:white;border-color:white;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent white white !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:white}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:white}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:white}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:white}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:black;border-color:transparent;color:white}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:white;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:white;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent white white !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:white}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent white white !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;color:white}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:white;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:white;box-shadow:none;color:white}.button.is-light{background-color:whitesmoke;border-color:transparent;color:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eeeeee;border-color:transparent;color:#363636}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:#363636}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:#363636}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:whitesmoke;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:whitesmoke}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:#292929}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:whitesmoke}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:whitesmoke;border-color:whitesmoke;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:#363636;color:whitesmoke}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:whitesmoke}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:whitesmoke}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:whitesmoke}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:whitesmoke;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#e8e8e8}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:whitesmoke;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:whitesmoke}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent whitesmoke whitesmoke !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;color:whitesmoke}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:whitesmoke;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:whitesmoke;box-shadow:none;color:whitesmoke}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link{background-color:#ac5118;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#a14c16;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#964615;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#ac5118;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#ac5118}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ac5118}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#ac5118;color:#ac5118}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#ac5118;border-color:#ac5118;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #ac5118 #ac5118 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#ac5118;box-shadow:none;color:#ac5118}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ac5118}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ac5118 #ac5118 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1496ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#118fe4;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{border-radius:2px;font-size:0.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:white;border-color:#dbdbdb;box-shadow:none;opacity:0.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}.button.is-static{background-color:whitesmoke;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:290486px;padding-left:1em;padding-right:1em}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:0.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1056px){.container{max-width:992px}.container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){.container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){.container{max-width:1152px}}@media screen and (min-width: 1408px){.container{max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#2a5398;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:whitesmoke;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0.7rem 0.5rem;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#2a5398}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#2a5398}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#2a5398}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:0.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:290486px}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:whitesmoke;border-radius:4px;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:white}.notification pre code{background:transparent}.notification>.delete{position:absolute;right:0.5rem;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:white;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:white}.notification.is-light{background-color:whitesmoke;color:#363636}.notification.is-dark,.content kbd.notification{background-color:#363636;color:whitesmoke}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-link{background-color:#ac5118;color:#fff}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-danger{background-color:#da0b00;color:#fff}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#dbdbdb}.progress::-webkit-progress-value{background-color:#202020}.progress::-moz-progress-bar{background-color:#202020}.progress::-ms-fill{background-color:#202020;border:none}.progress.is-white::-webkit-progress-value{background-color:white}.progress.is-white::-moz-progress-bar{background-color:white}.progress.is-white::-ms-fill{background-color:white}.progress.is-white:indeterminate{background-image:linear-gradient(to right, white 30%, #dbdbdb 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%)}.progress.is-light::-webkit-progress-value{background-color:whitesmoke}.progress.is-light::-moz-progress-bar{background-color:whitesmoke}.progress.is-light::-ms-fill{background-color:whitesmoke}.progress.is-light:indeterminate{background-image:linear-gradient(to right, whitesmoke 30%, #dbdbdb 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #dbdbdb 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%)}.progress.is-link::-webkit-progress-value{background-color:#ac5118}.progress.is-link::-moz-progress-bar{background-color:#ac5118}.progress.is-link::-ms-fill{background-color:#ac5118}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #ac5118 30%, #dbdbdb 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #dbdbdb 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #dbdbdb 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #dbdbdb 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#dbdbdb;background-image:linear-gradient(to right, #202020 30%, #dbdbdb 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:0.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:white;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:white;border-color:white;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:white}.table td.is-light,.table th.is-light{background-color:whitesmoke;border-color:whitesmoke;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:whitesmoke}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#ac5118;border-color:#ac5118;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table th{color:#2a5398}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#2a5398}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#2a5398}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:whitesmoke}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .docstring>section>a.docs-sourcelink,.tags .content kbd,.content .tags kbd{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child){margin-right:0.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .docstring>section>a.docs-sourcelink,.tags.is-centered .content kbd,.content .tags.is-centered kbd{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .docstring>section>a.docs-sourcelink,.tags.has-addons .content kbd,.content .tags.has-addons kbd{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body),.docstring>section>a.docs-sourcelink:not(body),.content kbd:not(body){align-items:center;background-color:whitesmoke;border-radius:4px;color:#202020;display:inline-flex;font-size:0.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete,.content kbd:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}.tag.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body),.content kbd.is-white:not(body){background-color:white;color:#0a0a0a}.tag.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body),.content kbd.is-black:not(body){background-color:#0a0a0a;color:white}.tag.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body),.content kbd.is-light:not(body){background-color:whitesmoke;color:#363636}.tag.is-dark:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content kbd:not(body){background-color:#363636;color:whitesmoke}.tag.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body),.content kbd.is-primary:not(body){background-color:#4eb5de;color:#fff}.tag.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body),.content kbd.is-link:not(body){background-color:#ac5118;color:#fff}.tag.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body),.content kbd.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body),.content kbd.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body),.content kbd.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body),.content kbd.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body),.content kbd.is-normal:not(body){font-size:0.75rem}.tag.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body),.content kbd.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body),.content kbd.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}.tag:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body),.content kbd.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after{background-color:currentColor;content:\"\";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active,.content kbd.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input.tag:not(body){border-radius:290486px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:0.75em}.title sup,.subtitle sup{font-size:0.75em}.title .tag,.title .docstring>section>a.docs-sourcelink,.title .content kbd,.content .title kbd,.subtitle .tag,.subtitle .docstring>section>a.docs-sourcelink,.subtitle .content kbd,.content .subtitle kbd{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-0.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:0.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:0.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:whitesmoke;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.input,#documenter .docs-sidebar form.docs-search>input,.textarea,.select select{background-color:white;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder,.textarea::-moz-placeholder,.select select::-moz-placeholder{color:rgba(54,54,54,0.3)}.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.select select::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder,.textarea:-moz-placeholder,.select select:-moz-placeholder{color:rgba(54,54,54,0.3)}.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,.textarea:-ms-input-placeholder,.select select:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.textarea:hover,.select select:hover,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered,.is-hovered.textarea,.select select.is-hovered{border-color:#ac5118}.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.textarea:focus,.select select:focus,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.textarea,.select select.is-focused,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.textarea:active,.select select:active,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.textarea,.select select.is-active{border-color:#f0f0f0;box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.textarea[disabled],.select select[disabled],fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .textarea,fieldset[disabled] .select select,.select fieldset[disabled] select{background-color:whitesmoke;border-color:whitesmoke;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.select select[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.select select[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder{color:rgba(122,122,122,0.3)}.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder{color:rgba(122,122,122,0.3)}.input,#documenter .docs-sidebar form.docs-search>input,.textarea{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white,.is-white.textarea{border-color:white}.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.textarea:focus,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-white.is-focused,.is-white.is-focused.textarea,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.textarea:active,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-white.is-active,.is-white.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black,.is-black.textarea{border-color:#0a0a0a}.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.textarea:focus,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-black.is-focused,.is-black.is-focused.textarea,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.textarea:active,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-black.is-active,.is-black.is-active.textarea{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light,.is-light.textarea{border-color:whitesmoke}.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.textarea:focus,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-light.is-focused,.is-light.is-focused.textarea,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.textarea:active,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-light.is-active,.is-light.is-active.textarea{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.input,.content kbd.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.is-dark.textarea,.content kbd.textarea{border-color:#363636}.is-dark.input:focus,.content kbd.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.is-focused.input,.content kbd.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-dark.is-focused,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.input:active,.content kbd.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.is-active.input,.content kbd.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-dark.is-active,.is-dark.is-active.textarea,.content kbd.is-active.textarea{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.input,.docstring>section>a.input.docs-sourcelink,#documenter .docs-sidebar form.docs-search>input.is-primary,.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink{border-color:#4eb5de}.is-primary.input:focus,.docstring>section>a.input.docs-sourcelink:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.is-focused.input,.docstring>section>a.is-focused.input.docs-sourcelink,#documenter .docs-sidebar form.docs-search>input.is-primary.is-focused,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.input:active,.docstring>section>a.input.docs-sourcelink:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.is-active.input,.docstring>section>a.is-active.input.docs-sourcelink,#documenter .docs-sidebar form.docs-search>input.is-primary.is-active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link,.is-link.textarea{border-color:#ac5118}.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.textarea:focus,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-link.is-focused,.is-link.is-focused.textarea,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.textarea:active,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-link.is-active,.is-link.is-active.textarea{box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info,.is-info.textarea{border-color:#209cee}.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.textarea:focus,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-info.is-focused,.is-info.is-focused.textarea,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.textarea:active,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-info.is-active,.is-info.is-active.textarea{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success,.is-success.textarea{border-color:#22c35b}.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.textarea:focus,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-success.is-focused,.is-success.is-focused.textarea,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.textarea:active,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-success.is-active,.is-success.is-active.textarea{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.textarea:focus,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-warning.is-focused,.is-warning.is-focused.textarea,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.textarea:active,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-warning.is-active,.is-warning.is-active.textarea{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger,.is-danger.textarea{border-color:#da0b00}.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.textarea:focus,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-danger.is-focused,.is-danger.is-focused.textarea,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.textarea:active,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-danger.is-active,.is-danger.is-active.textarea{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.input,#documenter .docs-sidebar form.docs-search>input,.is-small.textarea{border-radius:2px;font-size:0.75rem}.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium,.is-medium.textarea{font-size:1.25rem}.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline,.is-inline.textarea{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:290486px;padding-left:1em;padding-right:1em}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:0.625em;resize:vertical}.textarea:not([rows]){max-height:600px;min-height:120px}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:0.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.25em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#ac5118;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:whitesmoke}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:white}.select.is-white select{border-color:white}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:black}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:whitesmoke}.select.is-light select{border-color:whitesmoke}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#ac5118}.select.is-link select{border-color:#ac5118}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#964615}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(172,81,24,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#118fe4}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83d}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:0.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:0.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.select.is-loading:after{font-size:0.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:white;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:white}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:white}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:white}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:black;border-color:transparent;color:white}.file.is-light .file-cta{background-color:whitesmoke;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eeeeee;border-color:transparent;color:#363636}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:#363636}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:#363636}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:whitesmoke}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:whitesmoke}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:whitesmoke}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:whitesmoke}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#ac5118;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#a14c16;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(172,81,24,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#964615;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1496ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#118fe4;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:0.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.file.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eeeeee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:whitesmoke;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:0.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:0.75rem;margin-top:0.25rem}.help.is-white{color:white}.help.is-black{color:#0a0a0a}.help.is-light{color:whitesmoke}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#ac5118}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:0.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:0.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:0.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:left}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#7a7a7a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.select~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.select~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.select~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.select~.icon{font-size:0.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.25em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.25em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:0.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.control.is-loading:after{font-size:0.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#ac5118;display:flex;justify-content:center;padding:0 0.75em}.breadcrumb a:hover{color:#884013}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#2a5398;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:\"\\0002f\"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:0.5em}.breadcrumb .icon:last-child{margin-left:0.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:0.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:\"\\02192\"}.breadcrumb.has-bullet-separator li+li::before{content:\"\\02022\"}.breadcrumb.has-dot-separator li+li::before{content:\"\\000b7\"}.breadcrumb.has-succeeds-separator li+li::before{content:\"\\0227B\"}.card{background-color:white;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#202020;max-width:100%;position:relative}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#2a5398;display:flex;flex-grow:1;font-weight:700;padding:0.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem}.card-image{display:block;position:relative}.card-content{background-color:transparent;padding:1rem 1.25rem}.card-footer{background-color:transparent;border-top:1px solid #dbdbdb;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:0.75rem}.card-footer-item:not(:last-child){border-right:1px solid #dbdbdb}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:0.5rem;padding-top:0.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:whitesmoke;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#ac5118;color:#fff}.dropdown-divider{background-color:#dbdbdb;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:0.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:0.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:0.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.list{background-color:white;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}.list-item{display:block;padding:0.5em 1em}.list-item:not(a){color:#202020}.list-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.list-item:not(:last-child){border-bottom:1px solid #dbdbdb}.list-item.is-active{background-color:#ac5118;color:#fff}a.list-item{background-color:whitesmoke;cursor:pointer}.media{align-items:flex-start;display:flex;text-align:left}.media .content:not(:last-child){margin-bottom:0.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:0.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:0.5rem}.media .media .media{padding-top:0.5rem}.media .media .media+.media{margin-top:0.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:0.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#202020;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:whitesmoke;color:#2a5398}.menu-list a.is-active{background-color:#ac5118;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:0.75em;padding-left:0.75em}.menu-label{color:#7a7a7a;font-size:0.75em;letter-spacing:0.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:whitesmoke;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:0.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:white}.message.is-white .message-header{background-color:white;color:#0a0a0a}.message.is-white .message-body{border-color:white;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:white}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:whitesmoke;color:#363636}.message.is-light .message-body{border-color:whitesmoke;color:#505050}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:whitesmoke}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636;color:#2a2a2a}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#f6fbfd}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1f556a}.message.is-link{background-color:#fef9f6}.message.is-link .message-header{background-color:#ac5118;color:#fff}.message.is-link .message-body{border-color:#ac5118;color:#6c3513}.message.is-info{background-color:#f6fbfe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#12537e}.message.is-success{background-color:#f6fdf9}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#0f361d}.message.is-warning{background-color:#fffdf5}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#3b3108}.message.is-danger{background-color:#fff5f5}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#9b0c04}.message-header{align-items:center;background-color:#202020;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#202020;padding:1em 1.25em}.message-body code,.message-body pre{background-color:white}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),print{.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:whitesmoke;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#2a5398;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:0.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:white;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:white;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:white;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:white;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:white}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:white}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:black;color:white}.navbar.is-black .navbar-brand .navbar-link::after{border-color:white}.navbar.is-black .navbar-burger{color:white}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:white}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:black;color:white}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:white}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:black;color:white}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:white}}.navbar.is-light{background-color:whitesmoke;color:#363636}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:#363636}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-brand .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-burger{color:#363636}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:#363636}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#363636}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:whitesmoke}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:whitesmoke}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:whitesmoke}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:whitesmoke}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:whitesmoke}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:whitesmoke}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:whitesmoke}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:whitesmoke}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:whitesmoke}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:whitesmoke}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#ac5118;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#964615;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#964615;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#964615;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#ac5118;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#118fe4;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 whitesmoke}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 whitesmoke}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#ac5118}.navbar-item{display:block;flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#ac5118}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#ac5118;border-bottom-style:solid;border-bottom-width:3px;color:#ac5118;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#ac5118;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:whitesmoke;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:white;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#ac5118}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item{display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:white;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:whitesmoke;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:whitesmoke;color:#ac5118}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-0.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:0.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:0.25rem;padding-left:0.5em;padding-right:0.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#363636;min-width:2.25em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#884013}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#2e63b8}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:0.5}.pagination-previous,.pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.pagination-link.is-current{background-color:#ac5118;border-color:#ac5118;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel-heading,.panel-tabs,.panel-block{border-bottom:1px solid #dbdbdb;border-left:1px solid #dbdbdb;border-right:1px solid #dbdbdb}.panel-heading:first-child,.panel-tabs:first-child,.panel-block:first-child{border-top:1px solid #dbdbdb}.panel-heading{background-color:whitesmoke;border-radius:4px 4px 0 0;color:#2a5398;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}.panel-tabs{align-items:flex-end;display:flex;font-size:0.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#202020}.panel-list a:hover{color:#ac5118}.panel-block{align-items:center;color:#2a5398;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type=\"checkbox\"]{margin-right:0.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#ac5118;color:#363636}.panel-block.is-active .panel-icon{color:#ac5118}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:whitesmoke}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:0.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#202020;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#2a5398;color:#2a5398}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#ac5118;color:#ac5118}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:0.5em}.tabs .icon:last-child{margin-left:0.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:whitesmoke;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:white;border-color:#dbdbdb;border-bottom-color:transparent !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:whitesmoke;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-radius:4px 0 0 4px}.tabs.is-toggle li:last-child a{border-radius:0 4px 4px 0}.tabs.is-toggle li.is-active a{background-color:#ac5118;border-color:#ac5118;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:0.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:0.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}.columns:last-child{margin-bottom:-0.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - 0.75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: 0.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: 0.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: 0.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: 0.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: 0.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: 0.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: 0.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: 0.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: 0.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: 0.25rem}}.columns.is-variable.is-2{--columnGap: 0.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: 0.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: 0.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: 0.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: 0.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: 0.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: 0.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: 0.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: 0.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: 0.5rem}}.columns.is-variable.is-3{--columnGap: 0.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: 0.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: 0.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: 0.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: 0.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: 0.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: 0.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: 0.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: 0.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: 0.75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-0.75rem;margin-right:-0.75rem;margin-top:-0.75rem}.tile.is-ancestor:last-child{margin-bottom:-0.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:0.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:0.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:white;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:white}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:white}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%)}}.hero.is-black{background-color:#0a0a0a;color:white}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:white}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:white}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:black;color:white}.hero.is-black .tabs a{color:white;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:white}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:white;border-color:white;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:whitesmoke;color:#363636}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:#363636}.hero.is-light .subtitle{color:rgba(54,54,54,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:#363636}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:whitesmoke}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(54,54,54,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.hero.is-light .tabs a{color:#363636;opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:#363636}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:#363636;border-color:#363636;color:whitesmoke}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:whitesmoke}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:whitesmoke}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(245,245,245,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:whitesmoke}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(245,245,245,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:whitesmoke}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:whitesmoke;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:whitesmoke}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.content kbd.hero .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover,.content kbd.hero .tabs.is-toggle li.is-active a:hover{background-color:whitesmoke;border-color:whitesmoke;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#ac5118;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#ac5118}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#964615;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ac5118}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #86260b 0%, #ac5118 71%, #c87816 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #86260b 0%, #ac5118 71%, #c87816 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#118fe4;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #04a6d7 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83d;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#2a5398}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f0c1\"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:0.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#b8dffa;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#9beeb8;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ff857e;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:#fff}.admonition.is-compat{background-color:#99e6f0;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em;position:relative}.admonition-header:before{font-family:\"Font Awesome 5 Free\";font-weight:900;margin-right:0.75em;content:\"\\f06a\"}.admonition-body{color:#202020;padding:1em 1.25em}.admonition-body pre{background-color:#e7eef8}.admonition-body code{background-color:#e7eef8}.docstring{margin-bottom:1em;background-color:transparent;border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.75rem;background-color:#e8e8e8;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb}.docstring>header code{background-color:transparent}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:1rem 1.25rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:0.625rem;bottom:0.5rem}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#f0f0f0}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#ac5118}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#2a5398}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#2a5398}.hljs{background:initial !important;padding:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#f0f0f0;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label,#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}#documenter .docs-main header.docs-navbar .docs-right .docs-settings-button{margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{font-size:1.5rem;margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:0.2rem 0rem 0.4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#f0f0f0;background-color:#2a5398;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1em;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:0.4rem 0rem 0.8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:0.95em;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:0.75em;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f054\"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:\"\\f078\"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#f0f0f0;background:#2a5398}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#f0f0f0;background-color:#1d3968}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#f0f0f0}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#f0f0f0;color:#202020}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#aec4e9;color:#202020}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:0.85em;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:\"⚬\";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#214278}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#183058}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#214278}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#183058}}#documenter .docs-main #documenter-search-info{margin-bottom:1rem}#documenter .docs-main #documenter-search-results{list-style-type:circle;list-style-position:outside}#documenter .docs-main #documenter-search-results li{margin-left:2rem}#documenter .docs-main #documenter-search-results .docs-highlight{background-color:yellow}.hljs{display:block;overflow-x:auto;padding:0.5em;background:#F0F0F0}.hljs,.hljs-subst{color:#444}.hljs-comment{color:#888888}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:0.24rem 0rem 0.4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}#documenter .docs-sidebar{border-right:none;box-shadow:.24rem 0rem .4rem #bbb}#documenter .docs-sidebar form.docs-search>input{color:#f0f0f0;background-color:#214278;border-color:#183058;margin-top:1.0rem;margin-bottom:1.0rem}#documenter .docs-sidebar form.docs-search>input::placeholder{color:#f0f0f0}\n"
  },
  {
    "path": "docs/src/assets/themes/lightdefs.scss",
    "content": "// This template file overrides some of the Documenter theme variables to customize the theme:\n$themename: \"documenter-light\"; // CSS file must be called `$(themename).css`\n\n$boldcolor: $maincolor; // darken-color($maincolor, 1);\n\n$body-background-color: $mainwhite; // main page background\n\n// Sidebar\n$documenter-sidebar-background: $maincolor; //background color for sidebar\n$documenter-sidebar-color: $mainwhite; //font color all sidebar\n$documenter-sidebar-menu-hover-color: $documenter-sidebar-color; // text color\n$documenter-sidebar-menu-hover-background: darken-color($documenter-sidebar-background, 1.5);\n\n$documenter-sidebar-menu-active-background: $mainwhite;\n$documenter-sidebar-menu-active-color: $mainblack;\n$documenter-sidebar-menu-active-hover-background: lighten-color($documenter-sidebar-background, 5.2);\n$documenter-sidebar-menu-active-hover-color: $documenter-sidebar-menu-active-color;\n\n// this is the color the links get, and also when they are hovered\n$link: $secondcolor;\n$link-hover: darken-color($link, 1);\n\n// Main text color:\n$text: $mainblack;\n// Bold text color, also affects headers\n$text-strong: $boldcolor;\n\n// Section headers (markdown ###) text color:\n// TODO\n\n// Code text color:\n$code: #000000;\n//$code-background: rgba(0.5,0,0, 0.05);\n$codebg: lighten-color($maincolor, 7);\n// $codebg: lighten-color($secondcolor, 8);\n$code-background: $codebg; // for inline code\n$pre-background: $codebg;  // for code blocks\n$documenter-docstring-header-background: darken-color($body-background-color, 0.4);\n\n// main text font size\n$body-font-size: 1.0em; // the default is 1.0\n// Sidebar text font size\n$documenter-sidebar-size: 1.0em; // the default is 1.0 as well\n\n// these two change what happens with input boxes (the search box):\n$input-hover-border-color: $secondcolor;\n$input-focus-border-color: $mainwhite;\n\n// Include the original theme which will now use the updated variables.\n// This should be the last thing in the SCSS file.\n@import \"documenter-light\";\n\n#documenter .docs-sidebar { // This makes sidebar have shadow at all displays\n  border-right: none;\n  box-shadow: 1.2*$shadow-size 0rem 1*$shadow-blur $shadow-color;\n\n  form.docs-search > input { // these controls are for the searchbar\n    color: $mainwhite;\n    background-color: darken-color($documenter-sidebar-background, 1);\n    border-color: darken-color($documenter-sidebar-background, 2);\n    margin-top: 1.0rem;\n    margin-bottom: 1.0rem; // adjust the margings between search and other elements\n    &::placeholder {\n      color: $mainwhite; // placeholder text color (\"Search here...\")\n    }\n  }\n}\n"
  },
  {
    "path": "docs/src/assets/themes/style.scss",
    "content": "@charset \"UTF-8\";\r\n// The customizable varibles can be found here:\r\n// https://github.com/JuliaDocs/Documenter.jl/tree/master/assets/html/scss\r\n// under documenter/_variables or documenter/_overrides. But some stuff are Bulma defaults\r\n// as well, so you may need to look them up too: https://bulma.io/documentation/customize/variables/\r\n\r\n\r\n////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////\r\n$maincolor: #2a5398;   // main color of the org theme\r\n$secondcolor: #ac5118; // secondary color that serves as accents\r\n                       // it is used as-is for links in light theme\r\n$mainwhite: #f0f0f0;      // color representing white\r\n$mainblack: #202020;   // color representing black\r\n$darkbg: #1b1f28;      // dark theme main page background\r\n\r\n// These commands set up the fonts for the main text and code blocks.\r\n// the fonds must be included into the assets of the `makdocs` command, with e.g.\r\n// format = Documenter.HTML(\r\n//     prettyurls = CI,\r\n//     assets = [\r\n//         \"assets/logo.ico\",\r\n//         asset(\"https://fonts.googleapis.com/css?family=Montserrat|Source+Code+Pro&display=swap\", class=:css),\r\n//         ],\r\n//     ),\r\n$family-sans-serif: 'Montserrat', sans-serif;\r\n$family-monospace: 'Source Code Pro', monospace;\r\n////////////////////////////////////////////////////////////////////////\r\n////////////////////////////////////////////////////////////////////////\r\n\r\n// variables controlling the siderbar's shadow\r\n$shadow-color: #bbb !default;\r\n$shadow-size: 0.2rem !default;\r\n$shadow-blur: 0.4rem !default;\r\n\r\n// Two cool helper functions:\r\n$lightness-unit: 8% !default;\r\n// Uses adjust-color to create a darker version of $color\r\n@function darken-color($color, $factor) {\r\n  @return adjust-color($color, $lightness: -$factor*$lightness-unit);\r\n}\r\n// Uses adjust-color to create a lighter version of $color\r\n@function lighten-color($color, $factor) {\r\n  @return adjust-color($color, $lightness: $factor*$lightness-unit);\r\n}\r\n"
  },
  {
    "path": "docs/src/choosingsolver.md",
    "content": "# Choosing Sub-Solvers\n\n```@meta\nCurrentModule = Alpine\n```\n\nAlpine's global optimization algorithm requires a few types of optimization problems to be solved efficiently. For its best performance, it is recommended that a dedicated solver is used for these purposes. The design of Alpine takes advantage of [MathOptInterface](https://github.com/jump-dev/MathOptInterface.jl) to seemlessly interface with a majority of optimization software. Currently, the following sub-solvers with Julia Interface are supported by Alpine:\n\n| Solver                                                                         | Julia Package                                                |\n|--------------------------------------------------------------------------------|--------------------------------------------------------------|\n| [CPLEX](http://www-01.ibm.com/software/commerce/optimization/cplex-optimizer/) | [CPLEX.jl](https://github.com/JuliaOpt/CPLEX.jl)             |\n| [Cbc](https://projects.coin-or.org/Cbc)                                        | [Cbc.jl](https://github.com/JuliaOpt/Clp.jl)                 |\n| [Gurobi](http://gurobi.com/)                                                   | [Gurobi.jl](https://github.com/JuliaOpt/Gurobi.jl)           |\n| [Ipopt](https://projects.coin-or.org/Ipopt)                                    | [Ipopt.jl](https://github.com/JuliaOpt/Ipopt.jl)             |\n| [Bonmin](https://projects.coin-or.org/Bonmin)                                  | [Bonmin.jl](https://github.com/JackDunnNZ/AmplNLWriter.jl)   |\n| [Artelys KNITRO](http://artelys.com/en/optimization-tools/knitro)              | [KNITRO.jl](https://github.com/JuliaOpt/KNITRO.jl)           |\n\nAs the development of Alpine continues, supports for solvers such as [Mosek](http://www.mosek.com/), [GLPK](http://www.gnu.org/software/glpk/), [NLopt](http://ab-initio.mit.edu/wiki/index.php/NLopt) and [Xpress](http://www.fico.com/en/products/fico-xpress-optimization-suite) are in the development roadmap.\n\n!!! tip\n    Performance of Alpine is significantly faster and robust while using [Gurobi](https://www.gurobi.com) as the underlying convex mixed-integer programming (MIP) solver. Note that Gurobi's individual-usage license is available [free](https://www.gurobi.com/academia/academic-program-and-licenses/) for academic purposes. \n\nTo solve any continuous nonlinear program to global optimality, here is an example to utilize different sub-solvers with default options set for Alpine:\n\n```julia\nusing Alpine\nusing JuMP \nusing Gurobi \nusing Ipopt\n\n# MIP optimizer\nconst gurobi = optimizer_with_attributes(Gurobi.Optimizer, \n                                         MOI.Silent() => true,\n                                         \"Presolve\"   => 1) \n\n# NLP optimizer\nconst ipopt = optimizer_with_attributes(Ipopt.Optimizer, \n                                        MOI.Silent() => true, \n                                        \"sb\" => \"yes\", \n                                        \"max_iter\"   => 9999)\n\n# Global optimizer\nconst alpine = optimizer_with_attributes(Alpine.Optimizer, \n                                         \"nlp_solver\" => ipopt,\n                                         \"mip_solver\" => gurobi)\nm = Model(alpine)\n```\nSimilarly, many such optimizer options and nonconvex problems (both NLPs and MINLPs) can be found in the [examples](https://github.com/lanl-ansi/Alpine.jl/tree/master/examples) folder. "
  },
  {
    "path": "docs/src/functions.md",
    "content": "# Functions\n\n```@meta\nCurrentModule = Alpine\n```\n\n## High-level Algorithmic Functions\nThese are the high-level algorithmic functions:\n```@docs\npresolve\nglobal_solve\nlocal_solve\nbounding_solve\n```\n\n## Adapative Partitioning Methods\n```@docs\ncreate_bounding_mip\npick_disc_vars\nfix_domains\nmin_vertex_cover\n```\n\n## Presolve Methods\n```@docs\nbound_tightening_wrapper\noptimization_based_bound_tightening\ncreate_obbt_model\nsolve_obbt_model\nresolve_var_bounds\npost_objective_bound\n```\n\n## Utility Methods\n```@docs\nupdate_var_bounds\ndiscretization_to_bounds\ninit_disc\n_get_discretization_dict\nflatten_discretization\nadd_adaptive_partition\n```\n"
  },
  {
    "path": "docs/src/index.md",
    "content": "# Alpine's Documentation\n\n```@meta\nCurrentModule = Alpine\n```\n## Overview\n**[Alpine](https://github.com/lanl-ansi/Alpine.jl)** is a Julia/JuMP-based global optimization solver for non-convex programs. Alpine applies a two-stage approach to strengthen piecewise convex relaxations for mixed-integer nonlinear programs (MINLP) with multi-linear terms. In the first stage, Alpine exploits Constraint Programing techniques to contract the variable bounds. Further, it applies optimality-based bound tightening (OBBT) methods iteratively until a fixed point with respect to the bounds are achieved. In the second stage, Alpine partitions the variable domains using an adaptive multivariate partitioning scheme (a parametrized partition at the current solution of sequentially solved MILPs), leading to sparser but tighter relaxations. This approach decouples the number of partitions from the size of the variable domains, leading to a significant reduction in computation time, and limits the number of binary variables that are introduced by the partitioning. Alpine also applies polyhedral cutting plane methods to handle convex relaxations of higher-order monomial terms.\n\n**Allowable nonlinearities**: Alpine can currently handle MINLPs with polynomials in constraints and/or in the objective. Currently, there is no support for exponential cones and Positive Semi-Definite (PSD) cones in MINLPs. Alpine is also a good fit for subsets of the MINLP family, e.g., Mixed-Integer Quadratically Constrainted Quadradic Programs (MIQCQPs), Non-Linear Programs (NLPs), etc.\n\nFor more details, check out this [video](https://www.youtube.com/watch?v=mwkhiEIS5JA) on Alpine at the [2nd Annual JuMP-dev Workshop](http://www.juliaopt.org/meetings/bordeaux2018/), held at the Institut de Mathématiques de Bordeaux, June 2018.\n\n## Installation\nTo use Alpine, first [download and install](https://julialang.org/downloads/) Julia. Note that the current version of Alpine is compatible with Julia 1.0 and later. \n\nThe latest stable release of Alpine can be installed using the Julia package manager with\n\n```julia\nimport Pkg\nPkg.add(\"Alpine\")\n```\n\nAt least one local nonlinear-programming (NLP) solver and a convex mixed-integer programming (MIP) solver are required for running Alpine. If your problem is an NLP, we recommend [Ipopt](https://github.com/jump-dev/Ipopt.jl), and else if your problem is a mixed-integer NLP (MINLP), we recommend [Juniper](https://github.com/lanl-ansi/Juniper.jl). For the underlying MIP solver, [Gurobi](https://github.com/jump-dev/Gurobi.jl) is highly recommended, as it is fast, scaleable and can be used to solve on fairly large-scale non-convex programs. However, the open-source [HiGHS](https://github.com/jump-dev/HiGHS.jl) or [GLPK](https://github.com/jump-dev/GLPK.jl) solver is also compatible with Alpine. For example, Ipopt and Gurobi can be installed via the package manager with\n\n```julia\nimport Pkg\nPkg.add(\"Ipopt\")\nPkg.add(\"Gurobi\")\n```\nFor more details on choosing sub-solvers for Alpine, check out [here](https://lanl-ansi.github.io/Alpine.jl/latest/choosingsolver/). \n\n## Unit Tests\nTo run the tests in the package, run the following command after installing the Alpine package.\n\n```julia\nimport Pkg\nPkg.test(\"Alpine\")\n```\n\n## Citing Alpine\nIf you find Alpine useful in your work, we request you to cite the following paper [\\[pdf\\]](https://harshangrjn.github.io/pdf/JOGO_2018.pdf) [\\[pdf\\]](http://harshangrjn.github.io/pdf/CP_2016.pdf): \n```bibtex\n@article{alpine_JOGO2019,\n  title = {An adaptive, multivariate partitioning algorithm for global optimization of nonconvex programs},\n  author = {Nagarajan, Harsha and Lu, Mowen and Wang, Site and Bent, Russell and Sundar, Kaarthik},\n  journal = {Journal of Global Optimization},\n  year = {2019},\n  issn = {1573-2916},\n  doi = {10.1007/s10898-018-00734-1},\n}\n\n@inproceedings{alpine_CP2016,\n  title = {Tightening {McCormick} relaxations for nonlinear programs via dynamic multivariate partitioning},\n  author = {Nagarajan, Harsha and Lu, Mowen and Yamangil, Emre and Bent, Russell},\n  booktitle = {International Conference on Principles and Practice of Constraint Programming},\n  pages = {369--387},\n  year = {2016},\n  organization = {Springer},\n  doi = {10.1007/978-3-319-44953-1_24},\n}\n```\nIf you find the underlying piecewise polyhedral formulations implemented in Alpine useful in your work, we kindly request that you cite the following papers ([link-1](https://doi.org/10.1016/j.orl.2020.12.002), [link-2](http://www.optimization-online.org/DB_HTML/2022/07/8974.html)): \n```bibtex\n@article{alpine_ORL2021,\n  title = {Piecewise polyhedral formulations for a multilinear term},\n  author = {Sundar, Kaarthik and Nagarajan, Harsha and Linderoth, Jeff and Wang, Site and Bent, Russell},\n  journal = {Operations Research Letters},\n  volume = {49},\n  number = {1},\n  pages = {144--149},\n  year = {2021},\n  publisher = {Elsevier}\n}\n\n@article{alpine_OptOnline2022,\n  title={Piecewise Polyhedral Relaxations of Multilinear Optimization},\n  author={Kim, Jongeun and Richard, Jean-Philippe P. and Tawarmalani, Mohit},\n  eprinttype={Optimization Online},\n  date={2022}\n}\n```\n\nIf you find the random families of non-convex QCQP instances (using generator files within this [folder](https://github.com/lanl-ansi/Alpine.jl/tree/master/examples/random_QCQPs)) useful for your research, we kindly request that you cite the following paper [arXiv link](https://arxiv.org/abs/2301.00306):\n```bibtex\n@article{alpine_learning_2022,\n  title={Learning to Accelerate the Global Optimization of Quadratically-Constrained Quadratic Programs},\n  author={Kannan, Rohit and Nagarajan, Harsha and Deka, Deepjyoti},\n  journal={arXiv preprint:2301.00306},\n  url={https://arxiv.org/abs/2301.00306},\n  year={2022}\n}\n```"
  },
  {
    "path": "docs/src/parameters.md",
    "content": "# Solver options for Alpine\n\n```@meta\nCurrentModule = Alpine\n```\n\n## General Options\n\nHere are a few general solver options which control the performance of Alpine:\n\n* `log_level (default = 0)`: verbosity level of Alpine; choose `1` for turning on logging, else `100` for detailed debugging mode.\n\n* `time_limit (default = Inf)`: total limit on run time for Alpine in seconds.\n\n* `max_iter (default = 999)`: total number of iterations allowed in the [`global_solve`](@ref).\n\n* `rel_gap (default = 1e-4)`: relative gap considered for global convergence during [`global_solve`](@ref). Bounds are evaluated using ``\\frac{UB-LB}{UB} \\cdot 100 \\%``.\n\n* `tol (default = 1e-6)`: numerical tolerance used during the process of [`global_solve`](@ref).\n\n## Adaptive Partitioning Options\n* `apply_partitioning (default = true)`: applies Alpine's built-in MIP-based partitioning algorithm only when activated; else terminates with the presolve solution.\n\n* `partition_scaling_factor (default = 10)`: used during [`add_adaptive_partition`](@ref) for scaling the width of new partitions relative to the active partition chosen in the sequentially-solved lower-bounding MIP models. This value can substantially affect the run time for global convergence; this value can be set to different integer values (>= 4) for various classes of problems.\n\n* `disc_var_pick (default = 0)`: controls Alpine's algorithm used for selecting variables for partitioning; `0` is for max-cover, `1` is for minimum-vertex-cover. This parameter allows functional inputs.\n\n* `disc_add_partition_method`: allows functional input on how new partitions could be constructed.\n\n## Presolve Options\n\n* `presolve_track_time (default = true)`: includes/excludes presolve run time in the total Alpine's run time.\n\n* `presolve_bt (default = false)`: performs sequential, optimization-based bound tightening (OBBT) at the presolve step.\n\n* `presolve_bt_max_iter (default = 9999)`: maximum number of iterations allowed using the sequential OBBT step.\n\n* `presolve_bt_width_tol (default = 1e-3)`: numerical tolerance value used in the OBBT step. Note that smaller values of this tolerance can lead to inaccurate solutions.\n\n* `presolve_bt_algo (default = 1)`: method chosen to perform the presolve step; choose `1` for the built-in OBBT, else `2` for user-input functions for presolve.\n\n* `presolve_bt_relax_integrality (default = false)`: relaxes the integrality of the existing integer variables in the OBBT step, if the input problem is an MINLP.\n\n* `presolve_bt_mip_time_limit (default = Inf)`: time limit for individual MILPs solved during the sequential OBBT procedure.\n\n* `use_start_as_incumbent (default = false)`: if `true`, Alpine does not perform any local optimization during the presolve and uses the starting value instead (*warning*: Alpine assumes the feasibility of the starting value and does not check it).\n\nNote that the above-mentioned list of solver options is not comprehensive, but can be found in [solver.jl](https://github.com/lanl-ansi/Alpine.jl/blob/master/src/solver.jl).\n"
  },
  {
    "path": "examples/JuMP_models.jl",
    "content": "include(\"MINLPs/nlp.jl\")\ninclude(\"MINLPs/bnlp.jl\")\ninclude(\"MINLPs/blend.jl\")\ninclude(\"MINLPs/brainpc3.jl\")\ninclude(\"MINLPs/castro.jl\")\ninclude(\"MINLPs/circle.jl\")\ninclude(\"MINLPs/convex.jl\")\ninclude(\"MINLPs/discretemulti.jl\")\ninclude(\"MINLPs/div.jl\")\ninclude(\"MINLPs/exprstest.jl\")\ninclude(\"MINLPs/linearlift.jl\")\ninclude(\"MINLPs/multi.jl\")\ninclude(\"MINLPs/mult3.jl\")\ninclude(\"MINLPs/mult4.jl\")\ninclude(\"MINLPs/rosenbrock.jl\")\n"
  },
  {
    "path": "examples/MINLPs/blend.jl",
    "content": "function blend029(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, x[1:102])\n    for i in 67:102\n        set_binary(x[i])\n    end\n\n    for i in 1:48\n        set_lower_bound(x[i], 0)\n        set_upper_bound(x[i], 1)\n    end\n    for i in 49:66\n        set_lower_bound(x[i], 0)\n        set_upper_bound(x[i], 2)\n    end\n\n    @objective(\n        m,\n        Max,\n        -1.74 * x[1] - 1.74 * x[2] - 1.74 * x[3] - 1.45 * x[4] - 1.45 * x[5] -\n        1.45 * x[6] +\n        7.38 * x[7] +\n        7.38 * x[8] +\n        7.38 * x[9] +\n        5.6 * x[10] +\n        5.6 * x[11] +\n        5.6 * x[12] - 1.7 * x[13] - 1.7 * x[14] - 1.7 * x[15] - 1.18 * x[16] -\n        1.18 * x[17] - 1.18 * x[18] +\n        7.21 * x[19] +\n        7.21 * x[20] +\n        7.21 * x[21] +\n        5.45 * x[22] +\n        5.45 * x[23] +\n        5.45 * x[24] - 0.3 * x[25] - 0.3 * x[26] - 0.3 * x[27] +\n        7.71 * x[28] +\n        7.71 * x[29] +\n        7.71 * x[30] +\n        6.28 * x[31] +\n        6.28 * x[32] +\n        6.28 * x[33] +\n        7.74 * x[34] +\n        7.74 * x[35] +\n        7.74 * x[36] - 0.84 * x[67] - 0.84 * x[68] - 0.84 * x[69] - 0.05 * x[70] -\n        0.05 * x[71] - 0.05 * x[72] - 0.94 * x[73] - 0.94 * x[74] - 0.94 * x[75] -\n        0.81 * x[76] - 0.81 * x[77] - 0.81 * x[78] - 0.79 * x[79] - 0.79 * x[80] -\n        0.79 * x[81] - 0.05 * x[82] - 0.05 * x[83] - 0.05 * x[84] - 0.65 * x[85] -\n        0.65 * x[86] - 0.65 * x[87] - 0.97 * x[88] - 0.97 * x[89] - 0.97 * x[90] -\n        0.57 * x[91] - 0.57 * x[92] - 0.57 * x[93] - 0.26 * x[94] - 0.26 * x[95] -\n        0.26 * x[96] - 0.45 * x[97] - 0.45 * x[98] - 0.45 * x[99] - 0.1 * x[100] -\n        0.1 * x[101] - 0.1 * x[102]\n    )\n\n    @NLconstraint(\n        m,\n        x[37] * x[55] - 0.6 * x[1] - 0.2 * x[13] +\n        0.2 * x[25] +\n        0.2 * x[28] +\n        0.2 * x[31] == 0.04\n    )  #= e8: =#\n    @NLconstraint(\n        m,\n        x[40] * x[58] - 0.6 * x[4] - 0.2 * x[16] - 0.2 * x[25] + 0.7 * x[34] == 0.07\n    )  #= e9: =#\n    @NLconstraint(\n        m,\n        x[43] * x[55] - 0.4 * x[1] - 0.4 * x[13] +\n        0.5 * x[25] +\n        0.5 * x[28] +\n        0.5 * x[31] == 0.1\n    )  #= e10: =#\n    @NLconstraint(\n        m,\n        x[46] * x[58] - 0.4 * x[4] - 0.4 * x[16] - 0.5 * x[25] + 0.6 * x[34] == 0.06\n    )  #= e11: =#\n    @NLconstraint(\n        m,\n        x[38] * x[56] -\n        (x[37] * x[55] - (x[37] * x[26] + x[37] * x[29] + x[37] * x[32])) - 0.6 * x[2] -\n        0.2 * x[14] == 0\n    )  #= e24: =#\n    @NLconstraint(\n        m,\n        x[39] * x[57] -\n        (x[38] * x[56] - (x[38] * x[27] + x[38] * x[30] + x[38] * x[33])) - 0.6 * x[3] -\n        0.2 * x[15] == 0\n    )  #= e25: =#\n    @NLconstraint(\n        m,\n        x[41] * x[59] - (x[40] * x[58] + x[37] * x[26] - x[40] * x[35]) - 0.6 * x[5] -\n        0.2 * x[17] == 0\n    )  #= e26: =#\n    @NLconstraint(\n        m,\n        x[42] * x[60] - (x[41] * x[59] + x[38] * x[27] - x[41] * x[36]) - 0.6 * x[6] -\n        0.2 * x[18] == 0\n    )  #= e27: =#\n    @NLconstraint(\n        m,\n        x[44] * x[56] -\n        (x[43] * x[55] - (x[43] * x[26] + x[43] * x[29] + x[43] * x[32])) - 0.4 * x[2] -\n        0.4 * x[14] == 0\n    )  #= e28: =#\n    @NLconstraint(\n        m,\n        x[45] * x[57] -\n        (x[44] * x[56] - (x[44] * x[27] + x[44] * x[30] + x[44] * x[33])) - 0.4 * x[3] -\n        0.4 * x[15] == 0\n    )  #= e29: =#\n    @NLconstraint(\n        m,\n        x[47] * x[59] - (x[46] * x[58] + x[43] * x[26] - x[46] * x[35]) - 0.4 * x[5] -\n        0.4 * x[17] == 0\n    )  #= e30: =#\n    @NLconstraint(\n        m,\n        x[48] * x[60] - (x[47] * x[59] + x[44] * x[27] - x[47] * x[36]) - 0.4 * x[6] -\n        0.4 * x[18] == 0\n    )  #= e31: =#\n\n    @constraint(m, x[1] + x[4] + x[7] + x[10] + x[49] == 1)  #= e2: =#\n    @constraint(m, x[13] + x[16] + x[19] + x[22] + x[52] == 1.1)  #= e3: =#\n    @constraint(m, -x[1] - x[13] + x[25] + x[28] + x[31] + x[55] == 0.2)  #= e4: =#\n    @constraint(m, -x[4] - x[16] - x[25] + x[34] + x[58] == 0.1)  #= e5: =#\n    @constraint(m, -x[7] - x[19] - x[28] - x[34] + x[61] == 1.55)  #= e6: =#\n    @constraint(m, -x[10] - x[22] - x[31] + x[64] == 0.49)  #= e7: =#\n    @constraint(m, x[2] + x[5] + x[8] + x[11] - x[49] + x[50] == 1)  #= e12: =#\n    @constraint(m, x[3] + x[6] + x[9] + x[12] - x[50] + x[51] == 0)  #= e13: =#\n    @constraint(m, x[14] + x[17] + x[20] + x[23] - x[52] + x[53] == 0.1)  #= e14: =#\n    @constraint(m, x[15] + x[18] + x[21] + x[24] - x[53] + x[54] == 0.9)  #= e15: =#\n    @constraint(m, -x[2] - x[14] + x[26] + x[29] + x[32] - x[55] + x[56] == 0)  #= e16: =#\n    @constraint(m, -x[3] - x[15] + x[27] + x[30] + x[33] - x[56] + x[57] == 0)  #= e17: =#\n    @constraint(m, -x[5] - x[17] - x[26] + x[35] - x[58] + x[59] == 0)  #= e18: =#\n    @constraint(m, -x[6] - x[18] - x[27] + x[36] - x[59] + x[60] == 0)  #= e19: =#\n    @constraint(m, -x[8] - x[20] - x[29] - x[35] - x[61] + x[62] == -0.81)  #= e20: =#\n    @constraint(m, -x[9] - x[21] - x[30] - x[36] - x[62] + x[63] == -0.88)  #= e21: =#\n    @constraint(m, -x[11] - x[23] - x[32] - x[64] + x[65] == -0.14)  #= e22: =#\n    @constraint(m, -x[12] - x[24] - x[33] - x[65] + x[66] == -0.1)  #= e23: =#\n    @constraint(m, x[1] - x[67] <= 0)  #= e32: =#\n    @constraint(m, x[2] - x[68] <= 0)  #= e33: =#\n    @constraint(m, x[3] - x[69] <= 0)  #= e34: =#\n    @constraint(m, x[4] - x[70] <= 0)  #= e35: =#\n    @constraint(m, x[5] - x[71] <= 0)  #= e36: =#\n    @constraint(m, x[6] - x[72] <= 0)  #= e37: =#\n    @constraint(m, x[7] - x[73] <= 0)  #= e38: =#\n    @constraint(m, x[8] - x[74] <= 0)  #= e39: =#\n    @constraint(m, x[9] - x[75] <= 0)  #= e40: =#\n    @constraint(m, x[10] - x[76] <= 0)  #= e41: =#\n    @constraint(m, x[11] - x[77] <= 0)  #= e42: =#\n    @constraint(m, x[12] - x[78] <= 0)  #= e43: =#\n    @constraint(m, x[13] - x[79] <= 0)  #= e44: =#\n    @constraint(m, x[14] - x[80] <= 0)  #= e45: =#\n    @constraint(m, x[15] - x[81] <= 0)  #= e46: =#\n    @constraint(m, x[16] - x[82] <= 0)  #= e47: =#\n    @constraint(m, x[17] - x[83] <= 0)  #= e48: =#\n    @constraint(m, x[18] - x[84] <= 0)  #= e49: =#\n    @constraint(m, x[19] - x[85] <= 0)  #= e50: =#\n    @constraint(m, x[20] - x[86] <= 0)  #= e51: =#\n    @constraint(m, x[21] - x[87] <= 0)  #= e52: =#\n    @constraint(m, x[22] - x[88] <= 0)  #= e53: =#\n    @constraint(m, x[23] - x[89] <= 0)  #= e54: =#\n    @constraint(m, x[24] - x[90] <= 0)  #= e55: =#\n    @constraint(m, x[25] - x[91] <= 0)  #= e56: =#\n    @constraint(m, x[26] - x[92] <= 0)  #= e57: =#\n    @constraint(m, x[27] - x[93] <= 0)  #= e58: =#\n    @constraint(m, x[28] - x[94] <= 0)  #= e59: =#\n    @constraint(m, x[29] - x[95] <= 0)  #= e60: =#\n    @constraint(m, x[30] - x[96] <= 0)  #= e61: =#\n    @constraint(m, x[31] - x[97] <= 0)  #= e62: =#\n    @constraint(m, x[32] - x[98] <= 0)  #= e63: =#\n    @constraint(m, x[33] - x[99] <= 0)  #= e64: =#\n    @constraint(m, x[34] - x[100] <= 0)  #= e65: =#\n    @constraint(m, x[35] - x[101] <= 0)  #= e66: =#\n    @constraint(m, x[36] - x[102] <= 0)  #= e67: =#\n    @constraint(m, x[1] >= 0)  #= e68: =#\n    @constraint(m, x[2] >= 0)  #= e69: =#\n    @constraint(m, x[3] >= 0)  #= e70: =#\n    @constraint(m, x[4] >= 0)  #= e71: =#\n    @constraint(m, x[5] >= 0)  #= e72: =#\n    @constraint(m, x[6] >= 0)  #= e73: =#\n    @constraint(m, x[7] >= 0)  #= e74: =#\n    @constraint(m, x[8] >= 0)  #= e75: =#\n    @constraint(m, x[9] >= 0)  #= e76: =#\n    @constraint(m, x[10] >= 0)  #= e77: =#\n    @constraint(m, x[11] >= 0)  #= e78: =#\n    @constraint(m, x[12] >= 0)  #= e79: =#\n    @constraint(m, x[13] >= 0)  #= e80: =#\n    @constraint(m, x[14] >= 0)  #= e81: =#\n    @constraint(m, x[15] >= 0)  #= e82: =#\n    @constraint(m, x[16] >= 0)  #= e83: =#\n    @constraint(m, x[17] >= 0)  #= e84: =#\n    @constraint(m, x[18] >= 0)  #= e85: =#\n    @constraint(m, x[19] >= 0)  #= e86: =#\n    @constraint(m, x[20] >= 0)  #= e87: =#\n    @constraint(m, x[21] >= 0)  #= e88: =#\n    @constraint(m, x[22] >= 0)  #= e89: =#\n    @constraint(m, x[23] >= 0)  #= e90: =#\n    @constraint(m, x[24] >= 0)  #= e91: =#\n    @constraint(m, x[25] >= 0)  #= e92: =#\n    @constraint(m, x[26] >= 0)  #= e93: =#\n    @constraint(m, x[27] >= 0)  #= e94: =#\n    @constraint(m, x[28] >= 0)  #= e95: =#\n    @constraint(m, x[29] >= 0)  #= e96: =#\n    @constraint(m, x[30] >= 0)  #= e97: =#\n    @constraint(m, x[31] >= 0)  #= e98: =#\n    @constraint(m, x[32] >= 0)  #= e99: =#\n    @constraint(m, x[33] >= 0)  #= e100: =#\n    @constraint(m, x[34] >= 0)  #= e101: =#\n    @constraint(m, x[35] >= 0)  #= e102: =#\n    @constraint(m, x[36] >= 0)  #= e103: =#\n    @constraint(m, x[73] <= 1.5)  #= e104: =#\n    @constraint(m, x[74] <= 1.5)  #= e105: =#\n    @constraint(m, x[75] <= 1.5)  #= e106: =#\n    @constraint(m, x[76] <= 0.6)  #= e107: =#\n    @constraint(m, x[77] <= 0.6)  #= e108: =#\n    @constraint(m, x[78] <= 0.6)  #= e109: =#\n    @constraint(m, x[85] <= 1.1)  #= e110: =#\n    @constraint(m, x[86] <= 1.1)  #= e111: =#\n    @constraint(m, x[87] <= 1.1)  #= e112: =#\n    @constraint(m, x[88] <= 0.2)  #= e113: =#\n    @constraint(m, x[89] <= 0.2)  #= e114: =#\n    @constraint(m, x[90] <= 0.2)  #= e115: =#\n    @constraint(m, x[73] <= 1)  #= e116: =#\n    @constraint(m, x[74] <= 1)  #= e117: =#\n    @constraint(m, x[75] <= 1)  #= e118: =#\n    @constraint(m, x[76] <= 0.8)  #= e119: =#\n    @constraint(m, x[77] <= 0.8)  #= e120: =#\n    @constraint(m, x[78] <= 0.8)  #= e121: =#\n    @constraint(m, x[85] <= 1)  #= e122: =#\n    @constraint(m, x[86] <= 1)  #= e123: =#\n    @constraint(m, x[87] <= 1)  #= e124: =#\n    @constraint(m, x[88] <= 0.8)  #= e125: =#\n    @constraint(m, x[89] <= 0.8)  #= e126: =#\n    @constraint(m, x[90] <= 0.8)  #= e127: =#\n    @constraint(m, -x[73] >= -1.3)  #= e128: =#\n    @constraint(m, -x[74] >= -1.3)  #= e129: =#\n    @constraint(m, -x[75] >= -1.3)  #= e130: =#\n    @constraint(m, -x[76] >= -1.4)  #= e131: =#\n    @constraint(m, -x[77] >= -1.4)  #= e132: =#\n    @constraint(m, -x[78] >= -1.4)  #= e133: =#\n    @constraint(m, -x[85] >= -1.7)  #= e134: =#\n    @constraint(m, -x[86] >= -1.7)  #= e135: =#\n    @constraint(m, -x[87] >= -1.7)  #= e136: =#\n    @constraint(m, -x[88] >= -1.8)  #= e137: =#\n    @constraint(m, -x[89] >= -1.8)  #= e138: =#\n    @constraint(m, -x[90] >= -1.8)  #= e139: =#\n    @constraint(m, -x[73] >= -1)  #= e140: =#\n    @constraint(m, -x[74] >= -1)  #= e141: =#\n    @constraint(m, -x[75] >= -1)  #= e142: =#\n    @constraint(m, -x[76] >= -1.4)  #= e143: =#\n    @constraint(m, -x[77] >= -1.4)  #= e144: =#\n    @constraint(m, -x[78] >= -1.4)  #= e145: =#\n    @constraint(m, -x[85] >= -1)  #= e146: =#\n    @constraint(m, -x[86] >= -1)  #= e147: =#\n    @constraint(m, -x[87] >= -1)  #= e148: =#\n    @constraint(m, -x[88] >= -1.4)  #= e149: =#\n    @constraint(m, -x[89] >= -1.4)  #= e150: =#\n    @constraint(m, -x[90] >= -1.4)  #= e151: =#\n    @constraint(m, -x[37] + x[95] <= 0.9)  #= e152: =#\n    @constraint(m, -x[38] + x[96] <= 0.9)  #= e153: =#\n    @constraint(m, -x[37] + x[98] <= 0)  #= e154: =#\n    @constraint(m, -x[38] + x[99] <= 0)  #= e155: =#\n    @constraint(m, -x[40] + x[101] <= 0.9)  #= e156: =#\n    @constraint(m, -x[41] + x[102] <= 0.9)  #= e157: =#\n    @constraint(m, -x[43] + x[95] <= 0.6)  #= e158: =#\n    @constraint(m, -x[44] + x[96] <= 0.6)  #= e159: =#\n    @constraint(m, -x[43] + x[98] <= 0.4)  #= e160: =#\n    @constraint(m, -x[44] + x[99] <= 0.4)  #= e161: =#\n    @constraint(m, -x[46] + x[101] <= 0.6)  #= e162: =#\n    @constraint(m, -x[47] + x[102] <= 0.6)  #= e163: =#\n    @constraint(m, -x[37] - x[95] >= -1.9)  #= e164: =#\n    @constraint(m, -x[38] - x[96] >= -1.9)  #= e165: =#\n    @constraint(m, -x[37] - x[98] >= -2)  #= e166: =#\n    @constraint(m, -x[38] - x[99] >= -2)  #= e167: =#\n    @constraint(m, -x[40] - x[101] >= -1.9)  #= e168: =#\n    @constraint(m, -x[41] - x[102] >= -1.9)  #= e169: =#\n    @constraint(m, -x[43] - x[95] >= -1.4)  #= e170: =#\n    @constraint(m, -x[44] - x[96] >= -1.4)  #= e171: =#\n    @constraint(m, -x[43] - x[98] >= -1.8)  #= e172: =#\n    @constraint(m, -x[44] - x[99] >= -1.8)  #= e173: =#\n    @constraint(m, -x[46] - x[101] >= -1.4)  #= e174: =#\n    @constraint(m, -x[47] - x[102] >= -1.4)  #= e175: =#\n    @constraint(m, x[94] <= 1.1)  #= e176: =#\n    @constraint(m, x[97] <= 0.2)  #= e177: =#\n    @constraint(m, x[100] <= 1.6)  #= e178: =#\n    @constraint(m, x[94] <= 1.1)  #= e179: =#\n    @constraint(m, x[97] <= 0.9)  #= e180: =#\n    @constraint(m, x[100] <= 1.2)  #= e181: =#\n    @constraint(m, -x[94] >= -1.7)  #= e182: =#\n    @constraint(m, -x[97] >= -1.8)  #= e183: =#\n    @constraint(m, -x[100] >= -1.2)  #= e184: =#\n    @constraint(m, -x[94] >= -0.9)  #= e185: =#\n    @constraint(m, -x[97] >= -1.3)  #= e186: =#\n    @constraint(m, -x[100] >= -0.8)  #= e187: =#\n    @constraint(m, x[67] + x[91] <= 1)  #= e188: =#\n    @constraint(m, x[68] + x[92] <= 1)  #= e189: =#\n    @constraint(m, x[69] + x[93] <= 1)  #= e190: =#\n    @constraint(m, x[67] + x[94] <= 1)  #= e191: =#\n    @constraint(m, x[68] + x[95] <= 1)  #= e192: =#\n    @constraint(m, x[69] + x[96] <= 1)  #= e193: =#\n    @constraint(m, x[67] + x[97] <= 1)  #= e194: =#\n    @constraint(m, x[68] + x[98] <= 1)  #= e195: =#\n    @constraint(m, x[69] + x[99] <= 1)  #= e196: =#\n    @constraint(m, x[79] + x[91] <= 1)  #= e197: =#\n    @constraint(m, x[80] + x[92] <= 1)  #= e198: =#\n    @constraint(m, x[81] + x[93] <= 1)  #= e199: =#\n    @constraint(m, x[79] + x[94] <= 1)  #= e200: =#\n    @constraint(m, x[80] + x[95] <= 1)  #= e201: =#\n    @constraint(m, x[81] + x[96] <= 1)  #= e202: =#\n    @constraint(m, x[79] + x[97] <= 1)  #= e203: =#\n    @constraint(m, x[80] + x[98] <= 1)  #= e204: =#\n    @constraint(m, x[81] + x[99] <= 1)  #= e205: =#\n    @constraint(m, x[70] + x[100] <= 1)  #= e206: =#\n    @constraint(m, x[71] + x[101] <= 1)  #= e207: =#\n    @constraint(m, x[72] + x[102] <= 1)  #= e208: =#\n    @constraint(m, x[82] + x[100] <= 1)  #= e209: =#\n    @constraint(m, x[83] + x[101] <= 1)  #= e210: =#\n    @constraint(m, x[84] + x[102] <= 1)  #= e211: =#\n    @constraint(m, x[91] + x[100] <= 1)  #= e212: =#\n    @constraint(m, x[92] + x[101] <= 1)  #= e213: =#\n    @constraint(m, x[93] + x[102] <= 1)  #= e214: =#\n\n    return m\nend\n\nfunction blend029_gl(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, x[1:102])\n    for i in 67:102\n        JuMP.set_binary(x[i])\n    end\n\n    for i in 1:48\n        set_lower_bound(x[i], 0)\n        set_upper_bound(x[i], 1)\n    end\n\n    for i in 49:66\n        set_lower_bound(x[i], 0)\n        set_upper_bound(x[i], 2)\n    end\n\n    @objective(\n        m,\n        Max,\n        -1.74 * x[1] - 1.74 * x[2] - 1.74 * x[3] - 1.45 * x[4] - 1.45 * x[5] -\n        1.45 * x[6] +\n        7.38 * x[7] +\n        7.38 * x[8] +\n        7.38 * x[9] +\n        5.6 * x[10] +\n        5.6 * x[11] +\n        5.6 * x[12] - 1.7 * x[13] - 1.7 * x[14] - 1.7 * x[15] - 1.18 * x[16] -\n        1.18 * x[17] - 1.18 * x[18] +\n        7.21 * x[19] +\n        7.21 * x[20] +\n        7.21 * x[21] +\n        5.45 * x[22] +\n        5.45 * x[23] +\n        5.45 * x[24] - 0.3 * x[25] - 0.3 * x[26] - 0.3 * x[27] +\n        7.71 * x[28] +\n        7.71 * x[29] +\n        7.71 * x[30] +\n        6.28 * x[31] +\n        6.28 * x[32] +\n        6.28 * x[33] +\n        7.74 * x[34] +\n        7.74 * x[35] +\n        7.74 * x[36] - 0.84 * x[67] - 0.84 * x[68] - 0.84 * x[69] - 0.05 * x[70] -\n        0.05 * x[71] - 0.05 * x[72] - 0.94 * x[73] - 0.94 * x[74] - 0.94 * x[75] -\n        0.81 * x[76] - 0.81 * x[77] - 0.81 * x[78] - 0.79 * x[79] - 0.79 * x[80] -\n        0.79 * x[81] - 0.05 * x[82] - 0.05 * x[83] - 0.05 * x[84] - 0.65 * x[85] -\n        0.65 * x[86] - 0.65 * x[87] - 0.97 * x[88] - 0.97 * x[89] - 0.97 * x[90] -\n        0.57 * x[91] - 0.57 * x[92] - 0.57 * x[93] - 0.26 * x[94] - 0.26 * x[95] -\n        0.26 * x[96] - 0.45 * x[97] - 0.45 * x[98] - 0.45 * x[99] - 0.1 * x[100] -\n        0.1 * x[101] - 0.1 * x[102]\n    )\n\n    @NLconstraint(\n        m,\n        x[37] * x[55] - 0.6 * x[1] - 0.2 * x[13] +\n        0.2 * x[25] +\n        0.2 * x[28] +\n        0.2 * x[31] >= 0.04\n    )  #= e8: =#\n    @NLconstraint(\n        m,\n        x[40] * x[58] - 0.6 * x[4] - 0.2 * x[16] - 0.2 * x[25] + 0.7 * x[34] >= 0.07\n    )  #= e9: =#\n    @NLconstraint(\n        m,\n        x[43] * x[55] - 0.4 * x[1] - 0.4 * x[13] +\n        0.5 * x[25] +\n        0.5 * x[28] +\n        0.5 * x[31] >= 0.1\n    )  #= e10: =#\n    @NLconstraint(\n        m,\n        x[46] * x[58] - 0.4 * x[4] - 0.4 * x[16] - 0.5 * x[25] + 0.6 * x[34] >= 0.06\n    )  #= e11: =#\n    @NLconstraint(\n        m,\n        x[38] * x[56] -\n        (x[37] * x[55] - (x[37] * x[26] + x[37] * x[29] + x[37] * x[32])) - 0.6 * x[2] -\n        0.2 * x[14] >= 0\n    )  #= e24: =#\n    @NLconstraint(\n        m,\n        x[39] * x[57] -\n        (x[38] * x[56] - (x[38] * x[27] + x[38] * x[30] + x[38] * x[33])) - 0.6 * x[3] -\n        0.2 * x[15] >= 0\n    )  #= e25: =#\n    @NLconstraint(\n        m,\n        x[41] * x[59] - (x[40] * x[58] + x[37] * x[26] - x[40] * x[35]) - 0.6 * x[5] -\n        0.2 * x[17] >= 0\n    )  #= e26: =#\n    @NLconstraint(\n        m,\n        x[42] * x[60] - (x[41] * x[59] + x[38] * x[27] - x[41] * x[36]) - 0.6 * x[6] -\n        0.2 * x[18] >= 0\n    )  #= e27: =#\n    @NLconstraint(\n        m,\n        x[44] * x[56] -\n        (x[43] * x[55] - (x[43] * x[26] + x[43] * x[29] + x[43] * x[32])) - 0.4 * x[2] -\n        0.4 * x[14] >= 0\n    )  #= e28: =#\n    @NLconstraint(\n        m,\n        x[45] * x[57] -\n        (x[44] * x[56] - (x[44] * x[27] + x[44] * x[30] + x[44] * x[33])) - 0.4 * x[3] -\n        0.4 * x[15] >= 0\n    )  #= e29: =#\n    @NLconstraint(\n        m,\n        x[47] * x[59] - (x[46] * x[58] + x[43] * x[26] - x[46] * x[35]) - 0.4 * x[5] -\n        0.4 * x[17] >= 0\n    )  #= e30: =#\n    @NLconstraint(\n        m,\n        x[48] * x[60] - (x[47] * x[59] + x[44] * x[27] - x[47] * x[36]) - 0.4 * x[6] -\n        0.4 * x[18] >= 0\n    )  #= e31: =#\n\n    @NLconstraint(\n        m,\n        x[37] * x[55] - 0.6 * x[1] - 0.2 * x[13] +\n        0.2 * x[25] +\n        0.2 * x[28] +\n        0.2 * x[31] <= 0.04\n    )  #= e8: =#\n    @NLconstraint(\n        m,\n        x[40] * x[58] - 0.6 * x[4] - 0.2 * x[16] - 0.2 * x[25] + 0.7 * x[34] <= 0.07\n    )  #= e9: =#\n    @NLconstraint(\n        m,\n        x[43] * x[55] - 0.4 * x[1] - 0.4 * x[13] +\n        0.5 * x[25] +\n        0.5 * x[28] +\n        0.5 * x[31] <= 0.1\n    )  #= e10: =#\n    @NLconstraint(\n        m,\n        x[46] * x[58] - 0.4 * x[4] - 0.4 * x[16] - 0.5 * x[25] + 0.6 * x[34] <= 0.06\n    )  #= e11: =#\n    @NLconstraint(\n        m,\n        x[38] * x[56] -\n        (x[37] * x[55] - (x[37] * x[26] + x[37] * x[29] + x[37] * x[32])) - 0.6 * x[2] -\n        0.2 * x[14] <= 0\n    )  #= e24: =#\n    @NLconstraint(\n        m,\n        x[39] * x[57] -\n        (x[38] * x[56] - (x[38] * x[27] + x[38] * x[30] + x[38] * x[33])) - 0.6 * x[3] -\n        0.2 * x[15] <= 0\n    )  #= e25: =#\n    @NLconstraint(\n        m,\n        x[41] * x[59] - (x[40] * x[58] + x[37] * x[26] - x[40] * x[35]) - 0.6 * x[5] -\n        0.2 * x[17] <= 0\n    )  #= e26: =#\n    @NLconstraint(\n        m,\n        x[42] * x[60] - (x[41] * x[59] + x[38] * x[27] - x[41] * x[36]) - 0.6 * x[6] -\n        0.2 * x[18] <= 0\n    )  #= e27: =#\n    @NLconstraint(\n        m,\n        x[44] * x[56] -\n        (x[43] * x[55] - (x[43] * x[26] + x[43] * x[29] + x[43] * x[32])) - 0.4 * x[2] -\n        0.4 * x[14] <= 0\n    )  #= e28: =#\n    @NLconstraint(\n        m,\n        x[45] * x[57] -\n        (x[44] * x[56] - (x[44] * x[27] + x[44] * x[30] + x[44] * x[33])) - 0.4 * x[3] -\n        0.4 * x[15] <= 0\n    )  #= e29: =#\n    @NLconstraint(\n        m,\n        x[47] * x[59] - (x[46] * x[58] + x[43] * x[26] - x[46] * x[35]) - 0.4 * x[5] -\n        0.4 * x[17] <= 0\n    )  #= e30: =#\n    @NLconstraint(\n        m,\n        x[48] * x[60] - (x[47] * x[59] + x[44] * x[27] - x[47] * x[36]) - 0.4 * x[6] -\n        0.4 * x[18] <= 0\n    )  #= e31: =#\n\n    warmstarter = [\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        1.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.53351,\n        0.60649,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.2,\n        0.2,\n        0.2,\n        0.7,\n        0.7,\n        0.7,\n        0.5,\n        0.5,\n        0.5,\n        0.6,\n        0.6,\n        0.6,\n        1.0,\n        2.0,\n        1.0,\n        1.1,\n        0.66649,\n        0.96,\n        0.2,\n        0.2,\n        0.2,\n        0.1,\n        0.1,\n        0.1,\n        1.55,\n        1.27351,\n        2.0,\n        0.49,\n        0.35,\n        0.25,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        1.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        1.0,\n        1.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n    ]\n    for i in 1:102\n        JuMP.set_start_value(x[i], warmstarter[i])\n    end\n\n    @constraint(m, x[1] + x[4] + x[7] + x[10] + x[49] == 1)  #= e2: =#\n    @constraint(m, x[13] + x[16] + x[19] + x[22] + x[52] == 1.1)  #= e3: =#\n    @constraint(m, -x[1] - x[13] + x[25] + x[28] + x[31] + x[55] == 0.2)  #= e4: =#\n    @constraint(m, -x[4] - x[16] - x[25] + x[34] + x[58] == 0.1)  #= e5: =#\n    @constraint(m, -x[7] - x[19] - x[28] - x[34] + x[61] == 1.55)  #= e6: =#\n    @constraint(m, -x[10] - x[22] - x[31] + x[64] == 0.49)  #= e7: =#\n    @constraint(m, x[2] + x[5] + x[8] + x[11] - x[49] + x[50] == 1)  #= e12: =#\n    @constraint(m, x[3] + x[6] + x[9] + x[12] - x[50] + x[51] == 0)  #= e13: =#\n    @constraint(m, x[14] + x[17] + x[20] + x[23] - x[52] + x[53] == 0.1)  #= e14: =#\n    @constraint(m, x[15] + x[18] + x[21] + x[24] - x[53] + x[54] == 0.9)  #= e15: =#\n    @constraint(m, -x[2] - x[14] + x[26] + x[29] + x[32] - x[55] + x[56] == 0)  #= e16: =#\n    @constraint(m, -x[3] - x[15] + x[27] + x[30] + x[33] - x[56] + x[57] == 0)  #= e17: =#\n    @constraint(m, -x[5] - x[17] - x[26] + x[35] - x[58] + x[59] == 0)  #= e18: =#\n    @constraint(m, -x[6] - x[18] - x[27] + x[36] - x[59] + x[60] == 0)  #= e19: =#\n    @constraint(m, -x[8] - x[20] - x[29] - x[35] - x[61] + x[62] == -0.81)  #= e20: =#\n    @constraint(m, -x[9] - x[21] - x[30] - x[36] - x[62] + x[63] == -0.88)  #= e21: =#\n    @constraint(m, -x[11] - x[23] - x[32] - x[64] + x[65] == -0.14)  #= e22: =#\n    @constraint(m, -x[12] - x[24] - x[33] - x[65] + x[66] == -0.1)  #= e23: =#\n    @constraint(m, x[1] - x[67] <= 0)  #= e32: =#\n    @constraint(m, x[2] - x[68] <= 0)  #= e33: =#\n    @constraint(m, x[3] - x[69] <= 0)  #= e34: =#\n    @constraint(m, x[4] - x[70] <= 0)  #= e35: =#\n    @constraint(m, x[5] - x[71] <= 0)  #= e36: =#\n    @constraint(m, x[6] - x[72] <= 0)  #= e37: =#\n    @constraint(m, x[7] - x[73] <= 0)  #= e38: =#\n    @constraint(m, x[8] - x[74] <= 0)  #= e39: =#\n    @constraint(m, x[9] - x[75] <= 0)  #= e40: =#\n    @constraint(m, x[10] - x[76] <= 0)  #= e41: =#\n    @constraint(m, x[11] - x[77] <= 0)  #= e42: =#\n    @constraint(m, x[12] - x[78] <= 0)  #= e43: =#\n    @constraint(m, x[13] - x[79] <= 0)  #= e44: =#\n    @constraint(m, x[14] - x[80] <= 0)  #= e45: =#\n    @constraint(m, x[15] - x[81] <= 0)  #= e46: =#\n    @constraint(m, x[16] - x[82] <= 0)  #= e47: =#\n    @constraint(m, x[17] - x[83] <= 0)  #= e48: =#\n    @constraint(m, x[18] - x[84] <= 0)  #= e49: =#\n    @constraint(m, x[19] - x[85] <= 0)  #= e50: =#\n    @constraint(m, x[20] - x[86] <= 0)  #= e51: =#\n    @constraint(m, x[21] - x[87] <= 0)  #= e52: =#\n    @constraint(m, x[22] - x[88] <= 0)  #= e53: =#\n    @constraint(m, x[23] - x[89] <= 0)  #= e54: =#\n    @constraint(m, x[24] - x[90] <= 0)  #= e55: =#\n    @constraint(m, x[25] - x[91] <= 0)  #= e56: =#\n    @constraint(m, x[26] - x[92] <= 0)  #= e57: =#\n    @constraint(m, x[27] - x[93] <= 0)  #= e58: =#\n    @constraint(m, x[28] - x[94] <= 0)  #= e59: =#\n    @constraint(m, x[29] - x[95] <= 0)  #= e60: =#\n    @constraint(m, x[30] - x[96] <= 0)  #= e61: =#\n    @constraint(m, x[31] - x[97] <= 0)  #= e62: =#\n    @constraint(m, x[32] - x[98] <= 0)  #= e63: =#\n    @constraint(m, x[33] - x[99] <= 0)  #= e64: =#\n    @constraint(m, x[34] - x[100] <= 0)  #= e65: =#\n    @constraint(m, x[35] - x[101] <= 0)  #= e66: =#\n    @constraint(m, x[36] - x[102] <= 0)  #= e67: =#\n    @constraint(m, x[1] >= 0)  #= e68: =#\n    @constraint(m, x[2] >= 0)  #= e69: =#\n    @constraint(m, x[3] >= 0)  #= e70: =#\n    @constraint(m, x[4] >= 0)  #= e71: =#\n    @constraint(m, x[5] >= 0)  #= e72: =#\n    @constraint(m, x[6] >= 0)  #= e73: =#\n    @constraint(m, x[7] >= 0)  #= e74: =#\n    @constraint(m, x[8] >= 0)  #= e75: =#\n    @constraint(m, x[9] >= 0)  #= e76: =#\n    @constraint(m, x[10] >= 0)  #= e77: =#\n    @constraint(m, x[11] >= 0)  #= e78: =#\n    @constraint(m, x[12] >= 0)  #= e79: =#\n    @constraint(m, x[13] >= 0)  #= e80: =#\n    @constraint(m, x[14] >= 0)  #= e81: =#\n    @constraint(m, x[15] >= 0)  #= e82: =#\n    @constraint(m, x[16] >= 0)  #= e83: =#\n    @constraint(m, x[17] >= 0)  #= e84: =#\n    @constraint(m, x[18] >= 0)  #= e85: =#\n    @constraint(m, x[19] >= 0)  #= e86: =#\n    @constraint(m, x[20] >= 0)  #= e87: =#\n    @constraint(m, x[21] >= 0)  #= e88: =#\n    @constraint(m, x[22] >= 0)  #= e89: =#\n    @constraint(m, x[23] >= 0)  #= e90: =#\n    @constraint(m, x[24] >= 0)  #= e91: =#\n    @constraint(m, x[25] >= 0)  #= e92: =#\n    @constraint(m, x[26] >= 0)  #= e93: =#\n    @constraint(m, x[27] >= 0)  #= e94: =#\n    @constraint(m, x[28] >= 0)  #= e95: =#\n    @constraint(m, x[29] >= 0)  #= e96: =#\n    @constraint(m, x[30] >= 0)  #= e97: =#\n    @constraint(m, x[31] >= 0)  #= e98: =#\n    @constraint(m, x[32] >= 0)  #= e99: =#\n    @constraint(m, x[33] >= 0)  #= e100: =#\n    @constraint(m, x[34] >= 0)  #= e101: =#\n    @constraint(m, x[35] >= 0)  #= e102: =#\n    @constraint(m, x[36] >= 0)  #= e103: =#\n    @constraint(m, x[73] <= 1.5)  #= e104: =#\n    @constraint(m, x[74] <= 1.5)  #= e105: =#\n    @constraint(m, x[75] <= 1.5)  #= e106: =#\n    @constraint(m, x[76] <= 0.6)  #= e107: =#\n    @constraint(m, x[77] <= 0.6)  #= e108: =#\n    @constraint(m, x[78] <= 0.6)  #= e109: =#\n    @constraint(m, x[85] <= 1.1)  #= e110: =#\n    @constraint(m, x[86] <= 1.1)  #= e111: =#\n    @constraint(m, x[87] <= 1.1)  #= e112: =#\n    @constraint(m, x[88] <= 0.2)  #= e113: =#\n    @constraint(m, x[89] <= 0.2)  #= e114: =#\n    @constraint(m, x[90] <= 0.2)  #= e115: =#\n    @constraint(m, x[73] <= 1)  #= e116: =#\n    @constraint(m, x[74] <= 1)  #= e117: =#\n    @constraint(m, x[75] <= 1)  #= e118: =#\n    @constraint(m, x[76] <= 0.8)  #= e119: =#\n    @constraint(m, x[77] <= 0.8)  #= e120: =#\n    @constraint(m, x[78] <= 0.8)  #= e121: =#\n    @constraint(m, x[85] <= 1)  #= e122: =#\n    @constraint(m, x[86] <= 1)  #= e123: =#\n    @constraint(m, x[87] <= 1)  #= e124: =#\n    @constraint(m, x[88] <= 0.8)  #= e125: =#\n    @constraint(m, x[89] <= 0.8)  #= e126: =#\n    @constraint(m, x[90] <= 0.8)  #= e127: =#\n    @constraint(m, -x[73] >= -1.3)  #= e128: =#\n    @constraint(m, -x[74] >= -1.3)  #= e129: =#\n    @constraint(m, -x[75] >= -1.3)  #= e130: =#\n    @constraint(m, -x[76] >= -1.4)  #= e131: =#\n    @constraint(m, -x[77] >= -1.4)  #= e132: =#\n    @constraint(m, -x[78] >= -1.4)  #= e133: =#\n    @constraint(m, -x[85] >= -1.7)  #= e134: =#\n    @constraint(m, -x[86] >= -1.7)  #= e135: =#\n    @constraint(m, -x[87] >= -1.7)  #= e136: =#\n    @constraint(m, -x[88] >= -1.8)  #= e137: =#\n    @constraint(m, -x[89] >= -1.8)  #= e138: =#\n    @constraint(m, -x[90] >= -1.8)  #= e139: =#\n    @constraint(m, -x[73] >= -1)  #= e140: =#\n    @constraint(m, -x[74] >= -1)  #= e141: =#\n    @constraint(m, -x[75] >= -1)  #= e142: =#\n    @constraint(m, -x[76] >= -1.4)  #= e143: =#\n    @constraint(m, -x[77] >= -1.4)  #= e144: =#\n    @constraint(m, -x[78] >= -1.4)  #= e145: =#\n    @constraint(m, -x[85] >= -1)  #= e146: =#\n    @constraint(m, -x[86] >= -1)  #= e147: =#\n    @constraint(m, -x[87] >= -1)  #= e148: =#\n    @constraint(m, -x[88] >= -1.4)  #= e149: =#\n    @constraint(m, -x[89] >= -1.4)  #= e150: =#\n    @constraint(m, -x[90] >= -1.4)  #= e151: =#\n    @constraint(m, -x[37] + x[95] <= 0.9)  #= e152: =#\n    @constraint(m, -x[38] + x[96] <= 0.9)  #= e153: =#\n    @constraint(m, -x[37] + x[98] <= 0)  #= e154: =#\n    @constraint(m, -x[38] + x[99] <= 0)  #= e155: =#\n    @constraint(m, -x[40] + x[101] <= 0.9)  #= e156: =#\n    @constraint(m, -x[41] + x[102] <= 0.9)  #= e157: =#\n    @constraint(m, -x[43] + x[95] <= 0.6)  #= e158: =#\n    @constraint(m, -x[44] + x[96] <= 0.6)  #= e159: =#\n    @constraint(m, -x[43] + x[98] <= 0.4)  #= e160: =#\n    @constraint(m, -x[44] + x[99] <= 0.4)  #= e161: =#\n    @constraint(m, -x[46] + x[101] <= 0.6)  #= e162: =#\n    @constraint(m, -x[47] + x[102] <= 0.6)  #= e163: =#\n    @constraint(m, -x[37] - x[95] >= -1.9)  #= e164: =#\n    @constraint(m, -x[38] - x[96] >= -1.9)  #= e165: =#\n    @constraint(m, -x[37] - x[98] >= -2)  #= e166: =#\n    @constraint(m, -x[38] - x[99] >= -2)  #= e167: =#\n    @constraint(m, -x[40] - x[101] >= -1.9)  #= e168: =#\n    @constraint(m, -x[41] - x[102] >= -1.9)  #= e169: =#\n    @constraint(m, -x[43] - x[95] >= -1.4)  #= e170: =#\n    @constraint(m, -x[44] - x[96] >= -1.4)  #= e171: =#\n    @constraint(m, -x[43] - x[98] >= -1.8)  #= e172: =#\n    @constraint(m, -x[44] - x[99] >= -1.8)  #= e173: =#\n    @constraint(m, -x[46] - x[101] >= -1.4)  #= e174: =#\n    @constraint(m, -x[47] - x[102] >= -1.4)  #= e175: =#\n    @constraint(m, x[94] <= 1.1)  #= e176: =#\n    @constraint(m, x[97] <= 0.2)  #= e177: =#\n    @constraint(m, x[100] <= 1.6)  #= e178: =#\n    @constraint(m, x[94] <= 1.1)  #= e179: =#\n    @constraint(m, x[97] <= 0.9)  #= e180: =#\n    @constraint(m, x[100] <= 1.2)  #= e181: =#\n    @constraint(m, -x[94] >= -1.7)  #= e182: =#\n    @constraint(m, -x[97] >= -1.8)  #= e183: =#\n    @constraint(m, -x[100] >= -1.2)  #= e184: =#\n    @constraint(m, -x[94] >= -0.9)  #= e185: =#\n    @constraint(m, -x[97] >= -1.3)  #= e186: =#\n    @constraint(m, -x[100] >= -0.8)  #= e187: =#\n    @constraint(m, x[67] + x[91] <= 1)  #= e188: =#\n    @constraint(m, x[68] + x[92] <= 1)  #= e189: =#\n    @constraint(m, x[69] + x[93] <= 1)  #= e190: =#\n    @constraint(m, x[67] + x[94] <= 1)  #= e191: =#\n    @constraint(m, x[68] + x[95] <= 1)  #= e192: =#\n    @constraint(m, x[69] + x[96] <= 1)  #= e193: =#\n    @constraint(m, x[67] + x[97] <= 1)  #= e194: =#\n    @constraint(m, x[68] + x[98] <= 1)  #= e195: =#\n    @constraint(m, x[69] + x[99] <= 1)  #= e196: =#\n    @constraint(m, x[79] + x[91] <= 1)  #= e197: =#\n    @constraint(m, x[80] + x[92] <= 1)  #= e198: =#\n    @constraint(m, x[81] + x[93] <= 1)  #= e199: =#\n    @constraint(m, x[79] + x[94] <= 1)  #= e200: =#\n    @constraint(m, x[80] + x[95] <= 1)  #= e201: =#\n    @constraint(m, x[81] + x[96] <= 1)  #= e202: =#\n    @constraint(m, x[79] + x[97] <= 1)  #= e203: =#\n    @constraint(m, x[80] + x[98] <= 1)  #= e204: =#\n    @constraint(m, x[81] + x[99] <= 1)  #= e205: =#\n    @constraint(m, x[70] + x[100] <= 1)  #= e206: =#\n    @constraint(m, x[71] + x[101] <= 1)  #= e207: =#\n    @constraint(m, x[72] + x[102] <= 1)  #= e208: =#\n    @constraint(m, x[82] + x[100] <= 1)  #= e209: =#\n    @constraint(m, x[83] + x[101] <= 1)  #= e210: =#\n    @constraint(m, x[84] + x[102] <= 1)  #= e211: =#\n    @constraint(m, x[91] + x[100] <= 1)  #= e212: =#\n    @constraint(m, x[92] + x[101] <= 1)  #= e213: =#\n    @constraint(m, x[93] + x[102] <= 1)  #= e214: =#\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/bnlp.jl",
    "content": "function hmittelman(; solver = nothing)\n    # Source: https://www.minlplib.org/hmittelman.html\n    # Global solution: 13.0\n\n    m = JuMP.Model(solver)\n\n    # ----- Variables ----- #\n    @variable(m, 0 <= objvar <= 20)\n    b_Idx = Any[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]\n    @variable(m, b[b_Idx], Bin)\n\n    # ----- Constraints ----- #\n    @NLconstraint(\n        m,\n        e1,\n        -(\n            10 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] +\n            7 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] +\n            b[3] * b[4] * b[6] * b[7] * b[8] +\n            12 * b[3] * b[4] * b[8] * b[11] +\n            8 * b[6] * b[7] * b[8] * b[12] +\n            3 * b[6] * b[7] * b[9] * b[14] * b[16] +\n            b[9] * b[10] * b[14] * b[16] +\n            5 * b[5] * b[10] * b[14] * b[15] * b[16] +\n            3 * b[1] * b[2] * b[11] * b[12]\n        ) + objvar == 0.0\n    )\n    @NLconstraint(\n        m,\n        e2,\n        3 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] -\n        12 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] -\n        8 * b[3] * b[4] * b[6] * b[7] * b[8] + b[3] * b[4] * b[8] * b[11] -\n        7 * b[1] * b[2] * b[11] * b[12] + 2 * b[13] * b[14] * b[15] * b[16] <= -2.0\n    )\n    @NLconstraint(\n        m,\n        e3,\n        b[1] * b[2] * b[3] * b[4] * b[8] * b[11] - 10 * b[3] * b[4] * b[6] * b[7] * b[8] -\n        5 * b[6] * b[7] * b[8] * b[12] +\n        b[6] * b[7] * b[9] * b[14] * b[16] +\n        7 * b[9] * b[10] * b[14] * b[16] +\n        b[5] * b[10] * b[14] * b[15] * b[16] <= -1.0\n    )\n    @NLconstraint(\n        m,\n        e4,\n        5 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] -\n        3 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] - b[3] * b[4] * b[6] * b[7] * b[8] -\n        2 * b[5] * b[10] * b[14] * b[15] * b[16] + b[13] * b[14] * b[15] * b[16] <= -1.0\n    )\n    @NLconstraint(\n        m,\n        e5,\n        3 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] -\n        5 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] +\n        b[3] * b[4] * b[6] * b[7] * b[8] +\n        2 * b[5] * b[10] * b[14] * b[15] * b[16] - b[13] * b[14] * b[15] * b[16] <= 1.0\n    )\n    @NLconstraint(\n        m,\n        e6,\n        (-4 * b[3] * b[4] * b[6] * b[7] * b[8]) - 2 * b[3] * b[4] * b[8] * b[11] -\n        5 * b[6] * b[7] * b[9] * b[14] * b[16] + b[9] * b[10] * b[14] * b[16] -\n        9 * b[5] * b[10] * b[14] * b[15] * b[16] - 2 * b[1] * b[2] * b[11] * b[12] <=\n        -3.0\n    )\n    @NLconstraint(\n        m,\n        e7,\n        9 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] - 12 * b[3] * b[4] * b[8] * b[11] -\n        7 * b[6] * b[7] * b[8] * b[12] +\n        6 * b[6] * b[7] * b[9] * b[14] * b[16] +\n        2 * b[5] * b[10] * b[14] * b[15] * b[16] - 15 * b[1] * b[2] * b[11] * b[12] +\n        3 * b[13] * b[14] * b[15] * b[16] <= -7.0\n    )\n    @NLconstraint(\n        m,\n        e8,\n        5 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] -\n        8 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] +\n        2 * b[3] * b[4] * b[6] * b[7] * b[8] - 7 * b[3] * b[4] * b[8] * b[11] -\n        b[6] * b[7] * b[8] * b[12] - 5 * b[9] * b[10] * b[14] * b[16] -\n        10 * b[1] * b[2] * b[11] * b[12] <= -1.0\n    )\n\n    # ----- Objective ----- #\n    @objective(m, Min, objvar)\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/brainpc3.jl",
    "content": "function brainpc3(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    # ----- Variables ----- #\n    @variable(m, x[1:6907])\n\n    @NLobjective(\n        m,\n        Min,\n        (\n            (-0.003214) + x[16] - (x[16] + x[3467]) * x[6903] +\n            x[3467] +\n            6.34e-6 * x[6903]\n        )^2 +\n        (x[46] - (x[46] + x[3497]) * x[6903] + x[3497] + 0.01551 * x[6903])^2 +\n        (x[76] - (x[76] + x[3527]) * x[6903] + x[3527] + 0.008919 * x[6903])^2 +\n        (x[106] - (x[106] + x[3557]) * x[6903] + x[3557] + 0.005968 * x[6903])^2 +\n        (x[136] - (x[136] + x[3587]) * x[6903] + x[3587] + 0.005773 * x[6903])^2 +\n        (x[166] - (x[166] + x[3617]) * x[6903] + x[3617] + 0.004985 * x[6903])^2 +\n        (x[196] - (x[196] + x[3647]) * x[6903] + x[3647] + 0.004795 * x[6903])^2 +\n        (x[226] - (x[226] + x[3677]) * x[6903] + x[3677] + 0.004409 * x[6903])^2 +\n        (x[271] - (x[271] + x[3722]) * x[6903] + x[3722] + 0.003829 * x[6903])^2 +\n        (x[331] - (x[331] + x[3782]) * x[6903] + x[3782] + 0.003269 * x[6903])^2 +\n        (x[391] - (x[391] + x[3842]) * x[6903] + x[3842] + 0.00317 * x[6903])^2 +\n        (x[451] - (x[451] + x[3902]) * x[6903] + x[3902] + 0.00307 * x[6903])^2 +\n        (x[511] - (x[511] + x[3962]) * x[6903] + x[3962] + 0.002971 * x[6903])^2 +\n        (x[631] - (x[631] + x[4082]) * x[6903] + x[4082] + 0.002765 * x[6903])^2 +\n        (x[811] - (x[811] + x[4262]) * x[6903] + x[4262] + 0.00247 * x[6903])^2 +\n        (x[991] - (x[991] + x[4442]) * x[6903] + x[4442] + 0.002252 * x[6903])^2 +\n        (x[1171] - (x[1171] + x[4622]) * x[6903] + x[4622] + 0.002066 * x[6903])^2 +\n        (x[1351] - (x[1351] + x[4802]) * x[6903] + x[4802] + 0.001891 * x[6903])^2 +\n        (x[1531] - (x[1531] + x[4982]) * x[6903] + x[4982] + 0.00173 * x[6903])^2 +\n        (x[1711] - (x[1711] + x[5162]) * x[6903] + x[5162] + 0.001713 * x[6903])^2 +\n        (x[1951] - (x[1951] + x[5402]) * x[6903] + x[5402] + 0.00166 * x[6903])^2 +\n        (x[2251] - (x[2251] + x[5702]) * x[6903] + x[5702] + 0.001548 * x[6903])^2 +\n        (x[2551] - (x[2551] + x[6002]) * x[6903] + x[6002] + 0.001435 * x[6903])^2 +\n        (x[2851] - (x[2851] + x[6302]) * x[6903] + x[6302] + 0.001323 * x[6903])^2 +\n        (x[3151] - (x[3151] + x[6602]) * x[6903] + x[6602] + 0.00121 * x[6903])^2 +\n        (x[3451] - (x[3451] + x[6902]) * x[6903] + x[6902] + 0.001098 * x[6903])^2\n    )\n\n    return m  # model get returned when including this script.\nend\n"
  },
  {
    "path": "examples/MINLPs/castro.jl",
    "content": "function castro2m2(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 0 <= x[1:41] <= 1E5)\n    @variable(m, 0 <= obj <= 1E3)\n    @objective(m, Min, obj)\n\n    @NLconstraint(m, e31, x[28] * x[30] - x[16] == 0.0)\n    @NLconstraint(m, e32, x[28] * x[31] - x[17] == 0.0)\n    @NLconstraint(m, e33, x[29] * x[32] - x[18] == 0.0)\n    @NLconstraint(m, e34, x[29] * x[33] - x[19] == 0.0)\n    @NLconstraint(m, e35, x[28] * x[36] - x[22] == 0.0)\n    @NLconstraint(m, e36, x[29] * x[37] - x[23] == 0.0)\n    @NLconstraint(m, e37, x[14] * x[30] - x[1] == 0.0)\n    @NLconstraint(m, e38, x[14] * x[31] - x[2] == 0.0)\n    @NLconstraint(m, e39, x[15] * x[32] - x[3] == 0.0)\n    @NLconstraint(m, e40, x[15] * x[33] - x[4] == 0.0)\n    @NLconstraint(m, e41, x[14] * x[36] - x[7] == 0.0)\n    @NLconstraint(m, e42, x[15] * x[37] - x[8] == 0.0)\n\n    @constraint(m, e1, -x[14] - x[15] + obj == 0.0)\n    @constraint(m, e2, -x[5] - x[9] - x[10] == -60.0)\n    @constraint(m, e3, -x[6] - x[11] - x[12] == -20.0)\n    @constraint(m, e4, -x[1] - x[3] - x[9] - x[11] + x[14] == 0.0)\n    @constraint(m, e5, -x[2] - x[4] - x[10] - x[12] + x[15] == 0.0)\n    @constraint(m, e6, -x[1] - x[2] - x[7] + x[14] == 0.0)\n    @constraint(m, e7, -x[3] - x[4] - x[8] + x[15] == 0.0)\n    @constraint(m, e8, -x[5] - x[6] - x[7] - x[8] + x[13] == 0.0)\n    @constraint(m, e9, -x[20] - x[24] - x[25] == -24000.0)\n    @constraint(m, e10, -x[21] - x[26] - x[27] == -16000.0)\n    @constraint(m, e11, -x[24] + 24000 * x[38] == 0.0)\n    @constraint(m, e12, -x[25] + 24000 * x[39] == 0.0)\n    @constraint(m, e13, -x[26] + 16000 * x[40] == 0.0)\n    @constraint(m, e14, -x[27] + 16000 * x[41] == 0.0)\n    @constraint(m, e15, -x[20] + 24000 * x[34] == 0.0)\n    @constraint(m, e16, -x[21] + 16000 * x[35] == 0.0)\n    @constraint(m, e17, -x[9] + 60 * x[38] == 0.0)\n    @constraint(m, e18, -x[10] + 60 * x[39] == 0.0)\n    @constraint(m, e19, -x[11] + 20 * x[40] == 0.0)\n    @constraint(m, e20, -x[12] + 20 * x[41] == 0.0)\n    @constraint(m, e21, -x[5] + 60 * x[34] == 0.0)\n    @constraint(m, e22, -x[6] + 20 * x[35] == 0.0)\n    @constraint(m, e23, x[34] + x[38] + x[39] == 1.0)\n    @constraint(m, e24, x[35] + x[40] + x[41] == 1.0)\n    @constraint(m, e25, -200 * x[14] + x[16] + x[18] + x[24] + x[26] <= 0.0)\n    @constraint(m, e26, -1000 * x[15] + x[17] + x[19] + x[25] + x[27] <= 0.0)\n    @constraint(\n        m,\n        e27,\n        0.01 * x[16] + 0.01 * x[18] + 0.01 * x[24] + 0.01 * x[26] - x[28] == 0.0\n    )\n    @constraint(\n        m,\n        e28,\n        0.2 * x[17] + 0.2 * x[19] + 0.2 * x[25] + 0.2 * x[27] - x[29] == 0.0\n    )\n    @constraint(m, e29, -x[16] - x[17] - x[22] + x[28] == 0.0)\n    @constraint(m, e30, -x[18] - x[19] - x[23] + x[29] == 0.0)\n    @constraint(m, e43, x[30] + x[31] + x[36] == 1.0)\n    @constraint(m, e44, x[32] + x[33] + x[37] == 1.0)\n    @constraint(m, e45, -10 * x[13] + x[20] + x[21] + x[22] + x[23] <= 0.0)\n\n    return m\nend\n\nfunction castro6m2(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 0 <= x[1:133] <= 1E6)\n    @variable(m, obj)\n    @variable(m, b[1:40])   #Additional variables to increase degree of freedom and Ipopt's convergence\n    @objective(m, Min, obj)\n\n    # Non-Linear Constraints\n    @NLconstraint(m, e99, x[101] * x[110] - x[29] == 0.0)\n    @NLconstraint(m, e100, x[102] * x[110] - x[30] == 0.0)\n    @NLconstraint(m, e101, x[103] * x[110] - x[31] == 0.0)\n    @NLconstraint(m, e102, x[101] * x[111] - x[32] == 0.0)\n    @NLconstraint(m, e103, x[102] * x[111] - x[33] == 0.0)\n    @NLconstraint(m, e104, x[103] * x[111] - x[34] == 0.0)\n    @NLconstraint(m, e105, x[101] * x[112] - x[35] == 0.0)\n    @NLconstraint(m, e106, x[102] * x[112] - x[36] == 0.0)\n    @NLconstraint(m, e107, x[103] * x[112] - x[37] == 0.0)\n    @NLconstraint(m, e108, x[104] * x[113] - x[38] == 0.0)\n    @NLconstraint(m, e109, x[105] * x[113] - x[39] == 0.0)\n    @NLconstraint(m, e110, x[106] * x[113] - x[40] == 0.0)\n    @NLconstraint(m, e111, x[104] * x[114] - x[41] == 0.0)\n    @NLconstraint(m, e112, x[105] * x[114] - x[42] == 0.0)\n    @NLconstraint(m, e113, x[106] * x[114] - x[43] == 0.0)\n    @NLconstraint(m, e114, x[104] * x[115] - x[44] == 0.0)\n    @NLconstraint(m, e115, x[105] * x[115] - x[45] == 0.0)\n    @NLconstraint(m, e116, x[106] * x[115] - x[46] == 0.0)\n    @NLconstraint(m, e117, x[107] * x[116] - x[47] == 0.0)\n    @NLconstraint(m, e118, x[108] * x[116] - x[48] == 0.0)\n    @NLconstraint(m, e119, x[109] * x[116] - x[49] == 0.0)\n    @NLconstraint(m, e120, x[107] * x[117] - x[50] == 0.0)\n    @NLconstraint(m, e121, x[108] * x[117] - x[51] == 0.0)\n    @NLconstraint(m, e122, x[109] * x[117] - x[52] == 0.0)\n    @NLconstraint(m, e123, x[107] * x[118] - x[53] == 0.0)\n    @NLconstraint(m, e124, x[108] * x[118] - x[54] == 0.0)\n    @NLconstraint(m, e125, x[109] * x[118] - x[55] == 0.0)\n    @NLconstraint(m, e126, x[101] * x[122] - x[65] == 0.0)\n    @NLconstraint(m, e127, x[102] * x[122] - x[66] == 0.0)\n    @NLconstraint(m, e128, x[103] * x[122] - x[67] == 0.0)\n    @NLconstraint(m, e129, x[104] * x[123] - x[68] == 0.0)\n    @NLconstraint(m, e130, x[105] * x[123] - x[69] == 0.0)\n    @NLconstraint(m, e131, x[106] * x[123] - x[70] == 0.0)\n    @NLconstraint(m, e132, x[107] * x[124] - x[71] == 0.0)\n    @NLconstraint(m, e133, x[108] * x[124] - x[72] == 0.0)\n    @NLconstraint(m, e134, x[109] * x[124] - x[73] == 0.0)\n    @NLconstraint(m, e135, x[26] * x[110] - x[1] == 0.0)\n    @NLconstraint(m, e136, x[26] * x[111] - x[2] == 0.0)\n    @NLconstraint(m, e137, x[26] * x[112] - x[3] == 0.0)\n    @NLconstraint(m, e138, x[27] * x[113] - x[4] == 0.0)\n    @NLconstraint(m, e139, x[27] * x[114] - x[5] == 0.0)\n    @NLconstraint(m, e140, x[27] * x[115] - x[6] == 0.0)\n    @NLconstraint(m, e141, x[28] * x[116] - x[7] == 0.0)\n    @NLconstraint(m, e142, x[28] * x[117] - x[8] == 0.0)\n    @NLconstraint(m, e143, x[28] * x[118] - x[9] == 0.0)\n    @NLconstraint(m, e144, x[26] * x[122] - x[13] == 0.0)\n    @NLconstraint(m, e145, x[27] * x[123] - x[14] == 0.0)\n    @NLconstraint(m, e146, x[28] * x[124] - x[15] == 0.0)\n\n    @constraint(m, e1, -x[26] - x[27] - x[28] + obj == 0.0)\n    @constraint(m, e2, -x[10] - x[16] - x[17] - x[18] == -13.1)\n    @constraint(m, e3, -x[11] - x[19] - x[20] - x[21] == -32.7)\n    @constraint(m, e4, -x[12] - x[22] - x[23] - x[24] == -56.5)\n    @constraint(m, e5, -x[1] - x[4] - x[7] - x[16] - x[19] - x[22] + x[26] == 0.0)\n    @constraint(m, e6, -x[2] - x[5] - x[8] - x[17] - x[20] - x[23] + x[27] == 0.0)\n    @constraint(m, e7, -x[3] - x[6] - x[9] - x[18] - x[21] - x[24] + x[28] == 0.0)\n    @constraint(m, e8, -x[1] - x[2] - x[3] - x[13] + x[26] == 0.0)\n    @constraint(m, e9, -x[4] - x[5] - x[6] - x[14] + x[27] == 0.0)\n    @constraint(m, e10, -x[7] - x[8] - x[9] - x[15] + x[28] == 0.0)\n    @constraint(m, e11, -x[10] - x[11] - x[12] - x[13] - x[14] - x[15] + x[25] == 0.0)\n    @constraint(m, e12, -x[56] - x[74] - x[77] - x[80] == -131.0)\n    @constraint(m, e13, -x[57] - x[75] - x[78] - x[81] == -5109.0)\n    @constraint(m, e14, -x[58] - x[76] - x[79] - x[82] == -3275.0)\n    @constraint(m, e15, -x[59] - x[83] - x[86] - x[89] == -3597.0)\n    @constraint(m, e16, -x[60] - x[84] - x[87] - x[90] == -548706.0)\n    @constraint(m, e17, -x[61] - x[85] - x[88] - x[91] == -13080.0)\n    @constraint(m, e18, -x[62] - x[92] - x[95] - x[98] == -5650.0)\n    @constraint(m, e19, -x[63] - x[93] - x[96] - x[99] == -1412.5)\n    @constraint(m, e20, -x[64] - x[94] - x[97] - x[100] == -19775.0)\n    @constraint(m, e21, -x[74] + 131 * x[125] == 0.0)\n    @constraint(m, e22, -x[75] + 5109 * x[125] == 0.0)\n    @constraint(m, e23, -x[76] + 3275 * x[125] == 0.0)\n    @constraint(m, e24, -x[77] + 131 * x[126] == 0.0)\n    @constraint(m, e25, -x[78] + 5109 * x[126] == 0.0)\n    @constraint(m, e26, -x[79] + 3275 * x[126] == 0.0)\n    @constraint(m, e27, -x[80] + 131 * x[127] == 0.0)\n    @constraint(m, e28, -x[81] + 5109 * x[127] == 0.0)\n    @constraint(m, e29, -x[82] + 3275 * x[127] == 0.0)\n    @constraint(m, e30, -x[83] + 3597 * x[128] == 0.0)\n    @constraint(m, e31, -x[84] + 548706 * x[128] == 0.0)\n    @constraint(m, e32, -x[85] + 13080 * x[128] == 0.0)\n    @constraint(m, e33, -x[86] + 3597 * x[129] == 0.0)\n    @constraint(m, e34, -x[87] + 548706 * x[129] == 0.0)\n    @constraint(m, e35, -x[88] + 13080 * x[129] == 0.0)\n    @constraint(m, e36, -x[89] + 3597 * x[130] == 0.0)\n    @constraint(m, e37, -x[90] + 548706 * x[130] == 0.0)\n    @constraint(m, e38, -x[91] + 13080 * x[130] == 0.0)\n    @constraint(m, e39, -x[92] + 5650 * x[131] == 0.0)\n    @constraint(m, e40, -x[93] + 1412.5 * x[131] == 0.0)\n    @constraint(m, e41, -x[94] + 19775 * x[131] == 0.0)\n    @constraint(m, e42, -x[95] + 5650 * x[132] == 0.0)\n    @constraint(m, e43, -x[96] + 1412.5 * x[132] == 0.0)\n    @constraint(m, e44, -x[97] + 19775 * x[132] == 0.0)\n    @constraint(m, e45, -x[98] + 5650 * x[133] == 0.0)\n    @constraint(m, e46, -x[99] + 1412.5 * x[133] == 0.0)\n    @constraint(m, e47, -x[100] + 19775 * x[133] == 0.0)\n    @constraint(m, e48, -x[56] + 131 * x[119] == 0.0)\n    @constraint(m, e49, -x[57] + 5109 * x[119] == 0.0)\n    @constraint(m, e50, -x[58] + 3275 * x[119] == 0.0)\n    @constraint(m, e51, -x[59] + 3597 * x[120] == 0.0)\n    @constraint(m, e52, -x[60] + 548706 * x[120] == 0.0)\n    @constraint(m, e53, -x[61] + 13080 * x[120] == 0.0)\n    @constraint(m, e54, -x[62] + 5650 * x[121] == 0.0)\n    @constraint(m, e55, -x[63] + 1412.5 * x[121] == 0.0)\n    @constraint(m, e56, -x[64] + 19775 * x[121] == 0.0)\n    @constraint(m, e57, -x[16] + 13.1 * x[125] == 0.0)\n    @constraint(m, e58, -x[17] + 13.1 * x[126] == 0.0)\n    @constraint(m, e59, -x[18] + 13.1 * x[127] == 0.0)\n    @constraint(m, e60, -x[19] + 32.7 * x[128] == 0.0)\n    @constraint(m, e61, -x[20] + 32.7 * x[129] == 0.0)\n    @constraint(m, e62, -x[21] + 32.7 * x[130] == 0.0)\n    @constraint(m, e63, -x[22] + 56.5 * x[131] == 0.0)\n    @constraint(m, e64, -x[23] + 56.5 * x[132] == 0.0)\n    @constraint(m, e65, -x[24] + 56.5 * x[133] == 0.0)\n    @constraint(m, e66, -x[10] + 13.1 * x[119] == 0.0)\n    @constraint(m, e67, -x[11] + 32.7 * x[120] == 0.0)\n    @constraint(m, e68, -x[12] + 56.5 * x[121] == 0.0)\n    @constraint(m, e69, x[119] + x[125] + x[126] + x[127] == 1.0)\n    @constraint(m, e70, x[120] + x[128] + x[129] + x[130] == 1.0)\n    @constraint(m, e71, x[121] + x[131] + x[132] + x[133] == 1.0)\n    @constraint(\n        m,\n        e72,\n        -110 * x[26] + x[29] + x[38] + x[47] + x[74] + x[83] + x[92] <= 0.0\n    )\n    @constraint(\n        m,\n        e73,\n        -16780 * x[26] + x[30] + x[39] + x[48] + x[75] + x[84] + x[93] <= 0.0\n    )\n    @constraint(\n        m,\n        e74,\n        -400 * x[26] + x[31] + x[40] + x[49] + x[76] + x[85] + x[94] <= 0.0\n    )\n    @constraint(\n        m,\n        e75,\n        -110 * x[27] + x[32] + x[41] + x[50] + x[77] + x[86] + x[95] <= 0.0\n    )\n    @constraint(\n        m,\n        e76,\n        -16780 * x[27] + x[33] + x[42] + x[51] + x[78] + x[87] + x[96] <= 0.0\n    )\n    @constraint(\n        m,\n        e77,\n        -400 * x[27] + x[34] + x[43] + x[52] + x[79] + x[88] + x[97] <= 0.0\n    )\n    @constraint(\n        m,\n        e78,\n        -110 * x[28] + x[35] + x[44] + x[53] + x[80] + x[89] + x[98] <= 0.0\n    )\n    @constraint(\n        m,\n        e79,\n        -16780 * x[28] + x[36] + x[45] + x[54] + x[81] + x[90] + x[99] <= 0.0\n    )\n    @constraint(\n        m,\n        e80,\n        -400 * x[28] + x[37] + x[46] + x[55] + x[82] + x[91] + x[100] <= 0.0\n    )\n    @constraint(m, e81, x[29] + x[38] + x[47] + x[74] + x[83] + x[92] - x[101] == 0.0)\n    @constraint(\n        m,\n        e82,\n        0.001 * x[30] +\n        0.001 * x[39] +\n        0.001 * x[48] +\n        0.001 * x[75] +\n        0.001 * x[84] +\n        0.001 * x[93] - x[102] == 0.0\n    )\n    @constraint(m, e83, x[31] + x[40] + x[49] + x[76] + x[85] + x[94] - x[103] == 0.0)\n    @constraint(\n        m,\n        e84,\n        0.3 * x[32] +\n        0.3 * x[41] +\n        0.3 * x[50] +\n        0.3 * x[77] +\n        0.3 * x[86] +\n        0.3 * x[95] - x[104] == 0.0\n    )\n    @constraint(\n        m,\n        e85,\n        0.1 * x[33] +\n        0.1 * x[42] +\n        0.1 * x[51] +\n        0.1 * x[78] +\n        0.1 * x[87] +\n        0.1 * x[96] - x[105] == 0.0\n    )\n    @constraint(\n        m,\n        e86,\n        0.02 * x[34] +\n        0.02 * x[43] +\n        0.02 * x[52] +\n        0.02 * x[79] +\n        0.02 * x[88] +\n        0.02 * x[97] - x[106] == 0.0\n    )\n    @constraint(\n        m,\n        e87,\n        0.3 * x[35] +\n        0.3 * x[44] +\n        0.3 * x[53] +\n        0.3 * x[80] +\n        0.3 * x[89] +\n        0.3 * x[98] - x[107] == 0.0\n    )\n    @constraint(m, e88, x[36] + x[45] + x[54] + x[81] + x[90] + x[99] - x[108] == 0.0)\n    @constraint(\n        m,\n        e89,\n        0.5 * x[37] +\n        0.5 * x[46] +\n        0.5 * x[55] +\n        0.5 * x[82] +\n        0.5 * x[91] +\n        0.5 * x[100] - x[109] == 0.0\n    )\n    @constraint(m, e90, -x[29] - x[32] - x[35] - x[65] + x[101] == 0.0)\n    @constraint(m, e91, -x[30] - x[33] - x[36] - x[66] + x[102] == 0.0)\n    @constraint(m, e92, -x[31] - x[34] - x[37] - x[67] + x[103] == 0.0)\n    @constraint(m, e93, -x[38] - x[41] - x[44] - x[68] + x[104] == 0.0)\n    @constraint(m, e94, -x[39] - x[42] - x[45] - x[69] + x[105] == 0.0)\n    @constraint(m, e95, -x[40] - x[43] - x[46] - x[70] + x[106] == 0.0)\n    @constraint(m, e96, -x[47] - x[50] - x[53] - x[71] + x[107] == 0.0)\n    @constraint(m, e97, -x[48] - x[51] - x[54] - x[72] + x[108] == 0.0)\n    @constraint(m, e98, -x[49] - x[52] - x[55] - x[73] + x[109] == 0.0)\n    @constraint(m, e147, x[110] + x[111] + x[112] + x[122] == 1.0)\n    @constraint(m, e148, x[113] + x[114] + x[115] + x[123] == 1.0)\n    @constraint(m, e149, x[116] + x[117] + x[118] + x[124] == 1.0)\n    @constraint(\n        m,\n        e150,\n        -20 * x[25] + x[56] + x[59] + x[62] + x[65] + x[68] + x[71] <= 0.0\n    )\n    @constraint(\n        m,\n        e151,\n        -5 * x[25] + x[57] + x[60] + x[63] + x[66] + x[69] + x[72] <= 0.0\n    )\n    @constraint(\n        m,\n        e152,\n        -100 * x[25] + x[58] + x[61] + x[64] + x[67] + x[70] + x[73] <= 0.0\n    )\n\n    return m\nend\n\nfunction castro4m2(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    # ----- Variables ----- #\n    @variable(m, 0 <= x[1:55] <= 1E6)\n    @variable(m, obj)\n    @variable(m, b[1:20]) #Additional variables to increase degree of freedom and Ipopt's convergence\n    @objective(m, Min, obj)\n\n    @NLconstraint(m, e45, x[40] * x[44] - x[16] == 0.0)\n    @NLconstraint(m, e46, x[41] * x[44] - x[17] == 0.0)\n    @NLconstraint(m, e47, x[40] * x[45] - x[18] == 0.0)\n    @NLconstraint(m, e48, x[41] * x[45] - x[19] == 0.0)\n    @NLconstraint(m, e49, x[42] * x[46] - x[20] == 0.0)\n    @NLconstraint(m, e50, x[43] * x[46] - x[21] == 0.0)\n    @NLconstraint(m, e51, x[42] * x[47] - x[22] == 0.0)\n    @NLconstraint(m, e52, x[43] * x[47] - x[23] == 0.0)\n    @NLconstraint(m, e53, x[40] * x[50] - x[28] == 0.0)\n    @NLconstraint(m, e54, x[41] * x[50] - x[29] == 0.0)\n    @NLconstraint(m, e55, x[42] * x[51] - x[30] == 0.0)\n    @NLconstraint(m, e56, x[43] * x[51] - x[31] == 0.0)\n    @NLconstraint(m, e57, x[14] * x[44] - x[1] == 0.0)\n    @NLconstraint(m, e58, x[14] * x[45] - x[2] == 0.0)\n    @NLconstraint(m, e59, x[15] * x[46] - x[3] == 0.0)\n    @NLconstraint(m, e60, x[15] * x[47] - x[4] == 0.0)\n    @NLconstraint(m, e61, x[14] * x[50] - x[7] == 0.0)\n    @NLconstraint(m, e62, x[15] * x[51] - x[8] == 0.0)\n\n    @constraint(m, e1, -x[14] - x[15] + obj == 0.0)\n    @constraint(m, e2, -x[5] - x[9] - x[10] == -40.0)\n    @constraint(m, e3, -x[6] - x[11] - x[12] == -40.0)\n    @constraint(m, e4, -x[1] - x[3] - x[9] - x[11] + x[14] == 0.0)\n    @constraint(m, e5, -x[2] - x[4] - x[10] - x[12] + x[15] == 0.0)\n    @constraint(m, e6, -x[1] - x[2] - x[7] + x[14] == 0.0)\n    @constraint(m, e7, -x[3] - x[4] - x[8] + x[15] == 0.0)\n    @constraint(m, e8, -x[5] - x[6] - x[7] - x[8] + x[13] == 0.0)\n    @constraint(m, e9, -x[24] - x[32] - x[34] == -4000.0)\n    @constraint(m, e10, -x[25] - x[33] - x[35] == -800.0)\n    @constraint(m, e11, -x[26] - x[36] - x[38] == -600.0)\n    @constraint(m, e12, -x[27] - x[37] - x[39] == -8000.0)\n    @constraint(m, e13, -x[32] + 4000 * x[52] == 0.0)\n    @constraint(m, e14, -x[33] + 800 * x[52] == 0.0)\n    @constraint(m, e15, -x[34] + 4000 * x[53] == 0.0)\n    @constraint(m, e16, -x[35] + 800 * x[53] == 0.0)\n    @constraint(m, e17, -x[36] + 600 * x[54] == 0.0)\n    @constraint(m, e18, -x[37] + 8000 * x[54] == 0.0)\n    @constraint(m, e19, -x[38] + 600 * x[55] == 0.0)\n    @constraint(m, e20, -x[39] + 8000 * x[55] == 0.0)\n    @constraint(m, e21, -x[24] + 4000 * x[48] == 0.0)\n    @constraint(m, e22, -x[25] + 800 * x[48] == 0.0)\n    @constraint(m, e23, -x[26] + 600 * x[49] == 0.0)\n    @constraint(m, e24, -x[27] + 8000 * x[49] == 0.0)\n    @constraint(m, e25, -x[9] + 40 * x[52] == 0.0)\n    @constraint(m, e26, -x[10] + 40 * x[53] == 0.0)\n    @constraint(m, e27, -x[11] + 40 * x[54] == 0.0)\n    @constraint(m, e28, -x[12] + 40 * x[55] == 0.0)\n    @constraint(m, e29, -x[5] + 40 * x[48] == 0.0)\n    @constraint(m, e30, -x[6] + 40 * x[49] == 0.0)\n    @constraint(m, e31, x[48] + x[52] + x[53] == 1.0)\n    @constraint(m, e32, x[49] + x[54] + x[55] == 1.0)\n    @constraint(m, e33, -200 * x[14] + x[16] + x[20] + x[32] + x[36] <= 0.0)\n    @constraint(m, e34, -200 * x[14] + x[17] + x[21] + x[33] + x[37] <= 0.0)\n    @constraint(m, e35, -200 * x[15] + x[18] + x[22] + x[34] + x[38] <= 0.0)\n    @constraint(m, e36, -200 * x[15] + x[19] + x[23] + x[35] + x[39] <= 0.0)\n    @constraint(\n        m,\n        e37,\n        0.05 * x[16] + 0.05 * x[20] + 0.05 * x[32] + 0.05 * x[36] - x[40] == 0.0\n    )\n    @constraint(m, e38, x[17] + x[21] + x[33] + x[37] - x[41] == 0.0)\n    @constraint(m, e39, x[18] + x[22] + x[34] + x[38] - x[42] == 0.0)\n    @constraint(\n        m,\n        e40,\n        0.024 * x[19] + 0.024 * x[23] + 0.024 * x[35] + 0.024 * x[39] - x[43] == 0.0\n    )\n    @constraint(m, e41, -x[16] - x[18] - x[28] + x[40] == 0.0)\n    @constraint(m, e42, -x[17] - x[19] - x[29] + x[41] == 0.0)\n    @constraint(m, e43, -x[20] - x[22] - x[30] + x[42] == 0.0)\n    @constraint(m, e44, -x[21] - x[23] - x[31] + x[43] == 0.0)\n    @constraint(m, e63, x[44] + x[45] + x[50] == 1.0)\n    @constraint(m, e64, x[46] + x[47] + x[51] == 1.0)\n    @constraint(m, e65, -10 * x[13] + x[24] + x[26] + x[28] + x[30] <= 0.0)\n    @constraint(m, e66, -10 * x[13] + x[25] + x[27] + x[29] + x[31] <= 0.0)\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/circle.jl",
    "content": "function circle(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 0 <= x[1:2] <= 2)\n    @NLconstraint(m, x[1]^2 + x[2]^2 >= 2)\n    @objective(m, Min, x[1] + x[2])\n\n    return m\nend\n\nfunction circle_MINLPLib(; solver = nothing)\n    # Source: https://www.minlplib.org/circle.html \n    # Above instance has been mofified to convert the problem into a non-convex NLP\n    # Global solution: 4.45670663096, arg min =  [4.2536125, 3.4367961]\n\n    m = JuMP.Model(solver)\n\n    @variable(m, 0 <= objvar <= 5)\n    @variable(m, 1 <= x[1:2] <= 5)\n\n    @NLconstraint(\n        m,\n        e1,\n        (2.545724188 - x[1])^2 + (9.983058643 - x[2])^2 - (objvar)^2 >= 0.0\n    )\n    @NLconstraint(\n        m,\n        e2,\n        (8.589400372 - x[1])^2 + (6.208600402 - x[2])^2 - (objvar)^2 >= 0.0\n    )\n    @NLconstraint(\n        m,\n        e3,\n        (5.953378204 - x[1])^2 + (9.920197351 - x[2])^2 - (objvar)^2 >= 0.0\n    )\n    @NLconstraint(\n        m,\n        e4,\n        (3.710241136 - x[1])^2 + (7.860254203 - x[2])^2 - (objvar)^2 >= 0.0\n    )\n    @NLconstraint(\n        m,\n        e5,\n        (3.629909053 - x[1])^2 + (2.176232347 - x[2])^2 - (objvar)^2 <= 0.0\n    )\n    @NLconstraint(\n        m,\n        e6,\n        (3.016475803 - x[1])^2 + (6.757468831 - x[2])^2 - (objvar)^2 <= 0.0\n    )\n    @NLconstraint(\n        m,\n        e7,\n        (4.148474536 - x[1])^2 + (2.435660776 - x[2])^2 - (objvar)^2 <= 0.0\n    )\n    @NLconstraint(\n        m,\n        e8,\n        (8.706433123 - x[1])^2 + (3.250724797 - x[2])^2 - (objvar)^2 <= 0.0\n    )\n    @NLconstraint(\n        m,\n        e9,\n        (1.604023507 - x[1])^2 + (7.020357481 - x[2])^2 - (objvar)^2 <= 0.0\n    )\n    @NLconstraint(\n        m,\n        e10,\n        (5.501896021 - x[1])^2 + (4.918207429 - x[2])^2 - (objvar)^2 <= 0.0\n    )\n\n    @objective(m, Min, objvar)\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/convex.jl",
    "content": "function convex_test(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 0 <= x[1:5] <= 2)\n\n    @constraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[2] <= 25)                             # 1: true\n    @constraint(m, 3 * x[1] * x[1] - 25 + 4 * x[2] * x[2] <= 0)                         # 2: true\n    @constraint(m, 3(x[1]x[1]) + 4 * x[2] * x[2] <= -5)                             # 3: false\n    @constraint(m, 3(x[1]x[1]) + 4 * x[2]^2 <= 10)                                # 4: true\n    @constraint(m, 3x[1]^2 + 4x[2]^2 + 6x[3]^2 <= 10)                           # 5: true\n\n    # @NLconstraint(m, 3x[1]^0.5 + 4x[2]^0.5 + 5x[5]^0.5 <= 100)# 6: true | type-C\n    # @NLconstraint(m, -3x[1]^0.5 - 4x[2]^0.5 >= -100)# 7: true | type-C\n    @NLconstraint(m, x[1]^2 <= 2) # convex - dummy\n    @NLconstraint(m, x[2]^2 <= 2) # convex - dummy\n\n    @NLconstraint(m, 3x[1]^3 + x[2]^3 + 5x[3]^3 <= 200)                         # 8: true | type-a\n    @NLconstraint(\n        m,\n        x[1] * x[1] * x[1] +\n        x[2] * x[2] * x[2] +\n        x[3] * x[3] * x[3] +\n        5 * x[4] * 20 * x[4] * x[4] <= 200\n    ) # 9: true\n    @NLconstraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[2] <= 25)                           # 10: true\n\n    @NLconstraint(m, (3 * x[1] * x[1] + 4 * x[2] * x[2]) <= 25)                         # 11: true\n    @NLconstraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[2] - 25 <= 0)                       # 12: true\n    @NLconstraint(m, -3 * x[1] * x[1] - 4 * x[2] * x[2] >= -25)                          # 13: true\n    @NLconstraint(m, 3 * x[1] * x[1] + 5x[2] * x[2] <= 25)                            # 14: true\n    @NLconstraint(m, x[1] * 3 * x[1] + x[2] * x[2] * 5 + x[4]^(3 - 1) <= 25)              # 15: true\n\n    @NLconstraint(m, 4 * x[1]^2 + 5x[2]^2 <= 25)                                  # 16: true\n    @NLconstraint(m, 3 * x[1] * x[1] - 25 + 4 * x[2] * x[2] <= 0)                       # 17: false (unsupported when with @NLconstraint)\n    @NLconstraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[1] <= 25)                           # 18: false\n    @NLconstraint(m, 3 * x[1] * x[1] + 16 * x[2]^2 <= 40)                             # 19: true\n    @NLconstraint(m, 3 * x[1]^2 + 16 * x[2]^2 + 17 <= 16)                           # 20: false\n\n    @NLconstraint(m, 3 * x[1]^3 + 16 * x[2]^2 <= 20 - 20)                           # 21: false\n    @NLconstraint(\n        m,\n        3 * x[1] * x[1] + 4 * x[2] * x[2] + 5 * x[3] * x[3] + 6x[4]x[4] <= 15\n    ) # 22: true\n    @NLconstraint(m, 3x[1]x[1] + 4x[2]x[2] + 5x[3]^2 <= -15)                    # 23: false\n    @NLconstraint(m, 3x[1]^2 + 4x[2]^2 >= 15)                                   # 24: false\n    @NLconstraint(m, sum(x[i]^2 for i in 1:5) <= 99999)                         # 25: true\n\n    @NLconstraint(m, 3x[1]^4 + 4x[2]^4 <= 200)                                  # 26: true\n    @NLconstraint(m, 3x[1]^4 + 4x[2]x[2]x[2]x[2] - 200 <= 0)                    # 27: true\n    @NLconstraint(m, 3x[1]^4 + 4x[2]^2 * x[2] * x[2] <= 200)                        # 28: true\n    @NLconstraint(m, 3x[1]^4 + 4x[2]^3 <= 200)                                  # 29: false\n    @NLconstraint(m, 3x[1]^8 + 16 * 25 * x[2]^8 - 30x[3]^8 <= 50)                   # 30: false\n\n    @objective(m, Max, x[1]^2 + x[3]^2)                                           # true\n\n    return m\nend\n\nfunction convex_solve(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 0 <= x[1:5] <= 100)\n\n    @NLconstraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[2] <= 25)                             # 1: true\n    @NLconstraint(m, 3(x[1]x[1]) + 4 * x[2]^2 <= 10)                                # 4: true\n    @NLconstraint(m, 3x[1]^2 + 4x[2]^2 + 6x[3]^2 <= 10)                           # 5: true\n    @NLconstraint(m, (x[1] + x[2])^2 <= 100)\n    @NLconstraint(m, -3 * x[1] * x[1] - 4 * x[2] * x[2] >= -25)                            # 13: true\n\n    @objective(m, Max, x[1]^2 + x[3]^2)                                             # true\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/discretemulti.jl",
    "content": "function binprod_nlp3(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    LB = [100, 1000, 1000, 10, 10, 10, 10, 10]\n    UB = [10000, 10000, 10000, 1000, 1000, 1000, 1000, 1000]\n\n    @variable(m, LB[i] <= x[i = 1:8] <= UB[i])\n    @variable(m, 0 <= y[1:5] <= 1, Bin)\n\n    @constraint(m, 0.0025 * (x[4] * y[1] + x[6] * y[2]) <= 1)\n    @constraint(m, 0.0025 * (x[5] - x[4] * y[1] + x[7]) <= 1)\n    @constraint(m, 0.01(x[8] - x[5] * y[3]) <= 1)\n    @NLconstraint(\n        m,\n        100 * x[1] - x[1] * x[6] * y[1] + 833.33252 * x[4] * y[1] <= 83333.333\n    )\n    @NLconstraint(m, x[2] * x[4] * y[4] - x[2] * x[7] - 1250 * x[4] + 1250 * x[5] <= 0)\n    @NLconstraint(\n        m,\n        x[3] * x[5] * y[2] * y[5] - x[3] * x[8] * y[5] - 2500 * x[5] * y[1] * y[4] +\n        1250000 <= 0\n    )\n\n    @NLconstraint(m, y[1] * y[2] * y[3] <= 0)\n    @NLconstraint(m, y[2] * y[3] >= y[4] * y[5])\n    @NLconstraint(m, y[1] * y[5] <= y[2] * y[4])\n\n    @objective(m, Min, x[1] + x[2] + x[3])\n\n    return m\nend\n\nfunction circlebin(; verbose = false, solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 0 <= x[1:5] <= 1, Bin)\n    @NLconstraint(m, x[1]^2 + x[2]^2 >= 2)\n    @objective(m, Min, x[1] + x[2])\n\n    return m\nend\n\nfunction bpml(; verbose = false, solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 0 <= x[1:5] <= 1, Bin)\n    @variable(m, y[1:5] >= 0)\n\n    @NLconstraint(m, x[1] * y[1] >= 10)\n    @NLconstraint(m, x[1] * x[2] * y[1] >= 10)\n    @NLconstraint(m, x[1] * x[2] * x[3] * y[1] >= 10)\n    @NLconstraint(m, x[1] * y[1] * y[2] >= 10)\n    @NLconstraint(m, x[1] * y[1] * y[2] * y[3] >= 10)\n    @NLconstraint(m, x[1] * x[2] * x[3] * y[1] * y[2] * y[3] >= 10)\n    @NLconstraint(m, x[1] * x[2] * x[3] * x[4] * x[5] >= 1)\n    @NLconstraint(m, y[1] * y[2] * y[4] * y[5] * y[1] >= 99)\n\n    @objective(m, Min, x[1] + x[2] + x[3])\n\n    return m\nend\n\nfunction bmpl_linearlifting(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 0 <= x[1:5] <= 1, Bin)\n    @variable(m, y[1:5] >= 0)\n\n    @NLconstraint(m, 15 * x[1] * (2 * y[1] + y[2]) >= 10)\n    @NLconstraint(m, 15 * (x[1] + x[2] * y[1]) * (y[1] + y[2] * x[1] * x[2]) + 10 >= 10)\n    @NLconstraint(m, 15 * x[2] * (y[1] + y[2] * x[3] * y[5] * x[4]) + 50 >= 10)\n\n    @NLobjective(m, Min, x[1] * (y[1] * y[2] * y[3] + x[2] * x[3]))\n\n    return m\nend\n\nfunction bpml_lnl(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    Random.seed!(10)\n    @variable(m, 0 <= X[1:5] <= 1, Bin)\n    @variable(m, 0.1 <= Y[1:5] <= 0.1 + 10 * rand())\n    @constraint(m, sum(X) >= 3)\n    @NLobjective(m, Min, sum(X[i] * Y[i] for i in 1:5))\n\n    return m\nend\n\nfunction bpml_binl(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    Random.seed!(10)\n    @variable(m, 0 <= X[1:5] <= 1, Bin)\n    @variable(m, 50 <= Y[1:5] <= 50 + 100 * rand() * rand())\n    @constraint(m, sum(X) >= 3)\n    @NLobjective(m, Max, sum(X[i] * Y[i] * Y[i+1] for i in 1:4) - X[5] * Y[5] * Y[1])\n\n    return m\nend\n\nfunction bpml_monl(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    Random.seed!(10)\n    @variable(m, 0 <= X[1:5] <= 1, Bin)\n    @variable(m, 50 <= Y[1:5] <= 50 + 100 * rand() * rand())\n    @constraint(m, sum(X) >= 3)\n    @NLobjective(m, Max, sum(X[i] * Y[i] * Y[i] for i in 1:5))\n\n    return m\nend\n\nfunction bpml_negative(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    Random.seed!(10)\n    @variable(m, 0 <= X[1:5] <= 1, Bin)\n    @variable(m, 50 <= Y[1:5] <= 50 + 100 * rand() * rand())\n    JuMP.set_lower_bound(Y[1], -10)\n    JuMP.set_upper_bound(Y[1], -1)\n    JuMP.set_lower_bound(Y[2], -40)\n    JuMP.set_lower_bound(Y[3], -30)\n    JuMP.set_lower_bound(Y[4], -50)\n    @constraint(m, sum(X) >= 3)\n    @NLobjective(m, Max, sum(X[i] * Y[i] * Y[i+1] for i in 1:4) - X[5] * Y[5] * Y[1])\n\n    return m\nend\n\nfunction intprod_basic(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 1 <= Z[1:10] <= 10, Int)\n    @NLconstraint(m, (Z[1] + Z[2]) * (Z[3] + Z[4]) >= 25)\n    @NLconstraint(m, Z[1] * (Z[2] + Z[3]) * Z[4] >= 25)\n    @NLconstraint(m, Z[1] - Z[2] * Z[3] * Z[4] + 15 >= 25)\n    @NLconstraint(m, Z[5] * (Z[2] - Z[3]) * Z[5]^2 >= 40)\n    @NLobjective(m, Min, sum(Z[i] for i in 1:5) * Z[2])\n\n    return m\nend\n\nfunction discretemulti_basic(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    Random.seed!(10)\n    @variable(m, 0 <= X[1:5] <= 1, Bin)\n    @variable(m, 0.1 <= Y[1:5] <= 0.1 + 10 * rand())\n    @variable(m, 1 <= Z[1:5] <= 10, Int)\n    @constraint(m, sum(X) >= 3)\n    @constraint(m, sum(Z) >= 10)\n    @NLobjective(m, Min, sum(X[i] * Y[i] for i in 1:5))\n    @NLconstraint(m, sum(X[i] * Z[i] for i in 1:5) >= 8)\n    @NLconstraint(m, [i in 1:5], Y[i] * Z[i] >= 17.1)\n    @NLconstraint(m, [i in 1:4], Y[i] * Z[i] * Z[i+1] >= 18.6)\n    @NLconstraint(m, [i in 1:5], X[i] * Y[i] * Z[i] <= 28.1)\n    @NLconstraint(m, [i in 1:4], X[i] * X[i+1] * Y[i] * Y[i+1] * Z[i] * Z[i+1] <= 33.2)\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/div.jl",
    "content": "function div(; verbose = false, solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 1 <= x[1:2] <= 10)\n\n    @NLobjective(m, Min, 6 * x[1]^2 + 4 * x[2]^2 - 2.5 / 5 * x[1] * x[2])\n\n    @constraint(m, x[1] * (-1 * 3 / 5 * 5) >= 0)\n    @constraint(m, x[2] * 5 / 20 >= 0)\n    @constraint(m, x[2] * (5 * 15 / 15) >= 0)\n    @constraint(m, x[2] * (120 * 2 / -2) >= 0)\n    @constraint(m, 1 * 2 * 3 * 4 * 5 * 6 * x[2] / 0.01 >= 0)\n    @constraint(m, x[1] * 1 * 2 * 3 * 4 * 5 * 6 / 0.01 >= 0)\n    @NLconstraint(m, (3 / 5) * x[1] * (60 / 60) * x[2] >= 8)\n    @NLconstraint(\n        m,\n        (1 * 2 * 3 * 4 / 5 / 6 * 7) * x[2] - x[1] * 1 * 2 * 3 * 4 * 5 * 6 * x[2] / 0.01 >=\n        0\n    )\n    @NLconstraint(\n        m,\n        (1 * 2 * 3 * 4 / 5 / 6 * 7) * x[2] -\n        0.5(x[1] * 1 * 2 * 3 * 4 * 5 * 6 * x[2] / 0.01) >= 0\n    )\n    @NLconstraint(\n        m,\n        (1 * 2 * 3 * 4 / 5 / 6 * 7) * x[2] -\n        0.5(x[1] * 2 * 3 * x[2] / 0.01 + 5 * 7 / 10 * x[2]) >= 0\n    )\n    @NLconstraint(m, (1 * 2 * 3 * 4 / 5 / 6 * 7) * x[2] - 0.5 * (x[1] - x[2]x[1]) >= 0)\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/exprstest.jl",
    "content": "function exprstest(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, px[i = 1:6] >= 1) # At some point if an initial value is given, keep them\n\n    @NLconstraint(m, sum(3 * px[i]^2 for i in 1:4) >= 111)\n    @NLconstraint(m, -px[1] * px[2] + 4 * 5 * px[3] * px[4] >= 222)\n    @NLconstraint(m, -px[1] * px[2] <= 115)\n    @NLconstraint(m, -px[1] * -px[2] >= 115)\n    @NLconstraint(m, px[1] * -px[2] <= 115)\n    @constraint(m, -px[1] + (-5) - 4 <= 100)\n    @NLconstraint(m, px[1] + px[2] * px[3] >= 555) # => px[1] + x23 >= 555 && x23 == px[2]*px[3]\n    @NLconstraint(m, px[1]^2 - 7 * px[2]^2 + px[3]^2 + px[4] <= 6666)\n    @NLconstraint(m, 13 * px[1] - px[2] + 5 * px[3] * 6 + px[4] >= 77)\n\n    @NLobjective(\n        m,\n        Min,\n        7 * px[1] * 6 * px[4] * 2 +\n        5 +\n        17 +\n        px[1] +\n        px[2] +\n        px[3] +\n        8 +\n        3 * 5 * px[1]^2 * 4\n    )\n\n    return m\nend\n\nfunction operator_b(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, x[1:4] >= 0)\n    @variable(m, y[1:3] <= 0)\n    # PARSING TARGETS #\n    @constraint(m, x[1] + x[2] + -y[1] >= 1)# None\n    @constraint(m, 5x[1] + 8x[2] + 9y[2] <= 2)# None\n    @constraint(m, 4 * x[1] + 5 * x[2] + -3 * y[1] >= 3)# None\n    # @constraint(m, 3 <= x[1] + x[2] <= 4)\t\t\t\t\t\t# None\n\n    @NLconstraint(m, x[1] * x[2] + 3 * x[2] * x[3] >= 5)# x[1]*x[2] and 3*x[2]*x[3]\n    @NLconstraint(m, x[1] * (x[2] + 4) + 10 * 44 * x[2] * 5 * x[3] <= 6)# x[2]*x[3]\n    @NLconstraint(m, x[1] * 4 + x[2] * (x[2] + x[3]) >= 7)# None\n    @NLconstraint(m, 3 * x[1] * x[2] + x[2] - x[3] <= 8)# x[1]*x[2]\n\n    @NLconstraint(m, -1 * x[1]^2 - x[2]^2 >= 9)# x[1]^2 and x[2]^2\n    @NLconstraint(m, x[1]^(1 + 1) + 5 * x[2]^2 + 3 * x[3]^3 <= 10)# x[1]^2 and x[2]^2\n    @NLconstraint(m, (x[1] + 5)^2 >= 11)# None\n    @NLconstraint(m, x[1]^3 + x[3]^99 >= 12)# None\n\n    @NLconstraint(m, x[1] * x[2] * x[3] <= 13)# x[1]*x[2]*x[3]\n    @NLconstraint(m, (x[1] * x[2]) * x[3] >= 14)# x[1]*x[2]  ******\n    @NLconstraint(m, x[1] * (x[2] * x[3]) <= 15)# x[2]*x[3]  ******\n    @NLconstraint(m, x[1] * x[2] * x[3] * x[4] >= 16)# x[1]*x[2]*x[3]*x[4]\n    @NLconstraint(m, (x[1] * x[2]) * (x[3] * x[4]) <= 17)# x[1]*x[2] and x[3]*x[4]\n    @NLconstraint(m, x[1] * (x[2] * x[3]) * x[4] >= 18)# x[2]*x[3]  ******\n    @NLconstraint(m, (x[1] * x[2]) * x[3] * x[4] <= 19)# x[1]*x[2]  ******\n    @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4] >= 20)# x[1]*x[2]\t ******\n    @NLconstraint(m, (x[1] * (x[2] * x[3]) * x[4]) <= 21)# x[2]*x[3]\t ******\n\n    @NLconstraint(m, 4 * 5 * 6 * x[1] * x[2] * x[3] * x[4] >= 22)# x[1]*x[2]*x[3]*x[4]\n    @NLconstraint(m, x[1]^2 * x[2]^2 * x[3]^2 * x[4] <= 23)# None\n    @NLconstraint(m, x[1] * x[1] * x[2] * x[2] * x[3] * x[3] >= 24)# x[1]*x[1]*x[2]*x[2]*x[3]*x[3]\n    @NLconstraint(m, (x[1] + 1) * (x[2] + 2) * (x[3] + 3) * (x[4] + 4) <= 25)# None\n\n    @NLconstraint(m, 50sin(x[1]) - 32 * cos(x[2]) >= 26)# sin(x[1]), cos(x[2])\n    @NLconstraint(m, sin(x[1] + x[2]) - cos(x[2] - x[3]) + sin(-x[2] + x[3]) <= 27)\n    @NLconstraint(m, sin(4 * x[1] * x[2]) + cos(x[2] * -1 * x[3]) >= 28)# x[1]*x[2] and x[2]*-1*x[3]  ******\n    @NLconstraint(m, sin(x[1] * x[2] * x[3]) <= 29)# x[1]*x[2]*x[3]\n\n    return m\nend\n\nfunction operator_basic(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, x[1:4] >= 0)\n\n    @NLconstraint(m, x[1]^2 >= 1)\n    @NLconstraint(m, x[1] * x[2] <= 1)\n    @NLconstraint(m, x[1]^2 + x[2] * x[3] <= 1)\n\n    @NLconstraint(m, x[1] * (x[2] * x[3]) >= 1)\n    @NLconstraint(m, x[1]^2 * (x[2]^2 * x[3]^2) <= 1)\n\n    @NLconstraint(m, (x[1] * x[2]) * x[3] >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]^2) * x[3]^2 <= 1)\n\n    @NLconstraint(m, x[1] * (x[2]^2 * x[3]^2) >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]) * x[3]^2 <= 1)\n    @NLconstraint(m, x[1]^2 * (x[2] * x[3]) >= 1)\n    @NLconstraint(m, (x[1] * x[2]^2) * x[3] <= 1)\n\n    @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4] >= 1)\n    @NLconstraint(m, ((x[1]^2 * x[2]) * x[3]) * x[4] <= 1)\n    @NLconstraint(m, ((x[1] * x[2]^2) * x[3]) * x[4] >= 1)\n    @NLconstraint(m, ((x[1] * x[2]) * x[3]^2) * x[4] <= 1)\n    @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4]^2 >= 1)\n    @NLconstraint(m, ((x[1]^2 * x[2]^2) * x[3]^2) * x[4]^2 <= 1)\n\n    @NLconstraint(m, x[1] * (x[2] * (x[3] * x[4])) >= 1)\n    @NLconstraint(m, x[1]^2 * (x[2] * (x[3] * x[4])) <= 1)\n    @NLconstraint(m, x[1] * (x[2]^2 * (x[3] * x[4])) >= 1)\n    @NLconstraint(m, x[1] * (x[2] * (x[3]^2 * x[4])) <= 1)\n    @NLconstraint(m, x[1] * (x[2] * (x[3] * x[4]^2)) >= 1)\n    @NLconstraint(m, x[1]^2 * (x[2]^2 * (x[3]^2 * x[4]^2)) <= 1)\n\n    @NLconstraint(m, x[1] * x[2] * x[3] >= 1)\n    @NLconstraint(m, x[1]^2 * x[2] * x[3] >= 1)\n    @NLconstraint(m, x[1] * x[2]^2 * x[3] >= 1)\n    @NLconstraint(m, x[1] * x[2] * x[3]^2 >= 1)\n    @NLconstraint(m, x[1]^2 * x[2]^2 * x[3] >= 1)\n    @NLconstraint(m, x[1] * x[2]^2 * x[3]^2 >= 1)\n    @NLconstraint(m, x[1]^2 * x[2] * x[3]^2 >= 1)\n    @NLconstraint(m, x[1]^2 * x[2]^2 * x[3]^2 >= 1)\n\n    @NLconstraint(m, (x[1] * x[2]) * (x[3] * x[4]) >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]) * (x[3] * x[4]) >= 1)\n    @NLconstraint(m, (x[1] * x[2]^2) * (x[3] * x[4]) >= 1)\n    @NLconstraint(m, (x[1] * x[2]) * (x[3]^2 * x[4]) >= 1)\n    @NLconstraint(m, (x[1] * x[2]) * (x[3]^2 * x[4]^2) >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]) * (x[3] * x[4]^2) >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]) * (x[3]^2 * x[4]) >= 1)\n\n    @NLconstraint(m, x[1] * x[2] * x[3] * x[4] >= 1)\n    @NLconstraint(m, x[1]^2 * x[2] * x[3] * x[4] >= 1)\n    @NLconstraint(m, x[1] * x[2]^2 * x[3] * x[4] >= 1)\n    @NLconstraint(m, x[1] * x[2] * x[3]^2 * x[4]^2 >= 1)\n    @NLconstraint(m, x[1] * x[2]^2 * x[3]^2 * x[4] >= 1)\n    @NLconstraint(m, x[1]^2 * x[2] * x[3] * x[4]^2 >= 1)\n    @NLconstraint(m, x[1]^2 * x[2]^2 * x[3]^2 * x[4]^2 >= 1)\n\n    @NLconstraint(m, (x[1] * x[2] * x[3]) * x[4] >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2] * x[3]) * x[4] >= 1)\n    @NLconstraint(m, (x[1] * x[2]^2 * x[3]) * x[4] >= 1)\n    @NLconstraint(m, (x[1] * x[2] * x[3]^2) * x[4] >= 1)\n    @NLconstraint(m, (x[1] * x[2] * x[3]) * x[4]^2 >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]^2 * x[3]^2) * x[4]^2 >= 1)\n\n    @NLconstraint(m, x[1] * (x[2] * x[3]) * x[4] >= 1)\n    @NLconstraint(m, x[1]^2 * (x[2] * x[3]) * x[4] >= 1)\n    @NLconstraint(m, x[1] * (x[2]^2 * x[3]) * x[4] >= 1)\n    @NLconstraint(m, x[1] * (x[2] * x[3]^2) * x[4] >= 1)\n    @NLconstraint(m, x[1] * (x[2] * x[3]) * x[4]^2 >= 1)\n    @NLconstraint(m, x[1]^2 * (x[2] * x[3]) * x[4]^2 >= 1)\n    @NLconstraint(m, x[1] * (x[2]^2 * x[3]^2) * x[4] >= 1)\n    @NLconstraint(m, x[1]^2 * (x[2]^2 * x[3]) * x[4] >= 1)\n    @NLconstraint(m, x[1] * (x[2] * x[3]^2) * x[4]^2 >= 1)\n\n    @NLconstraint(m, x[1] * (x[2] * x[3] * x[4]) >= 1)\n    @NLconstraint(m, x[1]^2 * (x[2] * x[3] * x[4]) >= 1)\n    @NLconstraint(m, x[1] * (x[2]^2 * x[3] * x[4]) >= 1)\n    @NLconstraint(m, x[1] * (x[2] * x[3]^2 * x[4]) >= 1)\n    @NLconstraint(m, x[1] * (x[2] * x[3] * x[4]^2) >= 1)\n    @NLconstraint(m, x[1]^2 * (x[2] * x[3]^2 * x[4]) >= 1)\n    @NLconstraint(m, x[1]^2 * (x[2]^2 * x[3]^2 * x[4]^2) >= 1)\n\n    @NLconstraint(m, x[1] * x[2] * (x[3] * x[4]) >= 1)\n    @NLconstraint(m, x[1]^2 * x[2] * (x[3] * x[4]) >= 1)\n    @NLconstraint(m, x[1] * x[2]^2 * (x[3] * x[4]) >= 1)\n    @NLconstraint(m, x[1] * x[2] * (x[3]^2 * x[4]) >= 1)\n    @NLconstraint(m, x[1] * x[2] * (x[3] * x[4]^2) >= 1)\n    @NLconstraint(m, x[1]^2 * x[2]^2 * (x[3]^2 * x[4]^2) >= 1)\n\n    @NLconstraint(m, (x[1] * x[2]) * x[3] * x[4] >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]) * x[3] * x[4] >= 1)\n    @NLconstraint(m, (x[1] * x[2]^2) * x[3] * x[4] >= 1)\n    @NLconstraint(m, (x[1] * x[2]) * x[3]^2 * x[4] >= 1)\n    @NLconstraint(m, (x[1] * x[2]) * x[3] * x[4]^2 >= 1)\n    @NLconstraint(m, (x[1] * x[2]) * x[3]^2 * x[4]^2 >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]^2) * x[3]^2 * x[4]^2 >= 1)\n\n    return m\nend\n\nfunction operator_c(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, px[i = 1:6] >= 1) # At some point if an initial value is given, keep them\n\n    @NLconstraint(m, sum(3 * px[i]^2 for i in 1:4) >= 111)\n    @NLconstraint(m, -1 * px[1] * px[2] + 4 * 5 * px[3] * px[4] >= 222)\n    @NLconstraint(m, px[1] + px[2] * px[3] >= 555) # => px[1] + x23 >= 555 && x23 == px[2]*px[3]\n    @NLconstraint(m, px[1]^2 - 7 * px[2]^2 + px[3]^2 + px[4] <= 6666)\n    @NLconstraint(m, 13 * px[1] - px[2] + 5 * px[3] * 6 + px[4] >= 77)\n\n    @NLobjective(\n        m,\n        Min,\n        7 * px[1] * 6 * px[4] * 2 +\n        5 +\n        17 +\n        px[1] +\n        px[2] +\n        px[3] +\n        8 +\n        3 * 5 * px[1]^2 * 4\n    )\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/linearlift.jl",
    "content": "function basic_linear_lift(; verbose = false, solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, x[i = 1:3] >= 1) # At some point if an initial value is given, keep them\n    @constraint(m, (x[1] - x[2]) * (3 * x[2] - x[3]) >= 111)\n    @NLconstraint(m, (x[1] - x[2]) * (3 * x[2] - x[3]) >= 111)\n    @NLconstraint(m, (x[1] - x[2])^2 >= 100)\n    @NLconstraint(m, (x[1] - x[2]) * (3 * x[2] - x[3]) * (x[1] + x[3]) >= 111)\n    @NLconstraint(m, (3 + x[1] + x[2] + x[3]) * (x[1] + x[2])^2 >= 111)\n\n    # Next level goal\n    # @NLconstraint(m, (9-x[1]-x[2]-x[3])^2 >= 111)\n\n    @objective(m, Min, x[1] + x[2] + x[3])\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/mult3.jl",
    "content": "function linking_constraints_testing(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    x_Idx = Any[1, 2, 3, 4]\n    @variable(m, 0 <= x[x_Idx] <= 1)\n    @variable(m, obj)\n    @objective(m, Min, obj)\n    @NLconstraint(\n        m,\n        e1,\n        -(\n            0.4931 * x[1] * x[2] + 0.6864 * x[1] * x[3] - 0.0577 * x[1] * x[4] +\n            0.3468 * x[1] * x[2] * x[3] - 0.6988 * x[1] * x[3] * x[4] -\n            0.9648 * x[1] * x[2] * x[4]\n        ) + obj == 0.0\n    )\n\n    return m\nend\n\nfunction m_10_3_0_100_1(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    x_Idx = Any[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n    @variable(m, 0 <= x[x_Idx] <= 1)\n    @variable(m, obj)\n    @objective(m, Min, obj)\n    @NLconstraint(\n        m,\n        e1,\n        -(\n            0.4931 * x[1] * x[2] +\n            0.6864 * x[1] * x[3] +\n            0.0577 * x[1] * x[4] +\n            0.331 * x[1] * x[5] +\n            0.4615 * x[1] * x[6] - 0.1788 * x[1] * x[7] - 0.2886 * x[1] * x[8] +\n            0.4708 * x[1] * x[9] - 0.0574 * x[1] * x[10] - 0.0747 * x[2] * x[3] +\n            0.5194 * x[2] * x[4] +\n            0.4049 * x[2] * x[5] - 0.4841 * x[2] * x[6] + 0.8754 * x[2] * x[7] -\n            0.0878 * x[2] * x[8] +\n            0.617 * x[2] * x[9] +\n            0.8177 * x[2] * x[10] +\n            0.3898 * x[3] * x[4] - 0.561 * x[3] * x[5] +\n            0.7099 * x[3] * x[6] +\n            0.4888 * x[3] * x[7] - 0.3978 * x[3] * x[8] +\n            0.3439 * x[3] * x[9] +\n            0.2374 * x[3] * x[10] +\n            0.9351 * x[4] * x[5] +\n            0.9805 * x[4] * x[6] - 0.324 * x[4] * x[7] + 0.8415 * x[4] * x[8] -\n            0.3219 * x[4] * x[9] +\n            0.8619 * x[4] * x[10] +\n            0.0931 * x[5] * x[6] - 0.069 * x[5] * x[7] - 0.6462 * x[5] * x[8] -\n            0.244 * x[5] * x[9] - 0.6496 * x[5] * x[10] - 0.2863 * x[6] * x[7] +\n            0.3314 * x[6] * x[8] +\n            0.2371 * x[6] * x[9] - 0.0621 * x[6] * x[10] - 0.3675 * x[7] * x[8] -\n            0.4622 * x[7] * x[9] - 0.6002 * x[7] * x[10] - 0.1691 * x[8] * x[9] +\n            0.9586 * x[8] * x[10] +\n            0.0864 * x[9] * x[10] - 0.741 * x[1] +\n            0.6095 * x[2] +\n            0.6916 * x[3] +\n            0.4181 * x[4] +\n            0.0579 * x[5] +\n            0.3277 * x[6] +\n            0.8015 * x[7] +\n            0.8823 * x[8] - 0.7712 * x[9] +\n            0.7333 * x[10] +\n            0.9951 * x[1] * x[2] * x[3] +\n            0.1336 * x[1] * x[2] * x[4] +\n            0.9318 * x[1] * x[2] * x[5] +\n            0.4959 * x[1] * x[2] * x[6] - 0.2652 * x[1] * x[2] * x[7] -\n            0.0387 * x[1] * x[2] * x[8] - 0.8525 * x[1] * x[2] * x[9] -\n            0.9893 * x[1] * x[2] * x[10] - 0.3058 * x[1] * x[3] * x[4] -\n            0.3155 * x[1] * x[3] * x[5] - 0.5641 * x[1] * x[3] * x[6] -\n            0.7337 * x[1] * x[3] * x[7] + 0.801 * x[1] * x[3] * x[8] -\n            0.2265 * x[1] * x[3] * x[9] - 0.109 * x[1] * x[3] * x[10] +\n            0.3239 * x[1] * x[4] * x[5] - 0.9678 * x[1] * x[4] * x[6] +\n            0.3017 * x[1] * x[4] * x[7] +\n            0.2928 * x[1] * x[4] * x[8] - 0.354 * x[1] * x[4] * x[9] +\n            0.7114 * x[1] * x[4] * x[10] - 0.1974 * x[1] * x[5] * x[6] -\n            0.5863 * x[1] * x[5] * x[7] +\n            0.9371 * x[1] * x[5] * x[8] +\n            0.1968 * x[1] * x[5] * x[9] +\n            0.346 * x[1] * x[5] * x[10] - 0.0862 * x[1] * x[6] * x[7] -\n            0.34 * x[1] * x[6] * x[8] - 0.7992 * x[1] * x[6] * x[9] +\n            0.5109 * x[1] * x[6] * x[10] +\n            0.2114 * x[1] * x[7] * x[8] +\n            0.4381 * x[1] * x[7] * x[9] +\n            0.7947 * x[1] * x[7] * x[10] +\n            0.3165 * x[1] * x[8] * x[9] - 0.6986 * x[1] * x[8] * x[10] +\n            0.2246 * x[1] * x[9] * x[10] +\n            0.9573 * x[2] * x[3] * x[4] +\n            0.9983 * x[2] * x[3] * x[5] - 0.4864 * x[2] * x[3] * x[6] +\n            0.1017 * x[2] * x[3] * x[7] +\n            0.3181 * x[2] * x[3] * x[8] +\n            0.108 * x[2] * x[3] * x[9] +\n            0.9555 * x[2] * x[3] * x[10] +\n            0.8038 * x[2] * x[4] * x[5] +\n            0.3158 * x[2] * x[4] * x[6] +\n            0.4577 * x[2] * x[4] * x[7] - 0.1951 * x[2] * x[4] * x[8] +\n            0.8573 * x[2] * x[4] * x[9] - 0.7043 * x[2] * x[4] * x[10] +\n            0.3491 * x[2] * x[5] * x[6] +\n            0.5392 * x[2] * x[5] * x[7] - 0.3214 * x[2] * x[5] * x[8] -\n            0.7684 * x[2] * x[5] * x[9] +\n            0.2287 * x[2] * x[5] * x[10] +\n            0.6412 * x[2] * x[6] * x[7] +\n            0.8942 * x[2] * x[6] * x[8] +\n            0.4623 * x[2] * x[6] * x[9] - 0.0048 * x[2] * x[6] * x[10] -\n            0.2504 * x[2] * x[7] * x[8] - 0.157 * x[2] * x[7] * x[9] +\n            0.1058 * x[2] * x[7] * x[10] +\n            0.9958 * x[2] * x[8] * x[9] +\n            0.9808 * x[2] * x[8] * x[10] +\n            0.4926 * x[2] * x[9] * x[10] +\n            0.9075 * x[3] * x[4] * x[5] - 0.8135 * x[3] * x[4] * x[6] +\n            0.468 * x[3] * x[4] * x[7] +\n            0.5035 * x[3] * x[4] * x[8] +\n            0.8937 * x[3] * x[4] * x[9] +\n            0.4124 * x[3] * x[4] * x[10] +\n            0.6276 * x[3] * x[5] * x[6] +\n            0.1172 * x[3] * x[5] * x[7] - 0.8766 * x[3] * x[5] * x[8] -\n            0.0392 * x[3] * x[5] * x[9] + 0.1954 * x[3] * x[5] * x[10] -\n            0.7249 * x[3] * x[6] * x[7] +\n            0.1748 * x[3] * x[6] * x[8] +\n            0.0399 * x[3] * x[6] * x[9] +\n            0.7718 * x[3] * x[6] * x[10] - 0.3924 * x[3] * x[7] * x[8] +\n            0.3393 * x[3] * x[7] * x[9] +\n            0.3299 * x[3] * x[7] * x[10] +\n            0.0074 * x[3] * x[8] * x[9] - 0.4768 * x[3] * x[8] * x[10] -\n            0.8469 * x[3] * x[9] * x[10] - 0.7975 * x[4] * x[5] * x[6] +\n            0.0985 * x[4] * x[5] * x[7] - 0.2488 * x[4] * x[5] * x[8] -\n            0.9697 * x[4] * x[5] * x[9] +\n            0.5858 * x[4] * x[5] * x[10] +\n            0.2418 * x[4] * x[6] * x[7] +\n            0.5472 * x[4] * x[6] * x[8] +\n            0.9072 * x[4] * x[6] * x[9] - 0.7715 * x[4] * x[6] * x[10] -\n            0.3631 * x[4] * x[7] * x[8] + 0.1936 * x[4] * x[7] * x[9] -\n            0.9037 * x[4] * x[7] * x[10] - 0.7716 * x[4] * x[8] * x[9] -\n            0.5681 * x[4] * x[8] * x[10] - 0.7989 * x[4] * x[9] * x[10] -\n            0.8533 * x[5] * x[6] * x[7] - 0.5063 * x[5] * x[6] * x[8] -\n            0.1132 * x[5] * x[6] * x[9] - 0.5833 * x[5] * x[6] * x[10] +\n            0.134 * x[5] * x[7] * x[8] - 0.9514 * x[5] * x[7] * x[9] -\n            0.1594 * x[5] * x[7] * x[10] - 0.2043 * x[5] * x[8] * x[9] +\n            0.9532 * x[5] * x[8] * x[10] +\n            0.3852 * x[5] * x[9] * x[10] - 0.9901 * x[6] * x[7] * x[8] -\n            0.7402 * x[6] * x[7] * x[9] - 0.9064 * x[6] * x[7] * x[10] +\n            0.6796 * x[6] * x[8] * x[9] +\n            0.357 * x[6] * x[8] * x[10] +\n            0.1639 * x[6] * x[9] * x[10] +\n            0.4671 * x[7] * x[8] * x[9] - 0.7679 * x[7] * x[8] * x[10] +\n            0.6806 * x[7] * x[9] * x[10] +\n            0.67 * x[8] * x[9] * x[10]\n        ) + obj == 0.0\n    )\n\n    return m\nend\n\nfunction m_10_3_0_100_2(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    x_Idx = Any[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n    @variable(m, 0 <= x[x_Idx] <= 1)\n    @variable(m, obj)\n    @objective(m, Min, obj)\n    @NLconstraint(\n        m,\n        e1,\n        -(\n            0.9844 * x[1] * x[2] - 0.5504 * x[1] * x[3] +\n            0.8946 * x[1] * x[4] +\n            0.6956 * x[1] * x[5] +\n            0.4003 * x[1] * x[6] +\n            0.1089 * x[1] * x[7] - 0.1168 * x[1] * x[8] - 0.5016 * x[1] * x[9] +\n            0.7953 * x[1] * x[10] - 0.7085 * x[2] * x[3] - 0.1308 * x[2] * x[4] -\n            0.0852 * x[2] * x[5] - 0.3812 * x[2] * x[6] - 0.0382 * x[2] * x[7] +\n            0.3795 * x[2] * x[8] +\n            0.6216 * x[2] * x[9] - 0.2157 * x[2] * x[10] - 0.4137 * x[3] * x[4] +\n            0.152 * x[3] * x[5] +\n            0.4507 * x[3] * x[6] - 0.7145 * x[3] * x[7] - 0.3329 * x[3] * x[8] -\n            0.6792 * x[3] * x[9] +\n            0.0692 * x[3] * x[10] +\n            0.4467 * x[4] * x[5] - 0.5436 * x[4] * x[6] - 0.602 * x[4] * x[7] +\n            0.9452 * x[4] * x[8] +\n            0.9871 * x[4] * x[9] - 0.8361 * x[4] * x[10] - 0.4982 * x[5] * x[6] -\n            0.5683 * x[5] * x[7] - 0.6084 * x[5] * x[8] + 0.7005 * x[5] * x[9] -\n            0.9106 * x[5] * x[10] + 0.7278 * x[6] * x[7] - 0.8657 * x[6] * x[8] -\n            0.1454 * x[6] * x[9] - 0.7254 * x[6] * x[10] - 0.7618 * x[7] * x[8] -\n            0.3881 * x[7] * x[9] +\n            0.2265 * x[7] * x[10] +\n            0.3273 * x[8] * x[9] +\n            0.7918 * x[8] * x[10] +\n            0.5074 * x[9] * x[10] +\n            0.2597 * x[1] - 0.558 * x[2] - 0.0323 * x[3] +\n            0.23 * x[4] +\n            0.9753 * x[5] +\n            0.1184 * x[6] - 0.2582 * x[7] - 0.3248 * x[8] +\n            0.4909 * x[9] +\n            0.1395 * x[10] +\n            0.2647 * x[1] * x[2] * x[3] - 0.5144 * x[1] * x[2] * x[4] -\n            0.6792 * x[1] * x[2] * x[5] - 0.9575 * x[1] * x[2] * x[6] -\n            0.6195 * x[1] * x[2] * x[7] - 0.3753 * x[1] * x[2] * x[8] +\n            0.6193 * x[1] * x[2] * x[9] +\n            0.1474 * x[1] * x[2] * x[10] +\n            0.6525 * x[1] * x[3] * x[4] - 0.4271 * x[1] * x[3] * x[5] -\n            0.679 * x[1] * x[3] * x[6] - 0.3382 * x[1] * x[3] * x[7] -\n            0.4683 * x[1] * x[3] * x[8] +\n            0.0896 * x[1] * x[3] * x[9] +\n            0.107 * x[1] * x[3] * x[10] - 0.9568 * x[1] * x[4] * x[5] -\n            0.7025 * x[1] * x[4] * x[6] - 0.7902 * x[1] * x[4] * x[7] +\n            0.2284 * x[1] * x[4] * x[8] - 0.1874 * x[1] * x[4] * x[9] +\n            0.8031 * x[1] * x[4] * x[10] +\n            0.8857 * x[1] * x[5] * x[6] - 0.6868 * x[1] * x[5] * x[7] +\n            0.8739 * x[1] * x[5] * x[8] - 0.7291 * x[1] * x[5] * x[9] -\n            0.2574 * x[1] * x[5] * x[10] - 0.357 * x[1] * x[6] * x[7] +\n            0.4299 * x[1] * x[6] * x[8] +\n            0.4594 * x[1] * x[6] * x[9] - 0.2428 * x[1] * x[6] * x[10] +\n            0.6579 * x[1] * x[7] * x[8] +\n            0.9073 * x[1] * x[7] * x[9] - 0.3832 * x[1] * x[7] * x[10] +\n            0.1595 * x[1] * x[8] * x[9] - 0.5331 * x[1] * x[8] * x[10] +\n            0.6888 * x[1] * x[9] * x[10] - 0.4837 * x[2] * x[3] * x[4] +\n            0.6795 * x[2] * x[3] * x[5] +\n            0.0753 * x[2] * x[3] * x[6] +\n            0.2431 * x[2] * x[3] * x[7] - 0.0184 * x[2] * x[3] * x[8] -\n            0.4303 * x[2] * x[3] * x[9] - 0.5289 * x[2] * x[3] * x[10] +\n            0.3028 * x[2] * x[4] * x[5] +\n            0.2143 * x[2] * x[4] * x[6] - 0.2037 * x[2] * x[4] * x[7] +\n            0.6976 * x[2] * x[4] * x[8] +\n            0.2752 * x[2] * x[4] * x[9] - 0.4824 * x[2] * x[4] * x[10] -\n            0.2823 * x[2] * x[5] * x[6] + 0.1237 * x[2] * x[5] * x[7] -\n            0.7571 * x[2] * x[5] * x[8] + 0.9569 * x[2] * x[5] * x[9] -\n            0.2336 * x[2] * x[5] * x[10] + 0.4414 * x[2] * x[6] * x[7] -\n            0.2835 * x[2] * x[6] * x[8] +\n            0.8198 * x[2] * x[6] * x[9] +\n            0.0874 * x[2] * x[6] * x[10] +\n            0.9194 * x[2] * x[7] * x[8] +\n            0.8589 * x[2] * x[7] * x[9] +\n            0.2666 * x[2] * x[7] * x[10] - 0.4088 * x[2] * x[8] * x[9] -\n            0.6505 * x[2] * x[8] * x[10] +\n            0.6852 * x[2] * x[9] * x[10] +\n            0.2372 * x[3] * x[4] * x[5] +\n            0.4118 * x[3] * x[4] * x[6] - 0.5151 * x[3] * x[4] * x[7] +\n            0.5959 * x[3] * x[4] * x[8] - 0.218 * x[3] * x[4] * x[9] -\n            0.7801 * x[3] * x[4] * x[10] + 0.5074 * x[3] * x[5] * x[6] -\n            0.9404 * x[3] * x[5] * x[7] +\n            0.4013 * x[3] * x[5] * x[8] +\n            0.0504 * x[3] * x[5] * x[9] +\n            0.5051 * x[3] * x[5] * x[10] +\n            0.2954 * x[3] * x[6] * x[7] +\n            0.7422 * x[3] * x[6] * x[8] +\n            0.6614 * x[3] * x[6] * x[9] +\n            0.9144 * x[3] * x[6] * x[10] - 0.5555 * x[3] * x[7] * x[8] +\n            0.159 * x[3] * x[7] * x[9] +\n            0.9815 * x[3] * x[7] * x[10] +\n            0.6799 * x[3] * x[8] * x[9] - 0.6504 * x[3] * x[8] * x[10] +\n            0.4191 * x[3] * x[9] * x[10] - 0.3969 * x[4] * x[5] * x[6] -\n            0.9499 * x[4] * x[5] * x[7] +\n            0.8335 * x[4] * x[5] * x[8] +\n            0.3776 * x[4] * x[5] * x[9] +\n            0.5135 * x[4] * x[5] * x[10] +\n            0.8655 * x[4] * x[6] * x[7] - 0.89 * x[4] * x[6] * x[8] -\n            0.0021 * x[4] * x[6] * x[9] - 0.881 * x[4] * x[6] * x[10] -\n            0.6563 * x[4] * x[7] * x[8] + 0.3767 * x[4] * x[7] * x[9] -\n            0.3868 * x[4] * x[7] * x[10] +\n            0.4704 * x[4] * x[8] * x[9] +\n            0.5043 * x[4] * x[8] * x[10] - 0.2086 * x[4] * x[9] * x[10] -\n            0.8244 * x[5] * x[6] * x[7] - 0.9021 * x[5] * x[6] * x[8] +\n            0.5587 * x[5] * x[6] * x[9] +\n            0.3616 * x[5] * x[6] * x[10] - 0.3769 * x[5] * x[7] * x[8] +\n            0.0455 * x[5] * x[7] * x[9] +\n            0.0116 * x[5] * x[7] * x[10] - 0.1229 * x[5] * x[8] * x[9] +\n            0.1753 * x[5] * x[8] * x[10] - 0.4053 * x[5] * x[9] * x[10] -\n            0.4102 * x[6] * x[7] * x[8] - 0.8524 * x[6] * x[7] * x[9] +\n            0.9499 * x[6] * x[7] * x[10] +\n            0.4563 * x[6] * x[8] * x[9] +\n            0.5162 * x[6] * x[8] * x[10] - 0.3816 * x[6] * x[9] * x[10] -\n            0.507 * x[7] * x[8] * x[9] - 0.4862 * x[7] * x[8] * x[10] +\n            0.2361 * x[7] * x[9] * x[10] +\n            0.8756 * x[8] * x[9] * x[10]\n        ) + obj == 0.0\n    )\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/mult4.jl",
    "content": "#= \n    1. Using the below raw expression interface for dense nonlinear problems significantly \n      reduces JuMP's building time\n    2. `linking_constraints = true` is necessary to be able to solve this dense quadrilinear instance\n=#\n\nreplace_expr(expr::Any, x) = expr\nfunction replace_expr(expr::Expr, x)\n    if Base.Meta.isexpr(expr, :ref)\n        return x[expr.args[2]]\n    end\n    for i in 1:length(expr.args)\n        expr.args[i] = replace_expr(expr.args[i], x)\n    end\n    return expr\nend\n\nfunction m_10_4_10_100_1(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    # ----- Variables ----- #\n    x_Idx = Any[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n    @variable(m, 0 <= x[x_Idx] <= 1)\n\n    # ----- Objective ----- #\n    obj = :((\n        0.7278 * x[1] * x[2] - 0.8657 * x[1] * x[3] - 0.1454 * x[1] * x[4] -\n        0.7254 * x[1] * x[5] - 0.7618 * x[1] * x[6] - 0.3881 * x[1] * x[7] +\n        0.2265 * x[1] * x[8] +\n        0.3273 * x[1] * x[9] +\n        0.7918 * x[1] * x[10] +\n        0.5074 * x[2] * x[3] +\n        0.2597 * x[2] * x[4] - 0.558 * x[2] * x[5] - 0.0323 * x[2] * x[6] +\n        0.23 * x[2] * x[7] +\n        0.9753 * x[2] * x[8] +\n        0.1184 * x[2] * x[9] - 0.2582 * x[2] * x[10] - 0.3248 * x[3] * x[4] +\n        0.4909 * x[3] * x[5] +\n        0.1395 * x[3] * x[6] - 0.0877 * x[3] * x[7] +\n        0.2964 * x[3] * x[8] +\n        0.3672 * x[3] * x[9] - 0.6592 * x[3] * x[10] - 0.4539 * x[4] * x[5] -\n        0.1185 * x[4] * x[6] - 0.0846 * x[4] * x[7] - 0.2095 * x[4] * x[8] +\n        0.3767 * x[4] * x[9] - 0.4022 * x[4] * x[10] - 0.5895 * x[5] * x[6] -\n        0.6154 * x[5] * x[7] - 0.162 * x[5] * x[8] + 0.3813 * x[5] * x[9] -\n        0.7189 * x[5] * x[10] - 0.7125 * x[6] * x[7] +\n        0.3249 * x[6] * x[8] +\n        0.1514 * x[6] * x[9] +\n        0.5499 * x[6] * x[10] +\n        0.5506 * x[7] * x[8] +\n        0.5307 * x[7] * x[9] +\n        0.753 * x[7] * x[10] - 0.8016 * x[8] * x[9] - 0.331 * x[8] * x[10] +\n        0.2902 * x[9] * x[10] - 0.7368 * x[1] +\n        0.6151 * x[2] +\n        0.0837 * x[3] - 0.4685 * x[4] - 0.0823 * x[5] +\n        0.0219 * x[6] +\n        0.0097 * x[7] +\n        0.9235 * x[8] +\n        0.1005 * x[9] - 0.6207 * x[10] + 0.6888 * x[1] * x[2] * x[3] -\n        0.4837 * x[1] * x[2] * x[4] +\n        0.6795 * x[1] * x[2] * x[5] +\n        0.0753 * x[1] * x[2] * x[6] +\n        0.2431 * x[1] * x[2] * x[7] - 0.0184 * x[1] * x[2] * x[8] -\n        0.4303 * x[1] * x[2] * x[9] - 0.5289 * x[1] * x[2] * x[10] +\n        0.3028 * x[1] * x[3] * x[4] +\n        0.2143 * x[1] * x[3] * x[5] - 0.2037 * x[1] * x[3] * x[6] +\n        0.6976 * x[1] * x[3] * x[7] +\n        0.2752 * x[1] * x[3] * x[8] - 0.4824 * x[1] * x[3] * x[9] -\n        0.2823 * x[1] * x[3] * x[10] + 0.1237 * x[1] * x[4] * x[5] -\n        0.7571 * x[1] * x[4] * x[6] + 0.9569 * x[1] * x[4] * x[7] -\n        0.2336 * x[1] * x[4] * x[8] + 0.4414 * x[1] * x[4] * x[9] -\n        0.2835 * x[1] * x[4] * x[10] +\n        0.8198 * x[1] * x[5] * x[6] +\n        0.0874 * x[1] * x[5] * x[7] +\n        0.9194 * x[1] * x[5] * x[8] +\n        0.8589 * x[1] * x[5] * x[9] +\n        0.2666 * x[1] * x[5] * x[10] - 0.4088 * x[1] * x[6] * x[7] -\n        0.6505 * x[1] * x[6] * x[8] +\n        0.6852 * x[1] * x[6] * x[9] +\n        0.2372 * x[1] * x[6] * x[10] +\n        0.4118 * x[1] * x[7] * x[8] - 0.5151 * x[1] * x[7] * x[9] +\n        0.5959 * x[1] * x[7] * x[10] - 0.218 * x[1] * x[8] * x[9] -\n        0.7801 * x[1] * x[8] * x[10] + 0.5074 * x[1] * x[9] * x[10] -\n        0.9404 * x[2] * x[3] * x[4] +\n        0.4013 * x[2] * x[3] * x[5] +\n        0.0504 * x[2] * x[3] * x[6] +\n        0.5051 * x[2] * x[3] * x[7] +\n        0.2954 * x[2] * x[3] * x[8] +\n        0.7422 * x[2] * x[3] * x[9] +\n        0.6614 * x[2] * x[3] * x[10] +\n        0.9144 * x[2] * x[4] * x[5] - 0.5555 * x[2] * x[4] * x[6] +\n        0.159 * x[2] * x[4] * x[7] +\n        0.9815 * x[2] * x[4] * x[8] +\n        0.6799 * x[2] * x[4] * x[9] - 0.6504 * x[2] * x[4] * x[10] +\n        0.4191 * x[2] * x[5] * x[6] - 0.3969 * x[2] * x[5] * x[7] -\n        0.9499 * x[2] * x[5] * x[8] +\n        0.8335 * x[2] * x[5] * x[9] +\n        0.3776 * x[2] * x[5] * x[10] +\n        0.5135 * x[2] * x[6] * x[7] +\n        0.8655 * x[2] * x[6] * x[8] - 0.89 * x[2] * x[6] * x[9] -\n        0.0021 * x[2] * x[6] * x[10] - 0.881 * x[2] * x[7] * x[8] -\n        0.6563 * x[2] * x[7] * x[9] + 0.3767 * x[2] * x[7] * x[10] -\n        0.3868 * x[2] * x[8] * x[9] +\n        0.4704 * x[2] * x[8] * x[10] +\n        0.5043 * x[2] * x[9] * x[10] - 0.2086 * x[3] * x[4] * x[5] -\n        0.8244 * x[3] * x[4] * x[6] - 0.9021 * x[3] * x[4] * x[7] +\n        0.5587 * x[3] * x[4] * x[8] +\n        0.3616 * x[3] * x[4] * x[9] - 0.3769 * x[3] * x[4] * x[10] +\n        0.0455 * x[3] * x[5] * x[6] +\n        0.0116 * x[3] * x[5] * x[7] - 0.1229 * x[3] * x[5] * x[8] +\n        0.1753 * x[3] * x[5] * x[9] - 0.4053 * x[3] * x[5] * x[10] -\n        0.4102 * x[3] * x[6] * x[7] - 0.8524 * x[3] * x[6] * x[8] +\n        0.9499 * x[3] * x[6] * x[9] +\n        0.4563 * x[3] * x[6] * x[10] +\n        0.5162 * x[3] * x[7] * x[8] - 0.3816 * x[3] * x[7] * x[9] -\n        0.507 * x[3] * x[7] * x[10] - 0.4862 * x[3] * x[8] * x[9] +\n        0.2361 * x[3] * x[8] * x[10] +\n        0.8756 * x[3] * x[9] * x[10] +\n        0.9844 * x[4] * x[5] * x[6] - 0.5504 * x[4] * x[5] * x[7] +\n        0.8946 * x[4] * x[5] * x[8] +\n        0.6956 * x[4] * x[5] * x[9] +\n        0.4003 * x[4] * x[5] * x[10] +\n        0.1089 * x[4] * x[6] * x[7] - 0.1168 * x[4] * x[6] * x[8] -\n        0.5016 * x[4] * x[6] * x[9] + 0.7953 * x[4] * x[6] * x[10] -\n        0.7085 * x[4] * x[7] * x[8] - 0.1308 * x[4] * x[7] * x[9] -\n        0.0852 * x[4] * x[7] * x[10] - 0.3812 * x[4] * x[8] * x[9] -\n        0.0382 * x[4] * x[8] * x[10] +\n        0.3795 * x[4] * x[9] * x[10] +\n        0.6216 * x[5] * x[6] * x[7] - 0.2157 * x[5] * x[6] * x[8] -\n        0.4137 * x[5] * x[6] * x[9] +\n        0.152 * x[5] * x[6] * x[10] +\n        0.4507 * x[5] * x[7] * x[8] - 0.7145 * x[5] * x[7] * x[9] -\n        0.3329 * x[5] * x[7] * x[10] - 0.6792 * x[5] * x[8] * x[9] +\n        0.0692 * x[5] * x[8] * x[10] +\n        0.4467 * x[5] * x[9] * x[10] - 0.5436 * x[6] * x[7] * x[8] -\n        0.602 * x[6] * x[7] * x[9] +\n        0.9452 * x[6] * x[7] * x[10] +\n        0.9871 * x[6] * x[8] * x[9] - 0.8361 * x[6] * x[8] * x[10] -\n        0.4982 * x[6] * x[9] * x[10] - 0.5683 * x[7] * x[8] * x[9] -\n        0.6084 * x[7] * x[8] * x[10] + 0.7005 * x[7] * x[9] * x[10] -\n        0.9106 * x[8] * x[9] * x[10] +\n        0.9951 * x[1] * x[2] * x[3] * x[4] +\n        0.1336 * x[1] * x[2] * x[3] * x[5] +\n        0.9318 * x[1] * x[2] * x[3] * x[6] +\n        0.4959 * x[1] * x[2] * x[3] * x[7] - 0.2652 * x[1] * x[2] * x[3] * x[8] -\n        0.0387 * x[1] * x[2] * x[3] * x[9] - 0.8525 * x[1] * x[2] * x[3] * x[10] -\n        0.9893 * x[1] * x[2] * x[4] * x[5] - 0.3058 * x[1] * x[2] * x[4] * x[6] -\n        0.3155 * x[1] * x[2] * x[4] * x[7] - 0.5641 * x[1] * x[2] * x[4] * x[8] -\n        0.7337 * x[1] * x[2] * x[4] * x[9] + 0.801 * x[1] * x[2] * x[4] * x[10] -\n        0.2265 * x[1] * x[2] * x[5] * x[6] - 0.109 * x[1] * x[2] * x[5] * x[7] +\n        0.3239 * x[1] * x[2] * x[5] * x[8] - 0.9678 * x[1] * x[2] * x[5] * x[9] +\n        0.3017 * x[1] * x[2] * x[5] * x[10] +\n        0.2928 * x[1] * x[2] * x[6] * x[7] - 0.354 * x[1] * x[2] * x[6] * x[8] +\n        0.7114 * x[1] * x[2] * x[6] * x[9] - 0.1974 * x[1] * x[2] * x[6] * x[10] -\n        0.5863 * x[1] * x[2] * x[7] * x[8] +\n        0.9371 * x[1] * x[2] * x[7] * x[9] +\n        0.1968 * x[1] * x[2] * x[7] * x[10] +\n        0.346 * x[1] * x[2] * x[8] * x[9] - 0.0862 * x[1] * x[2] * x[8] * x[10] -\n        0.34 * x[1] * x[2] * x[9] * x[10] - 0.7992 * x[1] * x[3] * x[4] * x[5] +\n        0.5109 * x[1] * x[3] * x[4] * x[6] +\n        0.2114 * x[1] * x[3] * x[4] * x[7] +\n        0.4381 * x[1] * x[3] * x[4] * x[8] +\n        0.7947 * x[1] * x[3] * x[4] * x[9] +\n        0.3165 * x[1] * x[3] * x[4] * x[10] - 0.6986 * x[1] * x[3] * x[5] * x[6] +\n        0.2246 * x[1] * x[3] * x[5] * x[7] +\n        0.9573 * x[1] * x[3] * x[5] * x[8] +\n        0.9983 * x[1] * x[3] * x[5] * x[9] - 0.4864 * x[1] * x[3] * x[5] * x[10] +\n        0.1017 * x[1] * x[3] * x[6] * x[7] +\n        0.3181 * x[1] * x[3] * x[6] * x[8] +\n        0.108 * x[1] * x[3] * x[6] * x[9] +\n        0.9555 * x[1] * x[3] * x[6] * x[10] +\n        0.8038 * x[1] * x[3] * x[7] * x[8] +\n        0.3158 * x[1] * x[3] * x[7] * x[9] +\n        0.4577 * x[1] * x[3] * x[7] * x[10] - 0.1951 * x[1] * x[3] * x[8] * x[9] +\n        0.8573 * x[1] * x[3] * x[8] * x[10] - 0.7043 * x[1] * x[3] * x[9] * x[10] +\n        0.3491 * x[1] * x[4] * x[5] * x[6] +\n        0.5392 * x[1] * x[4] * x[5] * x[7] - 0.3214 * x[1] * x[4] * x[5] * x[8] -\n        0.7684 * x[1] * x[4] * x[5] * x[9] +\n        0.2287 * x[1] * x[4] * x[5] * x[10] +\n        0.6412 * x[1] * x[4] * x[6] * x[7] +\n        0.8942 * x[1] * x[4] * x[6] * x[8] +\n        0.4623 * x[1] * x[4] * x[6] * x[9] - 0.0048 * x[1] * x[4] * x[6] * x[10] -\n        0.2504 * x[1] * x[4] * x[7] * x[8] - 0.157 * x[1] * x[4] * x[7] * x[9] +\n        0.1058 * x[1] * x[4] * x[7] * x[10] +\n        0.9958 * x[1] * x[4] * x[8] * x[9] +\n        0.9808 * x[1] * x[4] * x[8] * x[10] +\n        0.4926 * x[1] * x[4] * x[9] * x[10] +\n        0.9075 * x[1] * x[5] * x[6] * x[7] - 0.8135 * x[1] * x[5] * x[6] * x[8] +\n        0.468 * x[1] * x[5] * x[6] * x[9] +\n        0.5035 * x[1] * x[5] * x[6] * x[10] +\n        0.8937 * x[1] * x[5] * x[7] * x[8] +\n        0.4124 * x[1] * x[5] * x[7] * x[9] +\n        0.6276 * x[1] * x[5] * x[7] * x[10] +\n        0.1172 * x[1] * x[5] * x[8] * x[9] - 0.8766 * x[1] * x[5] * x[8] * x[10] -\n        0.0392 * x[1] * x[5] * x[9] * x[10] + 0.1954 * x[1] * x[6] * x[7] * x[8] -\n        0.7249 * x[1] * x[6] * x[7] * x[9] +\n        0.1748 * x[1] * x[6] * x[7] * x[10] +\n        0.0399 * x[1] * x[6] * x[8] * x[9] +\n        0.7718 * x[1] * x[6] * x[8] * x[10] - 0.3924 * x[1] * x[6] * x[9] * x[10] +\n        0.3393 * x[1] * x[7] * x[8] * x[9] +\n        0.3299 * x[1] * x[7] * x[8] * x[10] +\n        0.0074 * x[1] * x[7] * x[9] * x[10] - 0.4768 * x[1] * x[8] * x[9] * x[10] -\n        0.8469 * x[2] * x[3] * x[4] * x[5] - 0.7975 * x[2] * x[3] * x[4] * x[6] +\n        0.0985 * x[2] * x[3] * x[4] * x[7] - 0.2488 * x[2] * x[3] * x[4] * x[8] -\n        0.9697 * x[2] * x[3] * x[4] * x[9] +\n        0.5858 * x[2] * x[3] * x[4] * x[10] +\n        0.2418 * x[2] * x[3] * x[5] * x[6] +\n        0.5472 * x[2] * x[3] * x[5] * x[7] +\n        0.9072 * x[2] * x[3] * x[5] * x[8] - 0.7715 * x[2] * x[3] * x[5] * x[9] -\n        0.3631 * x[2] * x[3] * x[5] * x[10] + 0.1936 * x[2] * x[3] * x[6] * x[7] -\n        0.9037 * x[2] * x[3] * x[6] * x[8] - 0.7716 * x[2] * x[3] * x[6] * x[9] -\n        0.5681 * x[2] * x[3] * x[6] * x[10] - 0.7989 * x[2] * x[3] * x[7] * x[8] -\n        0.8533 * x[2] * x[3] * x[7] * x[9] - 0.5063 * x[2] * x[3] * x[7] * x[10] -\n        0.1132 * x[2] * x[3] * x[8] * x[9] - 0.5833 * x[2] * x[3] * x[8] * x[10] +\n        0.134 * x[2] * x[3] * x[9] * x[10] - 0.9514 * x[2] * x[4] * x[5] * x[6] -\n        0.1594 * x[2] * x[4] * x[5] * x[7] - 0.2043 * x[2] * x[4] * x[5] * x[8] +\n        0.9532 * x[2] * x[4] * x[5] * x[9] +\n        0.3852 * x[2] * x[4] * x[5] * x[10] - 0.9901 * x[2] * x[4] * x[6] * x[7] -\n        0.7402 * x[2] * x[4] * x[6] * x[8] - 0.9064 * x[2] * x[4] * x[6] * x[9] +\n        0.6796 * x[2] * x[4] * x[6] * x[10] +\n        0.357 * x[2] * x[4] * x[7] * x[8] +\n        0.1639 * x[2] * x[4] * x[7] * x[9] +\n        0.4671 * x[2] * x[4] * x[7] * x[10] - 0.7679 * x[2] * x[4] * x[8] * x[9] +\n        0.6806 * x[2] * x[4] * x[8] * x[10] +\n        0.67 * x[2] * x[4] * x[9] * x[10] +\n        0.4931 * x[2] * x[5] * x[6] * x[7] +\n        0.6864 * x[2] * x[5] * x[6] * x[8] +\n        0.0577 * x[2] * x[5] * x[6] * x[9] +\n        0.331 * x[2] * x[5] * x[6] * x[10] +\n        0.4615 * x[2] * x[5] * x[7] * x[8] - 0.1788 * x[2] * x[5] * x[7] * x[9] -\n        0.2886 * x[2] * x[5] * x[7] * x[10] + 0.4708 * x[2] * x[5] * x[8] * x[9] -\n        0.0574 * x[2] * x[5] * x[8] * x[10] - 0.0747 * x[2] * x[5] * x[9] * x[10] +\n        0.5194 * x[2] * x[6] * x[7] * x[8] +\n        0.4049 * x[2] * x[6] * x[7] * x[9] - 0.4841 * x[2] * x[6] * x[7] * x[10] +\n        0.8754 * x[2] * x[6] * x[8] * x[9] - 0.0878 * x[2] * x[6] * x[8] * x[10] +\n        0.617 * x[2] * x[6] * x[9] * x[10] +\n        0.8177 * x[2] * x[7] * x[8] * x[9] +\n        0.3898 * x[2] * x[7] * x[8] * x[10] - 0.561 * x[2] * x[7] * x[9] * x[10] +\n        0.7099 * x[2] * x[8] * x[9] * x[10] +\n        0.4888 * x[3] * x[4] * x[5] * x[6] - 0.3978 * x[3] * x[4] * x[5] * x[7] +\n        0.3439 * x[3] * x[4] * x[5] * x[8] +\n        0.2374 * x[3] * x[4] * x[5] * x[9] +\n        0.9351 * x[3] * x[4] * x[5] * x[10] +\n        0.9805 * x[3] * x[4] * x[6] * x[7] - 0.324 * x[3] * x[4] * x[6] * x[8] +\n        0.8415 * x[3] * x[4] * x[6] * x[9] - 0.3219 * x[3] * x[4] * x[6] * x[10] +\n        0.8619 * x[3] * x[4] * x[7] * x[8] +\n        0.0931 * x[3] * x[4] * x[7] * x[9] - 0.069 * x[3] * x[4] * x[7] * x[10] -\n        0.6462 * x[3] * x[4] * x[8] * x[9] - 0.244 * x[3] * x[4] * x[8] * x[10] -\n        0.6496 * x[3] * x[4] * x[9] * x[10] - 0.2863 * x[3] * x[5] * x[6] * x[7] +\n        0.3314 * x[3] * x[5] * x[6] * x[8] +\n        0.2371 * x[3] * x[5] * x[6] * x[9] - 0.0621 * x[3] * x[5] * x[6] * x[10] -\n        0.3675 * x[3] * x[5] * x[7] * x[8] - 0.4622 * x[3] * x[5] * x[7] * x[9] -\n        0.6002 * x[3] * x[5] * x[7] * x[10] - 0.1691 * x[3] * x[5] * x[8] * x[9] +\n        0.9586 * x[3] * x[5] * x[8] * x[10] +\n        0.0864 * x[3] * x[5] * x[9] * x[10] - 0.741 * x[3] * x[6] * x[7] * x[8] +\n        0.6095 * x[3] * x[6] * x[7] * x[9] +\n        0.6916 * x[3] * x[6] * x[7] * x[10] +\n        0.4181 * x[3] * x[6] * x[8] * x[9] +\n        0.0579 * x[3] * x[6] * x[8] * x[10] +\n        0.3277 * x[3] * x[6] * x[9] * x[10] +\n        0.8015 * x[3] * x[7] * x[8] * x[9] +\n        0.8823 * x[3] * x[7] * x[8] * x[10] - 0.7712 * x[3] * x[7] * x[9] * x[10] +\n        0.7333 * x[3] * x[8] * x[9] * x[10] +\n        0.2647 * x[4] * x[5] * x[6] * x[7] - 0.5144 * x[4] * x[5] * x[6] * x[8] -\n        0.6792 * x[4] * x[5] * x[6] * x[9] - 0.9575 * x[4] * x[5] * x[6] * x[10] -\n        0.6195 * x[4] * x[5] * x[7] * x[8] - 0.3753 * x[4] * x[5] * x[7] * x[9] +\n        0.6193 * x[4] * x[5] * x[7] * x[10] +\n        0.1474 * x[4] * x[5] * x[8] * x[9] +\n        0.6525 * x[4] * x[5] * x[8] * x[10] - 0.4271 * x[4] * x[5] * x[9] * x[10] -\n        0.679 * x[4] * x[6] * x[7] * x[8] - 0.3382 * x[4] * x[6] * x[7] * x[9] -\n        0.4683 * x[4] * x[6] * x[7] * x[10] +\n        0.0896 * x[4] * x[6] * x[8] * x[9] +\n        0.107 * x[4] * x[6] * x[8] * x[10] - 0.9568 * x[4] * x[6] * x[9] * x[10] -\n        0.7025 * x[4] * x[7] * x[8] * x[9] - 0.7902 * x[4] * x[7] * x[8] * x[10] +\n        0.2284 * x[4] * x[7] * x[9] * x[10] - 0.1874 * x[4] * x[8] * x[9] * x[10] +\n        0.8031 * x[5] * x[6] * x[7] * x[8] +\n        0.8857 * x[5] * x[6] * x[7] * x[9] - 0.6868 * x[5] * x[6] * x[7] * x[10] +\n        0.8739 * x[5] * x[6] * x[8] * x[9] - 0.7291 * x[5] * x[6] * x[8] * x[10] -\n        0.2574 * x[5] * x[6] * x[9] * x[10] - 0.357 * x[5] * x[7] * x[8] * x[9] +\n        0.4299 * x[5] * x[7] * x[8] * x[10] +\n        0.4594 * x[5] * x[7] * x[9] * x[10] - 0.2428 * x[5] * x[8] * x[9] * x[10] +\n        0.6579 * x[6] * x[7] * x[8] * x[9] +\n        0.9073 * x[6] * x[7] * x[8] * x[10] - 0.3832 * x[6] * x[7] * x[9] * x[10] +\n        0.1595 * x[6] * x[8] * x[9] * x[10] - 0.5331 * x[7] * x[8] * x[9] * x[10]\n    ))\n    obj = replace_expr(obj, x)\n    JuMP.set_nonlinear_objective(m, MOI.MIN_SENSE, obj)\n\n    # ----- Constraints ----- #\n    e2 = :(\n        0.4626 * x[1] * x[2] + 0.0198 * x[1] * x[3] - 0.4397 * x[1] * x[4] +\n        0.9861 * x[1] * x[5] +\n        0.5225 * x[1] * x[6] - 0.9346 * x[1] * x[7] +\n        0.4133 * x[1] * x[8] +\n        0.3442 * x[1] * x[9] - 0.8199 * x[1] * x[10] - 0.0776 * x[2] * x[3] -\n        0.4723 * x[2] * x[4] - 0.289 * x[2] * x[5] + 0.4463 * x[2] * x[6] -\n        0.9454 * x[2] * x[7] +\n        0.1697 * x[2] * x[8] +\n        0.3885 * x[2] * x[9] - 0.7786 * x[2] * x[10] +\n        0.0525 * x[3] * x[4] +\n        0.9874 * x[3] * x[5] +\n        0.4525 * x[3] * x[6] +\n        0.521 * x[3] * x[7] - 0.5928 * x[3] * x[8] + 0.7265 * x[3] * x[9] -\n        0.615 * x[3] * x[10] - 0.8237 * x[4] * x[5] - 0.5174 * x[4] * x[6] +\n        0.821 * x[4] * x[7] +\n        0.6597 * x[4] * x[8] - 0.8449 * x[4] * x[9] +\n        0.743 * x[4] * x[10] +\n        0.1144 * x[5] * x[6] - 0.2056 * x[5] * x[7] +\n        0.9986 * x[5] * x[8] +\n        0.54 * x[5] * x[9] +\n        0.5713 * x[5] * x[10] +\n        0.5068 * x[6] * x[7] +\n        0.1204 * x[6] * x[8] +\n        0.3888 * x[6] * x[9] +\n        0.7512 * x[6] * x[10] - 0.9713 * x[7] * x[8] - 0.4285 * x[7] * x[9] -\n        0.6373 * x[7] * x[10] +\n        0.6154 * x[8] * x[9] +\n        0.1051 * x[8] * x[10] - 0.0283 * x[9] * x[10] + 0.0735 * x[1] -\n        0.9093 * x[2] - 0.7123 * x[3] +\n        0.5603 * x[4] +\n        0.5412 * x[5] - 0.6809 * x[6] - 0.0621 * x[7] - 0.674 * x[8] + 0.0977 * x[9] -\n        0.3899 * x[10] + (-0.6347 * x[1] * x[2] * x[3]) -\n        0.9763 * x[1] * x[2] * x[4] + 0.8874 * x[1] * x[2] * x[5] -\n        0.0161 * x[1] * x[2] * x[6] +\n        0.9611 * x[1] * x[2] * x[7] +\n        0.2266 * x[1] * x[2] * x[8] - 0.2746 * x[1] * x[2] * x[9] +\n        0.0648 * x[1] * x[2] * x[10] - 0.7084 * x[1] * x[3] * x[4] -\n        0.7343 * x[1] * x[3] * x[5] - 0.2376 * x[1] * x[3] * x[6] +\n        0.4007 * x[1] * x[3] * x[7] +\n        0.0995 * x[1] * x[3] * x[8] +\n        0.6511 * x[1] * x[3] * x[9] +\n        0.0747 * x[1] * x[3] * x[10] +\n        0.3247 * x[1] * x[4] * x[5] - 0.8937 * x[1] * x[4] * x[6] -\n        0.6571 * x[1] * x[4] * x[7] +\n        0.2373 * x[1] * x[4] * x[8] +\n        0.5175 * x[1] * x[4] * x[9] +\n        0.8201 * x[1] * x[4] * x[10] +\n        0.428 * x[1] * x[5] * x[6] +\n        0.48 * x[1] * x[5] * x[7] - 0.2866 * x[1] * x[5] * x[8] +\n        0.6437 * x[1] * x[5] * x[9] +\n        0.1041 * x[1] * x[5] * x[10] +\n        0.3016 * x[1] * x[6] * x[7] - 0.6249 * x[1] * x[6] * x[8] +\n        0.6366 * x[1] * x[6] * x[9] - 0.9552 * x[1] * x[6] * x[10] +\n        0.3144 * x[1] * x[7] * x[8] - 0.7607 * x[1] * x[7] * x[9] -\n        0.2293 * x[1] * x[7] * x[10] - 0.5147 * x[1] * x[8] * x[9] +\n        0.9307 * x[1] * x[8] * x[10] - 0.0294 * x[1] * x[9] * x[10] +\n        0.9847 * x[2] * x[3] * x[4] - 0.4374 * x[2] * x[3] * x[5] +\n        0.9569 * x[2] * x[3] * x[6] +\n        0.9057 * x[2] * x[3] * x[7] - 0.5138 * x[2] * x[3] * x[8] -\n        0.1668 * x[2] * x[3] * x[9] + 0.4716 * x[2] * x[3] * x[10] -\n        0.6094 * x[2] * x[4] * x[5] +\n        0.2787 * x[2] * x[4] * x[6] +\n        0.2594 * x[2] * x[4] * x[7] - 0.7943 * x[2] * x[4] * x[8] -\n        0.7225 * x[2] * x[4] * x[9] - 0.0902 * x[2] * x[4] * x[10] +\n        0.9687 * x[2] * x[5] * x[6] - 0.1502 * x[2] * x[5] * x[7] +\n        0.4096 * x[2] * x[5] * x[8] - 0.2692 * x[2] * x[5] * x[9] -\n        0.5992 * x[2] * x[5] * x[10] - 0.1808 * x[2] * x[6] * x[7] -\n        0.5216 * x[2] * x[6] * x[8] + 0.41 * x[2] * x[6] * x[9] -\n        0.8418 * x[2] * x[6] * x[10] - 0.5924 * x[2] * x[7] * x[8] -\n        0.9653 * x[2] * x[7] * x[9] - 0.3314 * x[2] * x[7] * x[10] -\n        0.4303 * x[2] * x[8] * x[9] + 0.6908 * x[2] * x[8] * x[10] -\n        0.0111 * x[2] * x[9] * x[10] + 0.4202 * x[3] * x[4] * x[5] -\n        0.4907 * x[3] * x[4] * x[6] + 0.6454 * x[3] * x[4] * x[7] -\n        0.4368 * x[3] * x[4] * x[8] +\n        0.2496 * x[3] * x[4] * x[9] +\n        0.4916 * x[3] * x[4] * x[10] +\n        0.7479 * x[3] * x[5] * x[6] - 0.7442 * x[3] * x[5] * x[7] -\n        0.4416 * x[3] * x[5] * x[8] +\n        0.847 * x[3] * x[5] * x[9] +\n        0.9726 * x[3] * x[5] * x[10] +\n        0.5786 * x[3] * x[6] * x[7] - 0.3041 * x[3] * x[6] * x[8] +\n        0.5286 * x[3] * x[6] * x[9] - 0.6138 * x[3] * x[6] * x[10] -\n        0.8712 * x[3] * x[7] * x[8] - 0.9096 * x[3] * x[7] * x[9] -\n        0.707 * x[3] * x[7] * x[10] +\n        0.6138 * x[3] * x[8] * x[9] +\n        0.312 * x[3] * x[8] * x[10] - 0.5107 * x[3] * x[9] * x[10] -\n        0.3513 * x[4] * x[5] * x[6] +\n        0.9673 * x[4] * x[5] * x[7] +\n        0.2275 * x[4] * x[5] * x[8] - 0.415 * x[4] * x[5] * x[9] -\n        0.0089 * x[4] * x[5] * x[10] + 0.4723 * x[4] * x[6] * x[7] -\n        0.9209 * x[4] * x[6] * x[8] - 0.9687 * x[4] * x[6] * x[9] -\n        0.043 * x[4] * x[6] * x[10] +\n        0.5532 * x[4] * x[7] * x[8] +\n        0.8139 * x[4] * x[7] * x[9] +\n        0.8304 * x[4] * x[7] * x[10] - 0.3323 * x[4] * x[8] * x[9] -\n        0.4014 * x[4] * x[8] * x[10] + 0.6574 * x[4] * x[9] * x[10] -\n        0.0813 * x[5] * x[6] * x[7] - 0.9703 * x[5] * x[6] * x[8] -\n        0.3218 * x[5] * x[6] * x[9] - 0.8836 * x[5] * x[6] * x[10] -\n        0.8145 * x[5] * x[7] * x[8] + 0.3035 * x[5] * x[7] * x[9] -\n        0.2096 * x[5] * x[7] * x[10] +\n        0.2399 * x[5] * x[8] * x[9] +\n        0.6504 * x[5] * x[8] * x[10] - 0.3218 * x[5] * x[9] * x[10] -\n        0.3831 * x[6] * x[7] * x[8] - 0.2782 * x[6] * x[7] * x[9] -\n        0.1766 * x[6] * x[7] * x[10] - 0.0781 * x[6] * x[8] * x[9] -\n        0.2352 * x[6] * x[8] * x[10] + 0.2862 * x[6] * x[9] * x[10] -\n        0.5167 * x[7] * x[8] * x[9] +\n        0.4314 * x[7] * x[8] * x[10] +\n        0.7136 * x[7] * x[9] * x[10] - 0.6721 * x[8] * x[9] * x[10] +\n        (-0.5978 * x[1] * x[2] * x[3] * x[4]) - 0.5025 * x[1] * x[2] * x[3] * x[5] +\n        0.9402 * x[1] * x[2] * x[3] * x[6] +\n        0.5528 * x[1] * x[2] * x[3] * x[7] - 0.4546 * x[1] * x[2] * x[3] * x[8] -\n        0.0061 * x[1] * x[2] * x[3] * x[9] - 0.2025 * x[1] * x[2] * x[3] * x[10] +\n        0.2266 * x[1] * x[2] * x[4] * x[5] - 0.8295 * x[1] * x[2] * x[4] * x[6] +\n        0.474 * x[1] * x[2] * x[4] * x[7] +\n        0.7257 * x[1] * x[2] * x[4] * x[8] - 0.3179 * x[1] * x[2] * x[4] * x[9] +\n        0.3889 * x[1] * x[2] * x[4] * x[10] +\n        0.2838 * x[1] * x[2] * x[5] * x[6] - 0.829 * x[1] * x[2] * x[5] * x[7] +\n        0.416 * x[1] * x[2] * x[5] * x[8] +\n        0.1849 * x[1] * x[2] * x[5] * x[9] - 0.5344 * x[1] * x[2] * x[5] * x[10] -\n        0.8496 * x[1] * x[2] * x[6] * x[7] - 0.3513 * x[1] * x[2] * x[6] * x[8] +\n        0.8262 * x[1] * x[2] * x[6] * x[9] - 0.5914 * x[1] * x[2] * x[6] * x[10] -\n        0.0945 * x[1] * x[2] * x[7] * x[8] + 0.4543 * x[1] * x[2] * x[7] * x[9] -\n        0.9433 * x[1] * x[2] * x[7] * x[10] +\n        0.0341 * x[1] * x[2] * x[8] * x[9] +\n        0.5353 * x[1] * x[2] * x[8] * x[10] +\n        0.7887 * x[1] * x[2] * x[9] * x[10] +\n        0.889 * x[1] * x[3] * x[4] * x[5] - 0.4204 * x[1] * x[3] * x[4] * x[6] +\n        0.0629 * x[1] * x[3] * x[4] * x[7] - 0.5343 * x[1] * x[3] * x[4] * x[8] -\n        0.3744 * x[1] * x[3] * x[4] * x[9] - 0.717 * x[1] * x[3] * x[4] * x[10] -\n        0.3148 * x[1] * x[3] * x[5] * x[6] - 0.6929 * x[1] * x[3] * x[5] * x[7] +\n        0.6984 * x[1] * x[3] * x[5] * x[8] +\n        0.9441 * x[1] * x[3] * x[5] * x[9] - 0.1182 * x[1] * x[3] * x[5] * x[10] +\n        0.5489 * x[1] * x[3] * x[6] * x[7] - 0.0876 * x[1] * x[3] * x[6] * x[8] +\n        0.729 * x[1] * x[3] * x[6] * x[9] +\n        0.456 * x[1] * x[3] * x[6] * x[10] +\n        0.2747 * x[1] * x[3] * x[7] * x[8] +\n        0.4481 * x[1] * x[3] * x[7] * x[9] +\n        0.2084 * x[1] * x[3] * x[7] * x[10] - 0.9474 * x[1] * x[3] * x[8] * x[9] -\n        0.4145 * x[1] * x[3] * x[8] * x[10] - 0.6056 * x[1] * x[3] * x[9] * x[10] +\n        0.8973 * x[1] * x[4] * x[5] * x[6] +\n        0.0637 * x[1] * x[4] * x[5] * x[7] - 0.9793 * x[1] * x[4] * x[5] * x[8] -\n        0.0957 * x[1] * x[4] * x[5] * x[9] +\n        0.9272 * x[1] * x[4] * x[5] * x[10] +\n        0.9722 * x[1] * x[4] * x[6] * x[7] - 0.3182 * x[1] * x[4] * x[6] * x[8] +\n        0.9186 * x[1] * x[4] * x[6] * x[9] - 0.3466 * x[1] * x[4] * x[6] * x[10] +\n        0.4085 * x[1] * x[4] * x[7] * x[8] +\n        0.5809 * x[1] * x[4] * x[7] * x[9] +\n        0.4471 * x[1] * x[4] * x[7] * x[10] +\n        0.4579 * x[1] * x[4] * x[8] * x[9] - 0.1092 * x[1] * x[4] * x[8] * x[10] -\n        0.2364 * x[1] * x[4] * x[9] * x[10] +\n        0.8444 * x[1] * x[5] * x[6] * x[7] +\n        0.4968 * x[1] * x[5] * x[6] * x[8] - 0.1465 * x[1] * x[5] * x[6] * x[9] -\n        0.5651 * x[1] * x[5] * x[6] * x[10] +\n        0.4588 * x[1] * x[5] * x[7] * x[8] +\n        0.5938 * x[1] * x[5] * x[7] * x[9] +\n        0.1168 * x[1] * x[5] * x[7] * x[10] +\n        0.7708 * x[1] * x[5] * x[8] * x[9] - 0.2337 * x[1] * x[5] * x[8] * x[10] -\n        0.5184 * x[1] * x[5] * x[9] * x[10] - 0.3698 * x[1] * x[6] * x[7] * x[8] -\n        0.1342 * x[1] * x[6] * x[7] * x[9] - 0.904 * x[1] * x[6] * x[7] * x[10] -\n        0.1518 * x[1] * x[6] * x[8] * x[9] +\n        0.4747 * x[1] * x[6] * x[8] * x[10] +\n        0.7456 * x[1] * x[6] * x[9] * x[10] - 0.384 * x[1] * x[7] * x[8] * x[9] +\n        0.6866 * x[1] * x[7] * x[8] * x[10] +\n        0.6322 * x[1] * x[7] * x[9] * x[10] - 0.1864 * x[1] * x[8] * x[9] * x[10] +\n        0.73 * x[2] * x[3] * x[4] * x[5] +\n        0.7045 * x[2] * x[3] * x[4] * x[6] +\n        0.0242 * x[2] * x[3] * x[4] * x[7] +\n        0.5528 * x[2] * x[3] * x[4] * x[8] - 0.0143 * x[2] * x[3] * x[4] * x[9] -\n        0.5903 * x[2] * x[3] * x[4] * x[10] - 0.1097 * x[2] * x[3] * x[5] * x[6] -\n        0.1329 * x[2] * x[3] * x[5] * x[7] - 0.8906 * x[2] * x[3] * x[5] * x[8] +\n        0.401 * x[2] * x[3] * x[5] * x[9] +\n        0.8385 * x[2] * x[3] * x[5] * x[10] - 0.222 * x[2] * x[3] * x[6] * x[7] -\n        0.5022 * x[2] * x[3] * x[6] * x[8] - 0.2673 * x[2] * x[3] * x[6] * x[9] +\n        0.9973 * x[2] * x[3] * x[6] * x[10] +\n        0.3242 * x[2] * x[3] * x[7] * x[8] - 0.6405 * x[2] * x[3] * x[7] * x[9] +\n        0.7448 * x[2] * x[3] * x[7] * x[10] - 0.5121 * x[2] * x[3] * x[8] * x[9] -\n        0.7672 * x[2] * x[3] * x[8] * x[10] +\n        0.6364 * x[2] * x[3] * x[9] * x[10] +\n        0.0713 * x[2] * x[4] * x[5] * x[6] +\n        0.9761 * x[2] * x[4] * x[5] * x[7] - 0.1674 * x[2] * x[4] * x[5] * x[8] +\n        0.6164 * x[2] * x[4] * x[5] * x[9] - 0.5201 * x[2] * x[4] * x[5] * x[10] +\n        0.9405 * x[2] * x[4] * x[6] * x[7] - 0.2474 * x[2] * x[4] * x[6] * x[8] +\n        0.2668 * x[2] * x[4] * x[6] * x[9] - 0.7262 * x[2] * x[4] * x[6] * x[10] +\n        0.5369 * x[2] * x[4] * x[7] * x[8] - 0.7976 * x[2] * x[4] * x[7] * x[9] +\n        0.1039 * x[2] * x[4] * x[7] * x[10] +\n        0.6633 * x[2] * x[4] * x[8] * x[9] - 0.2455 * x[2] * x[4] * x[8] * x[10] +\n        0.7355 * x[2] * x[4] * x[9] * x[10] +\n        0.2493 * x[2] * x[5] * x[6] * x[7] +\n        0.1046 * x[2] * x[5] * x[6] * x[8] - 0.5768 * x[2] * x[5] * x[6] * x[9] +\n        0.6454 * x[2] * x[5] * x[6] * x[10] - 0.2728 * x[2] * x[5] * x[7] * x[8] -\n        0.539 * x[2] * x[5] * x[7] * x[9] - 0.3418 * x[2] * x[5] * x[7] * x[10] +\n        0.3602 * x[2] * x[5] * x[8] * x[9] - 0.1419 * x[2] * x[5] * x[8] * x[10] -\n        0.0954 * x[2] * x[5] * x[9] * x[10] + 0.8552 * x[2] * x[6] * x[7] * x[8] -\n        0.1075 * x[2] * x[6] * x[7] * x[9] +\n        0.3345 * x[2] * x[6] * x[7] * x[10] +\n        0.5617 * x[2] * x[6] * x[8] * x[9] +\n        0.5817 * x[2] * x[6] * x[8] * x[10] - 0.6045 * x[2] * x[6] * x[9] * x[10] -\n        0.4872 * x[2] * x[7] * x[8] * x[9] +\n        0.3536 * x[2] * x[7] * x[8] * x[10] +\n        0.7971 * x[2] * x[7] * x[9] * x[10] - 0.25 * x[2] * x[8] * x[9] * x[10] -\n        0.9599 * x[3] * x[4] * x[5] * x[6] - 0.196 * x[3] * x[4] * x[5] * x[7] +\n        0.9819 * x[3] * x[4] * x[5] * x[8] +\n        0.9495 * x[3] * x[4] * x[5] * x[9] +\n        0.9406 * x[3] * x[4] * x[5] * x[10] +\n        0.9377 * x[3] * x[4] * x[6] * x[7] - 0.2505 * x[3] * x[4] * x[6] * x[8] -\n        0.8054 * x[3] * x[4] * x[6] * x[9] +\n        0.5014 * x[3] * x[4] * x[6] * x[10] +\n        0.649 * x[3] * x[4] * x[7] * x[8] +\n        0.4489 * x[3] * x[4] * x[7] * x[9] - 0.2659 * x[3] * x[4] * x[7] * x[10] +\n        0.2441 * x[3] * x[4] * x[8] * x[9] - 0.3874 * x[3] * x[4] * x[8] * x[10] -\n        0.3974 * x[3] * x[4] * x[9] * x[10] +\n        0.3528 * x[3] * x[5] * x[6] * x[7] +\n        0.6601 * x[3] * x[5] * x[6] * x[8] +\n        0.1126 * x[3] * x[5] * x[6] * x[9] +\n        0.1189 * x[3] * x[5] * x[6] * x[10] - 0.3444 * x[3] * x[5] * x[7] * x[8] +\n        0.4614 * x[3] * x[5] * x[7] * x[9] - 0.6835 * x[3] * x[5] * x[7] * x[10] +\n        0.0658 * x[3] * x[5] * x[8] * x[9] +\n        0.5684 * x[3] * x[5] * x[8] * x[10] - 0.5684 * x[3] * x[5] * x[9] * x[10] -\n        0.3494 * x[3] * x[6] * x[7] * x[8] + 0.0029 * x[3] * x[6] * x[7] * x[9] -\n        0.5542 * x[3] * x[6] * x[7] * x[10] - 0.067 * x[3] * x[6] * x[8] * x[9] -\n        0.6264 * x[3] * x[6] * x[8] * x[10] - 0.6098 * x[3] * x[6] * x[9] * x[10] -\n        0.5862 * x[3] * x[7] * x[8] * x[9] +\n        0.8116 * x[3] * x[7] * x[8] * x[10] +\n        0.5998 * x[3] * x[7] * x[9] * x[10] +\n        0.4699 * x[3] * x[8] * x[9] * x[10] - 0.1693 * x[4] * x[5] * x[6] * x[7] +\n        0.622 * x[4] * x[5] * x[6] * x[8] +\n        0.9767 * x[4] * x[5] * x[6] * x[9] - 0.0178 * x[4] * x[5] * x[6] * x[10] -\n        0.5614 * x[4] * x[5] * x[7] * x[8] +\n        0.5238 * x[4] * x[5] * x[7] * x[9] +\n        0.8146 * x[4] * x[5] * x[7] * x[10] +\n        0.1793 * x[4] * x[5] * x[8] * x[9] +\n        0.7412 * x[4] * x[5] * x[8] * x[10] - 0.9228 * x[4] * x[5] * x[9] * x[10] +\n        0.8761 * x[4] * x[6] * x[7] * x[8] - 0.9062 * x[4] * x[6] * x[7] * x[9] +\n        0.7942 * x[4] * x[6] * x[7] * x[10] - 0.9605 * x[4] * x[6] * x[8] * x[9] +\n        0.9985 * x[4] * x[6] * x[8] * x[10] +\n        0.9604 * x[4] * x[6] * x[9] * x[10] +\n        0.2233 * x[4] * x[7] * x[8] * x[9] +\n        0.1751 * x[4] * x[7] * x[8] * x[10] +\n        0.9245 * x[4] * x[7] * x[9] * x[10] +\n        0.7868 * x[4] * x[8] * x[9] * x[10] - 0.5956 * x[5] * x[6] * x[7] * x[8] -\n        0.9745 * x[5] * x[6] * x[7] * x[9] - 0.49 * x[5] * x[6] * x[7] * x[10] +\n        0.7809 * x[5] * x[6] * x[8] * x[9] - 0.4609 * x[5] * x[6] * x[8] * x[10] +\n        0.778 * x[5] * x[6] * x[9] * x[10] +\n        0.0383 * x[5] * x[7] * x[8] * x[9] - 0.2656 * x[5] * x[7] * x[8] * x[10] +\n        0.9676 * x[5] * x[7] * x[9] * x[10] +\n        0.7539 * x[5] * x[8] * x[9] * x[10] +\n        0.3629 * x[6] * x[7] * x[8] * x[9] - 0.2751 * x[6] * x[7] * x[8] * x[10] -\n        0.6036 * x[6] * x[7] * x[9] * x[10] - 0.6255 * x[6] * x[8] * x[9] * x[10] +\n        0.9753 * x[7] * x[8] * x[9] * x[10] <= 15.442\n    )\n    e2 = replace_expr(e2, x)\n    JuMP.add_nonlinear_constraint(m, e2)\n    e3 = :(\n        (-0.4919 * x[1] * x[2]) - 0.0339 * x[1] * x[3] +\n        0.2248 * x[1] * x[4] +\n        0.366 * x[1] * x[5] - 0.1987 * x[1] * x[6] - 0.5784 * x[1] * x[7] +\n        0.8198 * x[1] * x[8] - 0.0486 * x[1] * x[9] +\n        0.7126 * x[1] * x[10] +\n        0.8337 * x[2] * x[3] +\n        0.0308 * x[2] * x[4] +\n        0.4378 * x[2] * x[5] - 0.4249 * x[2] * x[6] - 0.876 * x[2] * x[7] -\n        0.247 * x[2] * x[8] - 0.482 * x[2] * x[9] +\n        0.0808 * x[2] * x[10] +\n        0.0687 * x[3] * x[4] - 0.9379 * x[3] * x[5] - 0.1556 * x[3] * x[6] -\n        0.1534 * x[3] * x[7] + 0.2972 * x[3] * x[8] - 0.682 * x[3] * x[9] -\n        0.2246 * x[3] * x[10] +\n        0.2078 * x[4] * x[5] +\n        0.0801 * x[4] * x[6] +\n        0.412 * x[4] * x[7] - 0.7653 * x[4] * x[8] +\n        0.7097 * x[4] * x[9] +\n        0.1609 * x[4] * x[10] +\n        0.0463 * x[5] * x[6] - 0.049 * x[5] * x[7] - 0.9321 * x[5] * x[8] +\n        0.5337 * x[5] * x[9] +\n        0.6369 * x[5] * x[10] - 0.8873 * x[6] * x[7] - 0.5746 * x[6] * x[8] +\n        0.4865 * x[6] * x[9] - 0.3803 * x[6] * x[10] - 0.7699 * x[7] * x[8] +\n        0.7363 * x[7] * x[9] - 0.2812 * x[7] * x[10] + 0.8172 * x[8] * x[9] -\n        0.5754 * x[8] * x[10] - 0.2821 * x[9] * x[10] - 0.8113 * x[1] +\n        0.3038 * x[2] +\n        0.8093 * x[3] +\n        0.5277 * x[4] +\n        0.7849 * x[5] +\n        0.6706 * x[6] +\n        0.0152 * x[7] - 0.009 * x[8] +\n        0.0082 * x[9] +\n        0.5372 * x[10] +\n        (-0.0925 * x[1] * x[2] * x[3]) - 0.4232 * x[1] * x[2] * x[4] +\n        0.4301 * x[1] * x[2] * x[5] - 0.1282 * x[1] * x[2] * x[6] +\n        0.2232 * x[1] * x[2] * x[7] +\n        0.124 * x[1] * x[2] * x[8] - 0.3137 * x[1] * x[2] * x[9] +\n        0.5432 * x[1] * x[2] * x[10] - 0.0037 * x[1] * x[3] * x[4] -\n        0.0924 * x[1] * x[3] * x[5] + 0.3913 * x[1] * x[3] * x[6] -\n        0.6371 * x[1] * x[3] * x[7] - 0.1172 * x[1] * x[3] * x[8] -\n        0.1265 * x[1] * x[3] * x[9] - 0.8825 * x[1] * x[3] * x[10] -\n        0.2623 * x[1] * x[4] * x[5] - 0.1383 * x[1] * x[4] * x[6] -\n        0.6027 * x[1] * x[4] * x[7] - 0.21 * x[1] * x[4] * x[8] -\n        0.5062 * x[1] * x[4] * x[9] - 0.8757 * x[1] * x[4] * x[10] +\n        0.8153 * x[1] * x[5] * x[6] +\n        0.0395 * x[1] * x[5] * x[7] - 0.8308 * x[1] * x[5] * x[8] -\n        0.2081 * x[1] * x[5] * x[9] - 0.797 * x[1] * x[5] * x[10] -\n        0.9042 * x[1] * x[6] * x[7] - 0.5208 * x[1] * x[6] * x[8] +\n        0.2869 * x[1] * x[6] * x[9] +\n        0.0977 * x[1] * x[6] * x[10] - 0.6313 * x[1] * x[7] * x[8] -\n        0.1462 * x[1] * x[7] * x[9] + 0.2552 * x[1] * x[7] * x[10] -\n        0.8255 * x[1] * x[8] * x[9] +\n        0.0742 * x[1] * x[8] * x[10] +\n        0.6895 * x[1] * x[9] * x[10] - 0.181 * x[2] * x[3] * x[4] -\n        0.5937 * x[2] * x[3] * x[5] +\n        0.6543 * x[2] * x[3] * x[6] +\n        0.9317 * x[2] * x[3] * x[7] - 0.2445 * x[2] * x[3] * x[8] +\n        0.2943 * x[2] * x[3] * x[9] +\n        0.3555 * x[2] * x[3] * x[10] - 0.1086 * x[2] * x[4] * x[5] -\n        0.6558 * x[2] * x[4] * x[6] - 0.296 * x[2] * x[4] * x[7] -\n        0.3417 * x[2] * x[4] * x[8] + 0.4937 * x[2] * x[4] * x[9] -\n        0.457 * x[2] * x[4] * x[10] + 0.1226 * x[2] * x[5] * x[6] -\n        0.7351 * x[2] * x[5] * x[7] + 0.5968 * x[2] * x[5] * x[8] -\n        0.5881 * x[2] * x[5] * x[9] - 0.9469 * x[2] * x[5] * x[10] -\n        0.6075 * x[2] * x[6] * x[7] - 0.9843 * x[2] * x[6] * x[8] +\n        0.6435 * x[2] * x[6] * x[9] +\n        0.8889 * x[2] * x[6] * x[10] - 0.064 * x[2] * x[7] * x[8] -\n        0.7728 * x[2] * x[7] * x[9] - 0.679 * x[2] * x[7] * x[10] +\n        0.6905 * x[2] * x[8] * x[9] +\n        0.7074 * x[2] * x[8] * x[10] - 0.3972 * x[2] * x[9] * x[10] -\n        0.4977 * x[3] * x[4] * x[5] - 0.5983 * x[3] * x[4] * x[6] -\n        0.4784 * x[3] * x[4] * x[7] - 0.4858 * x[3] * x[4] * x[8] +\n        0.2572 * x[3] * x[4] * x[9] - 0.0521 * x[3] * x[4] * x[10] +\n        0.7398 * x[3] * x[5] * x[6] +\n        0.2972 * x[3] * x[5] * x[7] +\n        0.7789 * x[3] * x[5] * x[8] +\n        0.5905 * x[3] * x[5] * x[9] +\n        0.7603 * x[3] * x[5] * x[10] - 0.5705 * x[3] * x[6] * x[7] +\n        0.9037 * x[3] * x[6] * x[8] +\n        0.4382 * x[3] * x[6] * x[9] - 0.7787 * x[3] * x[6] * x[10] +\n        0.9149 * x[3] * x[7] * x[8] +\n        0.2939 * x[3] * x[7] * x[9] +\n        0.1637 * x[3] * x[7] * x[10] - 0.9742 * x[3] * x[8] * x[9] -\n        0.4477 * x[3] * x[8] * x[10] + 0.6009 * x[3] * x[9] * x[10] -\n        0.3442 * x[4] * x[5] * x[6] + 0.1588 * x[4] * x[5] * x[7] -\n        0.9521 * x[4] * x[5] * x[8] + 0.3398 * x[4] * x[5] * x[9] -\n        0.6371 * x[4] * x[5] * x[10] - 0.4268 * x[4] * x[6] * x[7] +\n        0.3169 * x[4] * x[6] * x[8] +\n        0.1779 * x[4] * x[6] * x[9] - 0.8726 * x[4] * x[6] * x[10] -\n        0.7344 * x[4] * x[7] * x[8] +\n        0.4833 * x[4] * x[7] * x[9] +\n        0.0007 * x[4] * x[7] * x[10] - 0.9371 * x[4] * x[8] * x[9] +\n        0.9815 * x[4] * x[8] * x[10] - 0.9932 * x[4] * x[9] * x[10] +\n        0.3986 * x[5] * x[6] * x[7] +\n        0.5181 * x[5] * x[6] * x[8] - 0.4916 * x[5] * x[6] * x[9] -\n        0.3371 * x[5] * x[6] * x[10] +\n        0.1457 * x[5] * x[7] * x[8] +\n        0.9832 * x[5] * x[7] * x[9] - 0.0207 * x[5] * x[7] * x[10] +\n        0.1223 * x[5] * x[8] * x[9] +\n        0.2128 * x[5] * x[8] * x[10] - 0.8286 * x[5] * x[9] * x[10] -\n        0.4837 * x[6] * x[7] * x[8] - 0.0592 * x[6] * x[7] * x[9] +\n        0.6266 * x[6] * x[7] * x[10] +\n        0.4492 * x[6] * x[8] * x[9] +\n        0.9861 * x[6] * x[8] * x[10] - 0.8687 * x[6] * x[9] * x[10] -\n        0.8504 * x[7] * x[8] * x[9] + 0.6624 * x[7] * x[8] * x[10] -\n        0.1745 * x[7] * x[9] * x[10] +\n        0.3241 * x[8] * x[9] * x[10] +\n        0.15 * x[1] * x[2] * x[3] * x[4] - 0.7118 * x[1] * x[2] * x[3] * x[5] -\n        0.6134 * x[1] * x[2] * x[3] * x[6] +\n        0.3822 * x[1] * x[2] * x[3] * x[7] +\n        0.9004 * x[1] * x[2] * x[3] * x[8] - 0.7372 * x[1] * x[2] * x[3] * x[9] +\n        0.42 * x[1] * x[2] * x[3] * x[10] - 0.2405 * x[1] * x[2] * x[4] * x[5] -\n        0.204 * x[1] * x[2] * x[4] * x[6] - 0.998 * x[1] * x[2] * x[4] * x[7] -\n        0.1736 * x[1] * x[2] * x[4] * x[8] +\n        0.6076 * x[1] * x[2] * x[4] * x[9] +\n        0.7557 * x[1] * x[2] * x[4] * x[10] - 0.7184 * x[1] * x[2] * x[5] * x[6] -\n        0.9139 * x[1] * x[2] * x[5] * x[7] + 0.1313 * x[1] * x[2] * x[5] * x[8] -\n        0.8836 * x[1] * x[2] * x[5] * x[9] + 0.7427 * x[1] * x[2] * x[5] * x[10] -\n        0.3114 * x[1] * x[2] * x[6] * x[7] - 0.0203 * x[1] * x[2] * x[6] * x[8] -\n        0.4356 * x[1] * x[2] * x[6] * x[9] - 0.5229 * x[1] * x[2] * x[6] * x[10] +\n        0.0993 * x[1] * x[2] * x[7] * x[8] +\n        0.4277 * x[1] * x[2] * x[7] * x[9] +\n        0.8057 * x[1] * x[2] * x[7] * x[10] +\n        0.5147 * x[1] * x[2] * x[8] * x[9] +\n        0.0785 * x[1] * x[2] * x[8] * x[10] +\n        0.2918 * x[1] * x[2] * x[9] * x[10] +\n        0.5539 * x[1] * x[3] * x[4] * x[5] +\n        0.758 * x[1] * x[3] * x[4] * x[6] +\n        0.2055 * x[1] * x[3] * x[4] * x[7] - 0.877 * x[1] * x[3] * x[4] * x[8] -\n        0.1218 * x[1] * x[3] * x[4] * x[9] - 0.9826 * x[1] * x[3] * x[4] * x[10] -\n        0.4008 * x[1] * x[3] * x[5] * x[6] +\n        0.947 * x[1] * x[3] * x[5] * x[7] +\n        0.9103 * x[1] * x[3] * x[5] * x[8] - 0.5734 * x[1] * x[3] * x[5] * x[9] +\n        0.3479 * x[1] * x[3] * x[5] * x[10] +\n        0.0723 * x[1] * x[3] * x[6] * x[7] - 0.2806 * x[1] * x[3] * x[6] * x[8] -\n        0.9973 * x[1] * x[3] * x[6] * x[9] + 0.6989 * x[1] * x[3] * x[6] * x[10] -\n        0.1571 * x[1] * x[3] * x[7] * x[8] + 0.4957 * x[1] * x[3] * x[7] * x[9] -\n        0.9767 * x[1] * x[3] * x[7] * x[10] + 0.2287 * x[1] * x[3] * x[8] * x[9] -\n        0.1111 * x[1] * x[3] * x[8] * x[10] +\n        0.3253 * x[1] * x[3] * x[9] * x[10] +\n        0.3775 * x[1] * x[4] * x[5] * x[6] +\n        0.8783 * x[1] * x[4] * x[5] * x[7] +\n        0.4335 * x[1] * x[4] * x[5] * x[8] - 0.0967 * x[1] * x[4] * x[5] * x[9] +\n        0.269 * x[1] * x[4] * x[5] * x[10] - 0.5516 * x[1] * x[4] * x[6] * x[7] -\n        0.2037 * x[1] * x[4] * x[6] * x[8] + 0.6602 * x[1] * x[4] * x[6] * x[9] -\n        0.722 * x[1] * x[4] * x[6] * x[10] +\n        0.5119 * x[1] * x[4] * x[7] * x[8] +\n        0.586 * x[1] * x[4] * x[7] * x[9] - 0.5442 * x[1] * x[4] * x[7] * x[10] +\n        0.0562 * x[1] * x[4] * x[8] * x[9] - 0.7251 * x[1] * x[4] * x[8] * x[10] -\n        0.6521 * x[1] * x[4] * x[9] * x[10] - 0.7049 * x[1] * x[5] * x[6] * x[7] +\n        0.62 * x[1] * x[5] * x[6] * x[8] - 0.497 * x[1] * x[5] * x[6] * x[9] -\n        0.1799 * x[1] * x[5] * x[6] * x[10] +\n        0.9132 * x[1] * x[5] * x[7] * x[8] +\n        0.4395 * x[1] * x[5] * x[7] * x[9] +\n        0.6708 * x[1] * x[5] * x[7] * x[10] +\n        0.5537 * x[1] * x[5] * x[8] * x[9] +\n        0.0758 * x[1] * x[5] * x[8] * x[10] +\n        0.2226 * x[1] * x[5] * x[9] * x[10] +\n        0.3882 * x[1] * x[6] * x[7] * x[8] +\n        0.2014 * x[1] * x[6] * x[7] * x[9] - 0.8073 * x[1] * x[6] * x[7] * x[10] +\n        0.0984 * x[1] * x[6] * x[8] * x[9] - 0.4142 * x[1] * x[6] * x[8] * x[10] -\n        0.5883 * x[1] * x[6] * x[9] * x[10] +\n        0.6861 * x[1] * x[7] * x[8] * x[9] +\n        0.303 * x[1] * x[7] * x[8] * x[10] +\n        0.9262 * x[1] * x[7] * x[9] * x[10] +\n        0.2199 * x[1] * x[8] * x[9] * x[10] - 0.1922 * x[2] * x[3] * x[4] * x[5] -\n        0.7428 * x[2] * x[3] * x[4] * x[6] - 0.7244 * x[2] * x[3] * x[4] * x[7] -\n        0.5698 * x[2] * x[3] * x[4] * x[8] +\n        0.046 * x[2] * x[3] * x[4] * x[9] +\n        0.4195 * x[2] * x[3] * x[4] * x[10] +\n        0.0448 * x[2] * x[3] * x[5] * x[6] - 0.6311 * x[2] * x[3] * x[5] * x[7] +\n        0.7262 * x[2] * x[3] * x[5] * x[8] - 0.3714 * x[2] * x[3] * x[5] * x[9] -\n        0.9939 * x[2] * x[3] * x[5] * x[10] +\n        0.9992 * x[2] * x[3] * x[6] * x[7] +\n        0.7608 * x[2] * x[3] * x[6] * x[8] - 0.5125 * x[2] * x[3] * x[6] * x[9] +\n        0.0878 * x[2] * x[3] * x[6] * x[10] +\n        0.522 * x[2] * x[3] * x[7] * x[8] +\n        0.3632 * x[2] * x[3] * x[7] * x[9] - 0.1574 * x[2] * x[3] * x[7] * x[10] +\n        0.1895 * x[2] * x[3] * x[8] * x[9] - 0.1071 * x[2] * x[3] * x[8] * x[10] +\n        0.889 * x[2] * x[3] * x[9] * x[10] - 0.6673 * x[2] * x[4] * x[5] * x[6] +\n        0.9491 * x[2] * x[4] * x[5] * x[7] - 0.8262 * x[2] * x[4] * x[5] * x[8] -\n        0.6978 * x[2] * x[4] * x[5] * x[9] + 0.8198 * x[2] * x[4] * x[5] * x[10] -\n        0.5889 * x[2] * x[4] * x[6] * x[7] - 0.5569 * x[2] * x[4] * x[6] * x[8] -\n        0.7317 * x[2] * x[4] * x[6] * x[9] +\n        0.3949 * x[2] * x[4] * x[6] * x[10] +\n        0.9541 * x[2] * x[4] * x[7] * x[8] - 0.9943 * x[2] * x[4] * x[7] * x[9] -\n        0.0116 * x[2] * x[4] * x[7] * x[10] - 0.5047 * x[2] * x[4] * x[8] * x[9] +\n        0.8051 * x[2] * x[4] * x[8] * x[10] - 0.7914 * x[2] * x[4] * x[9] * x[10] +\n        0.5505 * x[2] * x[5] * x[6] * x[7] - 0.7908 * x[2] * x[5] * x[6] * x[8] +\n        0.2414 * x[2] * x[5] * x[6] * x[9] - 0.3313 * x[2] * x[5] * x[6] * x[10] +\n        0.9555 * x[2] * x[5] * x[7] * x[8] +\n        0.3839 * x[2] * x[5] * x[7] * x[9] +\n        0.6554 * x[2] * x[5] * x[7] * x[10] +\n        0.9363 * x[2] * x[5] * x[8] * x[9] - 0.4451 * x[2] * x[5] * x[8] * x[10] -\n        0.2679 * x[2] * x[5] * x[9] * x[10] - 0.6916 * x[2] * x[6] * x[7] * x[8] +\n        0.9618 * x[2] * x[6] * x[7] * x[9] +\n        0.8635 * x[2] * x[6] * x[7] * x[10] - 0.5314 * x[2] * x[6] * x[8] * x[9] -\n        0.7532 * x[2] * x[6] * x[8] * x[10] - 0.2676 * x[2] * x[6] * x[9] * x[10] +\n        0.6789 * x[2] * x[7] * x[8] * x[9] - 0.7484 * x[2] * x[7] * x[8] * x[10] +\n        0.9799 * x[2] * x[7] * x[9] * x[10] - 0.04 * x[2] * x[8] * x[9] * x[10] +\n        0.9229 * x[3] * x[4] * x[5] * x[6] +\n        0.9211 * x[3] * x[4] * x[5] * x[7] +\n        0.5065 * x[3] * x[4] * x[5] * x[8] +\n        0.2912 * x[3] * x[4] * x[5] * x[9] +\n        0.3298 * x[3] * x[4] * x[5] * x[10] +\n        0.7586 * x[3] * x[4] * x[6] * x[7] +\n        0.4593 * x[3] * x[4] * x[6] * x[8] +\n        0.3926 * x[3] * x[4] * x[6] * x[9] +\n        0.0687 * x[3] * x[4] * x[6] * x[10] +\n        0.4976 * x[3] * x[4] * x[7] * x[8] +\n        0.6535 * x[3] * x[4] * x[7] * x[9] - 0.9917 * x[3] * x[4] * x[7] * x[10] -\n        0.5502 * x[3] * x[4] * x[8] * x[9] - 0.1718 * x[3] * x[4] * x[8] * x[10] +\n        0.2573 * x[3] * x[4] * x[9] * x[10] - 0.9025 * x[3] * x[5] * x[6] * x[7] +\n        0.3264 * x[3] * x[5] * x[6] * x[8] - 0.6443 * x[3] * x[5] * x[6] * x[9] +\n        0.1642 * x[3] * x[5] * x[6] * x[10] +\n        0.9221 * x[3] * x[5] * x[7] * x[8] - 0.428 * x[3] * x[5] * x[7] * x[9] -\n        0.4399 * x[3] * x[5] * x[7] * x[10] +\n        0.7566 * x[3] * x[5] * x[8] * x[9] +\n        0.354 * x[3] * x[5] * x[8] * x[10] - 0.5276 * x[3] * x[5] * x[9] * x[10] -\n        0.6272 * x[3] * x[6] * x[7] * x[8] - 0.8758 * x[3] * x[6] * x[7] * x[9] -\n        0.6662 * x[3] * x[6] * x[7] * x[10] - 0.5727 * x[3] * x[6] * x[8] * x[9] -\n        0.1467 * x[3] * x[6] * x[8] * x[10] - 0.8066 * x[3] * x[6] * x[9] * x[10] -\n        0.53 * x[3] * x[7] * x[8] * x[9] - 0.7406 * x[3] * x[7] * x[8] * x[10] +\n        0.8858 * x[3] * x[7] * x[9] * x[10] - 0.3289 * x[3] * x[8] * x[9] * x[10] -\n        0.8604 * x[4] * x[5] * x[6] * x[7] - 0.0148 * x[4] * x[5] * x[6] * x[8] +\n        0.3933 * x[4] * x[5] * x[6] * x[9] +\n        0.4846 * x[4] * x[5] * x[6] * x[10] - 0.7567 * x[4] * x[5] * x[7] * x[8] +\n        0.083 * x[4] * x[5] * x[7] * x[9] - 0.0985 * x[4] * x[5] * x[7] * x[10] +\n        0.3703 * x[4] * x[5] * x[8] * x[9] +\n        0.6679 * x[4] * x[5] * x[8] * x[10] +\n        0.8643 * x[4] * x[5] * x[9] * x[10] +\n        0.533 * x[4] * x[6] * x[7] * x[8] +\n        0.1871 * x[4] * x[6] * x[7] * x[9] - 0.1905 * x[4] * x[6] * x[7] * x[10] +\n        0.9994 * x[4] * x[6] * x[8] * x[9] - 0.7306 * x[4] * x[6] * x[8] * x[10] -\n        0.2797 * x[4] * x[6] * x[9] * x[10] - 0.7742 * x[4] * x[7] * x[8] * x[9] +\n        0.2634 * x[4] * x[7] * x[8] * x[10] - 0.6882 * x[4] * x[7] * x[9] * x[10] -\n        0.1916 * x[4] * x[8] * x[9] * x[10] - 0.6292 * x[5] * x[6] * x[7] * x[8] +\n        0.3706 * x[5] * x[6] * x[7] * x[9] +\n        0.2252 * x[5] * x[6] * x[7] * x[10] - 0.5111 * x[5] * x[6] * x[8] * x[9] -\n        0.7106 * x[5] * x[6] * x[8] * x[10] +\n        0.436 * x[5] * x[6] * x[9] * x[10] +\n        0.6397 * x[5] * x[7] * x[8] * x[9] - 0.7626 * x[5] * x[7] * x[8] * x[10] -\n        0.7465 * x[5] * x[7] * x[9] * x[10] - 0.4273 * x[5] * x[8] * x[9] * x[10] +\n        0.9735 * x[6] * x[7] * x[8] * x[9] - 0.5091 * x[6] * x[7] * x[8] * x[10] -\n        0.0217 * x[6] * x[7] * x[9] * x[10] - 0.9406 * x[6] * x[8] * x[9] * x[10] -\n        0.5301 * x[7] * x[8] * x[9] * x[10] <= 38.337\n    )\n    e3 = replace_expr(e3, x)\n    JuMP.add_nonlinear_constraint(m, e3)\n    e4 = :(\n        0.802 * x[1] * x[2] - 0.8383 * x[1] * x[3] +\n        0.3569 * x[1] * x[4] +\n        0.0003 * x[1] * x[5] +\n        0.8089 * x[1] * x[6] - 0.875 * x[1] * x[7] + 0.4462 * x[1] * x[8] -\n        0.3338 * x[1] * x[9] + 0.1814 * x[1] * x[10] - 0.8771 * x[2] * x[3] -\n        0.9101 * x[2] * x[4] + 0.1635 * x[2] * x[5] - 0.1352 * x[2] * x[6] -\n        0.8026 * x[2] * x[7] +\n        0.9155 * x[2] * x[8] +\n        0.5442 * x[2] * x[9] - 0.7053 * x[2] * x[10] +\n        0.4455 * x[3] * x[4] +\n        0.9929 * x[3] * x[5] - 0.3529 * x[3] * x[6] - 0.8803 * x[3] * x[7] -\n        0.9694 * x[3] * x[8] +\n        0.7938 * x[3] * x[9] +\n        0.664 * x[3] * x[10] +\n        0.5083 * x[4] * x[5] - 0.3124 * x[4] * x[6] - 0.4061 * x[4] * x[7] +\n        0.0858 * x[4] * x[8] - 0.2714 * x[4] * x[9] - 0.8232 * x[4] * x[10] -\n        0.1146 * x[5] * x[6] +\n        0.9703 * x[5] * x[7] +\n        0.9858 * x[5] * x[8] +\n        0.859 * x[5] * x[9] +\n        0.0264 * x[5] * x[10] - 0.8325 * x[6] * x[7] - 0.2402 * x[6] * x[8] +\n        0.9962 * x[6] * x[9] - 0.612 * x[6] * x[10] - 0.7468 * x[7] * x[8] +\n        0.5066 * x[7] * x[9] +\n        0.5209 * x[7] * x[10] - 0.8096 * x[8] * x[9] + 0.2097 * x[8] * x[10] -\n        0.8223 * x[9] * x[10] +\n        0.8219 * x[1] +\n        0.8915 * x[2] +\n        0.4384 * x[3] +\n        0.0104 * x[4] - 0.6145 * x[5] + 0.3569 * x[6] - 0.0835 * x[7] -\n        0.1778 * x[8] + 0.1688 * x[9] - 0.6302 * x[10] +\n        (-0.9893 * x[1] * x[2] * x[3]) - 0.5615 * x[1] * x[2] * x[4] +\n        0.7985 * x[1] * x[2] * x[5] +\n        0.1976 * x[1] * x[2] * x[6] - 0.1837 * x[1] * x[2] * x[7] -\n        0.7994 * x[1] * x[2] * x[8] - 0.7895 * x[1] * x[2] * x[9] +\n        0.146 * x[1] * x[2] * x[10] - 0.5227 * x[1] * x[3] * x[4] +\n        0.3006 * x[1] * x[3] * x[5] +\n        0.8038 * x[1] * x[3] * x[6] - 0.0596 * x[1] * x[3] * x[7] +\n        0.152 * x[1] * x[3] * x[8] +\n        0.5178 * x[1] * x[3] * x[9] - 0.1747 * x[1] * x[3] * x[10] +\n        0.9976 * x[1] * x[4] * x[5] +\n        0.1196 * x[1] * x[4] * x[6] - 0.5697 * x[1] * x[4] * x[7] -\n        0.8498 * x[1] * x[4] * x[8] - 0.6921 * x[1] * x[4] * x[9] -\n        0.0832 * x[1] * x[4] * x[10] +\n        0.7875 * x[1] * x[5] * x[6] +\n        0.2374 * x[1] * x[5] * x[7] +\n        0.2773 * x[1] * x[5] * x[8] +\n        0.8304 * x[1] * x[5] * x[9] - 0.2771 * x[1] * x[5] * x[10] +\n        0.8288 * x[1] * x[6] * x[7] - 0.6953 * x[1] * x[6] * x[8] +\n        0.9491 * x[1] * x[6] * x[9] - 0.1701 * x[1] * x[6] * x[10] +\n        0.4837 * x[1] * x[7] * x[8] - 0.9392 * x[1] * x[7] * x[9] -\n        0.0295 * x[1] * x[7] * x[10] +\n        0.8232 * x[1] * x[8] * x[9] +\n        0.8049 * x[1] * x[8] * x[10] +\n        0.8403 * x[1] * x[9] * x[10] +\n        0.0402 * x[2] * x[3] * x[4] +\n        0.4708 * x[2] * x[3] * x[5] +\n        0.653 * x[2] * x[3] * x[6] +\n        0.4072 * x[2] * x[3] * x[7] +\n        0.3477 * x[2] * x[3] * x[8] - 0.8469 * x[2] * x[3] * x[9] -\n        0.0643 * x[2] * x[3] * x[10] +\n        0.9855 * x[2] * x[4] * x[5] +\n        0.169 * x[2] * x[4] * x[6] +\n        0.1277 * x[2] * x[4] * x[7] +\n        0.1701 * x[2] * x[4] * x[8] - 0.2288 * x[2] * x[4] * x[9] +\n        0.6269 * x[2] * x[4] * x[10] - 0.165 * x[2] * x[5] * x[6] -\n        0.3328 * x[2] * x[5] * x[7] +\n        0.0711 * x[2] * x[5] * x[8] +\n        0.8548 * x[2] * x[5] * x[9] +\n        0.4886 * x[2] * x[5] * x[10] - 0.4103 * x[2] * x[6] * x[7] +\n        0.1394 * x[2] * x[6] * x[8] - 0.3792 * x[2] * x[6] * x[9] -\n        0.061 * x[2] * x[6] * x[10] - 0.6923 * x[2] * x[7] * x[8] +\n        0.194 * x[2] * x[7] * x[9] - 0.2253 * x[2] * x[7] * x[10] -\n        0.6197 * x[2] * x[8] * x[9] - 0.799 * x[2] * x[8] * x[10] -\n        0.9851 * x[2] * x[9] * x[10] - 0.164 * x[3] * x[4] * x[5] +\n        0.1448 * x[3] * x[4] * x[6] +\n        0.0185 * x[3] * x[4] * x[7] +\n        0.3829 * x[3] * x[4] * x[8] +\n        0.2687 * x[3] * x[4] * x[9] +\n        0.9428 * x[3] * x[4] * x[10] +\n        0.9418 * x[3] * x[5] * x[6] +\n        0.4694 * x[3] * x[5] * x[7] +\n        0.8523 * x[3] * x[5] * x[8] - 0.87 * x[3] * x[5] * x[9] -\n        0.5796 * x[3] * x[5] * x[10] - 0.486 * x[3] * x[6] * x[7] +\n        0.3746 * x[3] * x[6] * x[8] +\n        0.4788 * x[3] * x[6] * x[9] +\n        0.0586 * x[3] * x[6] * x[10] +\n        0.1473 * x[3] * x[7] * x[8] +\n        0.2498 * x[3] * x[7] * x[9] - 0.6388 * x[3] * x[7] * x[10] +\n        0.2472 * x[3] * x[8] * x[9] - 0.3687 * x[3] * x[8] * x[10] +\n        0.3536 * x[3] * x[9] * x[10] +\n        0.0072 * x[4] * x[5] * x[6] - 0.5806 * x[4] * x[5] * x[7] -\n        0.5058 * x[4] * x[5] * x[8] - 0.116 * x[4] * x[5] * x[9] +\n        0.191 * x[4] * x[5] * x[10] +\n        0.3699 * x[4] * x[6] * x[7] +\n        0.3731 * x[4] * x[6] * x[8] +\n        0.0031 * x[4] * x[6] * x[9] +\n        0.9294 * x[4] * x[6] * x[10] - 0.6047 * x[4] * x[7] * x[8] +\n        0.2348 * x[4] * x[7] * x[9] +\n        0.8324 * x[4] * x[7] * x[10] +\n        0.6608 * x[4] * x[8] * x[9] - 0.1673 * x[4] * x[8] * x[10] -\n        0.9519 * x[4] * x[9] * x[10] + 0.8066 * x[5] * x[6] * x[7] -\n        0.9313 * x[5] * x[6] * x[8] - 0.0297 * x[5] * x[6] * x[9] -\n        0.7382 * x[5] * x[6] * x[10] - 0.672 * x[5] * x[7] * x[8] +\n        0.3061 * x[5] * x[7] * x[9] - 0.1984 * x[5] * x[7] * x[10] -\n        0.8696 * x[5] * x[8] * x[9] - 0.5035 * x[5] * x[8] * x[10] +\n        0.2835 * x[5] * x[9] * x[10] +\n        0.2576 * x[6] * x[7] * x[8] - 0.5016 * x[6] * x[7] * x[9] -\n        0.738 * x[6] * x[7] * x[10] - 0.6402 * x[6] * x[8] * x[9] +\n        0.2333 * x[6] * x[8] * x[10] - 0.1863 * x[6] * x[9] * x[10] +\n        0.6045 * x[7] * x[8] * x[9] - 0.5819 * x[7] * x[8] * x[10] -\n        0.809 * x[7] * x[9] * x[10] - 0.3189 * x[8] * x[9] * x[10] +\n        0.8521 * x[1] * x[2] * x[3] * x[5] - 0.8164 * x[1] * x[2] * x[3] * x[4] +\n        0.4163 * x[1] * x[2] * x[3] * x[6] +\n        0.6625 * x[1] * x[2] * x[3] * x[7] +\n        0.6022 * x[1] * x[2] * x[3] * x[8] +\n        0.1782 * x[1] * x[2] * x[3] * x[9] +\n        0.63 * x[1] * x[2] * x[3] * x[10] +\n        0.4385 * x[1] * x[2] * x[4] * x[5] +\n        0.9963 * x[1] * x[2] * x[4] * x[6] +\n        0.8737 * x[1] * x[2] * x[4] * x[7] +\n        0.382 * x[1] * x[2] * x[4] * x[8] +\n        0.4417 * x[1] * x[2] * x[4] * x[9] +\n        0.2669 * x[1] * x[2] * x[4] * x[10] +\n        0.7712 * x[1] * x[2] * x[5] * x[6] +\n        0.5226 * x[1] * x[2] * x[5] * x[7] +\n        0.3681 * x[1] * x[2] * x[5] * x[8] +\n        0.7255 * x[1] * x[2] * x[5] * x[9] - 0.4059 * x[1] * x[2] * x[5] * x[10] +\n        0.9658 * x[1] * x[2] * x[6] * x[7] - 0.8057 * x[1] * x[2] * x[6] * x[8] +\n        0.2716 * x[1] * x[2] * x[6] * x[9] - 0.8667 * x[1] * x[2] * x[6] * x[10] -\n        0.6541 * x[1] * x[2] * x[7] * x[8] - 0.0723 * x[1] * x[2] * x[7] * x[9] -\n        0.1218 * x[1] * x[2] * x[7] * x[10] + 0.6082 * x[1] * x[2] * x[8] * x[9] -\n        0.1423 * x[1] * x[2] * x[8] * x[10] +\n        0.5249 * x[1] * x[2] * x[9] * x[10] +\n        0.4167 * x[1] * x[3] * x[4] * x[5] - 0.507 * x[1] * x[3] * x[4] * x[6] +\n        0.8024 * x[1] * x[3] * x[4] * x[7] - 0.8732 * x[1] * x[3] * x[4] * x[8] -\n        0.9641 * x[1] * x[3] * x[4] * x[9] + 0.8948 * x[1] * x[3] * x[4] * x[10] -\n        0.0228 * x[1] * x[3] * x[5] * x[6] - 0.2308 * x[1] * x[3] * x[5] * x[7] -\n        0.8365 * x[1] * x[3] * x[5] * x[8] - 0.0407 * x[1] * x[3] * x[5] * x[9] -\n        0.6009 * x[1] * x[3] * x[5] * x[10] - 0.2916 * x[1] * x[3] * x[6] * x[7] -\n        0.1374 * x[1] * x[3] * x[6] * x[8] +\n        0.8125 * x[1] * x[3] * x[6] * x[9] +\n        0.8725 * x[1] * x[3] * x[6] * x[10] +\n        0.4909 * x[1] * x[3] * x[7] * x[8] +\n        0.9356 * x[1] * x[3] * x[7] * x[9] +\n        0.7571 * x[1] * x[3] * x[7] * x[10] - 0.4834 * x[1] * x[3] * x[8] * x[9] +\n        0.5875 * x[1] * x[3] * x[8] * x[10] - 0.8418 * x[1] * x[3] * x[9] * x[10] -\n        0.9637 * x[1] * x[4] * x[5] * x[6] - 0.3318 * x[1] * x[4] * x[5] * x[7] -\n        0.3304 * x[1] * x[4] * x[5] * x[8] + 0.0086 * x[1] * x[4] * x[5] * x[9] -\n        0.2382 * x[1] * x[4] * x[5] * x[10] + 0.7865 * x[1] * x[4] * x[6] * x[7] -\n        0.4775 * x[1] * x[4] * x[6] * x[8] - 0.0112 * x[1] * x[4] * x[6] * x[9] +\n        0.4793 * x[1] * x[4] * x[6] * x[10] +\n        0.2361 * x[1] * x[4] * x[7] * x[8] +\n        0.3537 * x[1] * x[4] * x[7] * x[9] +\n        0.4693 * x[1] * x[4] * x[7] * x[10] +\n        0.7316 * x[1] * x[4] * x[8] * x[9] +\n        0.3182 * x[1] * x[4] * x[8] * x[10] +\n        0.8041 * x[1] * x[4] * x[9] * x[10] - 0.4561 * x[1] * x[5] * x[6] * x[7] +\n        0.8676 * x[1] * x[5] * x[6] * x[8] - 0.7196 * x[1] * x[5] * x[6] * x[9] -\n        0.3273 * x[1] * x[5] * x[6] * x[10] - 0.0517 * x[1] * x[5] * x[7] * x[8] -\n        0.9975 * x[1] * x[5] * x[7] * x[9] - 0.5365 * x[1] * x[5] * x[7] * x[10] +\n        0.9168 * x[1] * x[5] * x[8] * x[9] +\n        0.7715 * x[1] * x[5] * x[8] * x[10] +\n        0.1129 * x[1] * x[5] * x[9] * x[10] - 0.3254 * x[1] * x[6] * x[7] * x[8] -\n        0.6267 * x[1] * x[6] * x[7] * x[9] - 0.2341 * x[1] * x[6] * x[7] * x[10] +\n        0.332 * x[1] * x[6] * x[8] * x[9] +\n        0.8281 * x[1] * x[6] * x[8] * x[10] - 0.1747 * x[1] * x[6] * x[9] * x[10] +\n        0.9767 * x[1] * x[7] * x[8] * x[9] - 0.6643 * x[1] * x[7] * x[8] * x[10] -\n        0.7506 * x[1] * x[7] * x[9] * x[10] + 0.0168 * x[1] * x[8] * x[9] * x[10] -\n        0.0513 * x[2] * x[3] * x[4] * x[5] - 0.6878 * x[2] * x[3] * x[4] * x[6] -\n        0.0265 * x[2] * x[3] * x[4] * x[7] +\n        0.6138 * x[2] * x[3] * x[4] * x[8] +\n        0.9757 * x[2] * x[3] * x[4] * x[9] - 0.8293 * x[2] * x[3] * x[4] * x[10] +\n        0.9219 * x[2] * x[3] * x[5] * x[6] +\n        0.403 * x[2] * x[3] * x[5] * x[7] - 0.0383 * x[2] * x[3] * x[5] * x[8] -\n        0.1156 * x[2] * x[3] * x[5] * x[9] - 0.9505 * x[2] * x[3] * x[5] * x[10] -\n        0.5166 * x[2] * x[3] * x[6] * x[7] - 0.7652 * x[2] * x[3] * x[6] * x[8] -\n        0.9915 * x[2] * x[3] * x[6] * x[9] - 0.477 * x[2] * x[3] * x[6] * x[10] +\n        0.1948 * x[2] * x[3] * x[7] * x[8] - 0.9361 * x[2] * x[3] * x[7] * x[9] -\n        0.0442 * x[2] * x[3] * x[7] * x[10] - 0.4517 * x[2] * x[3] * x[8] * x[9] -\n        0.8448 * x[2] * x[3] * x[8] * x[10] - 0.8462 * x[2] * x[3] * x[9] * x[10] +\n        0.7179 * x[2] * x[4] * x[5] * x[6] +\n        0.1438 * x[2] * x[4] * x[5] * x[7] - 0.831 * x[2] * x[4] * x[5] * x[8] +\n        0.1377 * x[2] * x[4] * x[5] * x[9] +\n        0.2404 * x[2] * x[4] * x[5] * x[10] +\n        0.4776 * x[2] * x[4] * x[6] * x[7] +\n        0.9781 * x[2] * x[4] * x[6] * x[8] - 0.4061 * x[2] * x[4] * x[6] * x[9] -\n        0.8912 * x[2] * x[4] * x[6] * x[10] +\n        0.9125 * x[2] * x[4] * x[7] * x[8] +\n        0.706 * x[2] * x[4] * x[7] * x[9] - 0.8906 * x[2] * x[4] * x[7] * x[10] +\n        0.942 * x[2] * x[4] * x[8] * x[9] - 0.0261 * x[2] * x[4] * x[8] * x[10] -\n        0.068 * x[2] * x[4] * x[9] * x[10] - 0.847 * x[2] * x[5] * x[6] * x[7] +\n        0.5746 * x[2] * x[5] * x[6] * x[8] - 0.3526 * x[2] * x[5] * x[6] * x[9] +\n        0.4389 * x[2] * x[5] * x[6] * x[10] +\n        0.4542 * x[2] * x[5] * x[7] * x[8] +\n        0.0367 * x[2] * x[5] * x[7] * x[9] - 0.3709 * x[2] * x[5] * x[7] * x[10] +\n        0.8193 * x[2] * x[5] * x[8] * x[9] +\n        0.5633 * x[2] * x[5] * x[8] * x[10] - 0.0382 * x[2] * x[5] * x[9] * x[10] -\n        0.959 * x[2] * x[6] * x[7] * x[8] - 0.7036 * x[2] * x[6] * x[7] * x[9] +\n        0.7485 * x[2] * x[6] * x[7] * x[10] - 0.0868 * x[2] * x[6] * x[8] * x[9] -\n        0.6044 * x[2] * x[6] * x[8] * x[10] +\n        0.3054 * x[2] * x[6] * x[9] * x[10] +\n        0.6064 * x[2] * x[7] * x[8] * x[9] - 0.5288 * x[2] * x[7] * x[8] * x[10] -\n        0.0285 * x[2] * x[7] * x[9] * x[10] - 0.5481 * x[2] * x[8] * x[9] * x[10] -\n        0.7647 * x[3] * x[4] * x[5] * x[6] + 0.6671 * x[3] * x[4] * x[5] * x[7] -\n        0.0921 * x[3] * x[4] * x[5] * x[8] + 0.7822 * x[3] * x[4] * x[5] * x[9] -\n        0.688 * x[3] * x[4] * x[5] * x[10] - 0.623 * x[3] * x[4] * x[6] * x[7] -\n        0.6958 * x[3] * x[4] * x[6] * x[8] +\n        0.2072 * x[3] * x[4] * x[6] * x[9] +\n        0.8573 * x[3] * x[4] * x[6] * x[10] +\n        0.9353 * x[3] * x[4] * x[7] * x[8] - 0.7581 * x[3] * x[4] * x[7] * x[9] -\n        0.6678 * x[3] * x[4] * x[7] * x[10] +\n        0.7244 * x[3] * x[4] * x[8] * x[9] +\n        0.497 * x[3] * x[4] * x[8] * x[10] +\n        0.8841 * x[3] * x[4] * x[9] * x[10] - 0.419 * x[3] * x[5] * x[6] * x[7] -\n        0.5639 * x[3] * x[5] * x[6] * x[8] +\n        0.3384 * x[3] * x[5] * x[6] * x[9] +\n        0.8517 * x[3] * x[5] * x[6] * x[10] +\n        0.2487 * x[3] * x[5] * x[7] * x[8] +\n        0.352 * x[3] * x[5] * x[7] * x[9] - 0.9956 * x[3] * x[5] * x[7] * x[10] +\n        0.1963 * x[3] * x[5] * x[8] * x[9] +\n        0.6505 * x[3] * x[5] * x[8] * x[10] +\n        0.8868 * x[3] * x[5] * x[9] * x[10] +\n        0.064 * x[3] * x[6] * x[7] * x[8] - 0.2306 * x[3] * x[6] * x[7] * x[9] +\n        0.3456 * x[3] * x[6] * x[7] * x[10] - 0.0124 * x[3] * x[6] * x[8] * x[9] -\n        0.7644 * x[3] * x[6] * x[8] * x[10] - 0.9407 * x[3] * x[6] * x[9] * x[10] -\n        0.5041 * x[3] * x[7] * x[8] * x[9] - 0.4612 * x[3] * x[7] * x[8] * x[10] +\n        0.6372 * x[3] * x[7] * x[9] * x[10] - 0.9423 * x[3] * x[8] * x[9] * x[10] +\n        0.4769 * x[4] * x[5] * x[6] * x[7] +\n        0.6691 * x[4] * x[5] * x[6] * x[8] - 0.6518 * x[4] * x[5] * x[6] * x[9] +\n        0.5892 * x[4] * x[5] * x[6] * x[10] +\n        0.1282 * x[4] * x[5] * x[7] * x[8] - 0.0097 * x[4] * x[5] * x[7] * x[9] -\n        0.0037 * x[4] * x[5] * x[7] * x[10] - 0.4974 * x[4] * x[5] * x[8] * x[9] -\n        0.1368 * x[4] * x[5] * x[8] * x[10] - 0.663 * x[4] * x[5] * x[9] * x[10] -\n        0.3471 * x[4] * x[6] * x[7] * x[8] - 0.9665 * x[4] * x[6] * x[7] * x[9] -\n        0.6331 * x[4] * x[6] * x[7] * x[10] - 0.0998 * x[4] * x[6] * x[8] * x[9] +\n        0.9348 * x[4] * x[6] * x[8] * x[10] - 0.5585 * x[4] * x[6] * x[9] * x[10] -\n        0.1588 * x[4] * x[7] * x[8] * x[9] + 0.3535 * x[4] * x[7] * x[8] * x[10] -\n        0.5013 * x[4] * x[7] * x[9] * x[10] +\n        0.5619 * x[4] * x[8] * x[9] * x[10] +\n        0.6594 * x[5] * x[6] * x[7] * x[8] - 0.6765 * x[5] * x[6] * x[7] * x[9] +\n        0.8412 * x[5] * x[6] * x[7] * x[10] - 0.6171 * x[5] * x[6] * x[8] * x[9] +\n        0.5953 * x[5] * x[6] * x[8] * x[10] +\n        0.9679 * x[5] * x[6] * x[9] * x[10] +\n        0.7684 * x[5] * x[7] * x[8] * x[9] +\n        0.3959 * x[5] * x[7] * x[8] * x[10] +\n        0.61 * x[5] * x[7] * x[9] * x[10] +\n        0.6235 * x[5] * x[8] * x[9] * x[10] - 0.2316 * x[6] * x[7] * x[8] * x[9] +\n        0.2738 * x[6] * x[7] * x[8] * x[10] - 0.5261 * x[6] * x[7] * x[9] * x[10] +\n        0.6011 * x[6] * x[8] * x[9] * x[10] +\n        0.421 * x[7] * x[8] * x[9] * x[10] <= 52.864\n    )\n    e4 = replace_expr(e4, x)\n    JuMP.add_nonlinear_constraint(m, e4)\n    e5 = :(\n        (-0.1375 * x[1] * x[2]) - 0.0134 * x[1] * x[3] - 0.7802 * x[1] * x[4] +\n        0.1529 * x[1] * x[5] - 0.7427 * x[1] * x[6] + 0.034 * x[1] * x[7] -\n        0.1986 * x[1] * x[8] + 0.1794 * x[1] * x[9] - 0.2451 * x[1] * x[10] -\n        0.1578 * x[2] * x[3] +\n        0.2522 * x[2] * x[4] +\n        0.562 * x[2] * x[5] +\n        0.9868 * x[2] * x[6] +\n        0.0232 * x[2] * x[7] +\n        0.5897 * x[2] * x[8] +\n        0.1998 * x[2] * x[9] - 0.9026 * x[2] * x[10] + 0.5954 * x[3] * x[4] -\n        0.0184 * x[3] * x[5] - 0.9132 * x[3] * x[6] - 0.0269 * x[3] * x[7] +\n        0.5776 * x[3] * x[8] +\n        0.2437 * x[3] * x[9] - 0.9638 * x[3] * x[10] + 0.4683 * x[4] * x[5] -\n        0.0524 * x[4] * x[6] + 0.865 * x[4] * x[7] - 0.0714 * x[4] * x[8] -\n        0.5196 * x[4] * x[9] +\n        0.2146 * x[4] * x[10] +\n        0.2514 * x[5] * x[6] - 0.9667 * x[5] * x[7] - 0.328 * x[5] * x[8] +\n        0.185 * x[5] * x[9] - 0.1588 * x[5] * x[10] - 0.6343 * x[6] * x[7] +\n        0.7847 * x[6] * x[8] +\n        0.2423 * x[6] * x[9] - 0.357 * x[6] * x[10] - 0.2066 * x[7] * x[8] -\n        0.1247 * x[7] * x[9] - 0.9086 * x[7] * x[10] - 0.4053 * x[8] * x[9] -\n        0.6526 * x[8] * x[10] - 0.7753 * x[9] * x[10] +\n        0.6139 * x[1] +\n        0.0606 * x[2] - 0.4917 * x[3] + 0.82 * x[4] - 0.8487 * x[5] - 0.4958 * x[6] -\n        0.4949 * x[7] +\n        0.7862 * x[8] +\n        0.7091 * x[9] - 0.6288 * x[10] + 0.496 * x[1] * x[2] * x[3] -\n        0.6663 * x[1] * x[2] * x[4] + 0.2055 * x[1] * x[2] * x[5] -\n        0.1878 * x[1] * x[2] * x[6] +\n        0.5555 * x[1] * x[2] * x[7] +\n        0.0953 * x[1] * x[2] * x[8] - 0.3364 * x[1] * x[2] * x[9] -\n        0.0269 * x[1] * x[2] * x[10] + 0.958 * x[1] * x[3] * x[4] -\n        0.871 * x[1] * x[3] * x[5] - 0.3226 * x[1] * x[3] * x[6] -\n        0.8197 * x[1] * x[3] * x[7] - 0.1814 * x[1] * x[3] * x[8] -\n        0.8487 * x[1] * x[3] * x[9] + 0.2095 * x[1] * x[3] * x[10] -\n        0.2767 * x[1] * x[4] * x[5] - 0.3641 * x[1] * x[4] * x[6] -\n        0.0245 * x[1] * x[4] * x[7] +\n        0.4568 * x[1] * x[4] * x[8] +\n        0.3128 * x[1] * x[4] * x[9] +\n        0.4853 * x[1] * x[4] * x[10] +\n        0.9152 * x[1] * x[5] * x[6] - 0.5344 * x[1] * x[5] * x[7] +\n        0.9609 * x[1] * x[5] * x[8] +\n        0.1761 * x[1] * x[5] * x[9] +\n        0.344 * x[1] * x[5] * x[10] - 0.3941 * x[1] * x[6] * x[7] +\n        0.8352 * x[1] * x[6] * x[8] - 0.8145 * x[1] * x[6] * x[9] +\n        0.4713 * x[1] * x[6] * x[10] - 0.2967 * x[1] * x[7] * x[8] +\n        0.1227 * x[1] * x[7] * x[9] +\n        0.6128 * x[1] * x[7] * x[10] - 0.5156 * x[1] * x[8] * x[9] -\n        0.1357 * x[1] * x[8] * x[10] + 0.4391 * x[1] * x[9] * x[10] -\n        0.916 * x[2] * x[3] * x[4] - 0.9986 * x[2] * x[3] * x[5] +\n        0.3863 * x[2] * x[3] * x[6] - 0.0975 * x[2] * x[3] * x[7] +\n        0.8211 * x[2] * x[3] * x[8] +\n        0.6467 * x[2] * x[3] * x[9] +\n        0.054 * x[2] * x[3] * x[10] +\n        0.0186 * x[2] * x[4] * x[5] +\n        0.3056 * x[2] * x[4] * x[6] +\n        0.6154 * x[2] * x[4] * x[7] +\n        0.0074 * x[2] * x[4] * x[8] +\n        0.4949 * x[2] * x[4] * x[9] +\n        0.6723 * x[2] * x[4] * x[10] +\n        0.3352 * x[2] * x[5] * x[6] +\n        0.0008 * x[2] * x[5] * x[7] +\n        0.5953 * x[2] * x[5] * x[8] - 0.6033 * x[2] * x[5] * x[9] +\n        0.5045 * x[2] * x[5] * x[10] - 0.269 * x[2] * x[6] * x[7] +\n        0.6495 * x[2] * x[6] * x[8] +\n        0.8248 * x[2] * x[6] * x[9] - 0.6363 * x[2] * x[6] * x[10] +\n        0.6394 * x[2] * x[7] * x[8] +\n        0.1078 * x[2] * x[7] * x[9] +\n        0.8161 * x[2] * x[7] * x[10] - 0.4037 * x[2] * x[8] * x[9] +\n        0.2088 * x[2] * x[8] * x[10] - 0.6234 * x[2] * x[9] * x[10] -\n        0.5131 * x[3] * x[4] * x[5] - 0.3159 * x[3] * x[4] * x[6] -\n        0.3376 * x[3] * x[4] * x[7] - 0.8348 * x[3] * x[4] * x[8] -\n        0.4805 * x[3] * x[4] * x[9] +\n        0.8075 * x[3] * x[4] * x[10] +\n        0.1383 * x[3] * x[5] * x[6] - 0.8913 * x[3] * x[5] * x[7] -\n        0.4103 * x[3] * x[5] * x[8] + 0.4252 * x[3] * x[5] * x[9] -\n        0.7663 * x[3] * x[5] * x[10] - 0.9546 * x[3] * x[6] * x[7] +\n        0.1664 * x[3] * x[6] * x[8] - 0.1357 * x[3] * x[6] * x[9] +\n        0.843 * x[3] * x[6] * x[10] - 0.4141 * x[3] * x[7] * x[8] +\n        0.9824 * x[3] * x[7] * x[9] +\n        0.8706 * x[3] * x[7] * x[10] +\n        0.3098 * x[3] * x[8] * x[9] - 0.8453 * x[3] * x[8] * x[10] +\n        0.4691 * x[3] * x[9] * x[10] - 0.4006 * x[4] * x[5] * x[6] +\n        0.3848 * x[4] * x[5] * x[7] +\n        0.9792 * x[4] * x[5] * x[8] - 0.4612 * x[4] * x[5] * x[9] -\n        0.9516 * x[4] * x[5] * x[10] - 0.4543 * x[4] * x[6] * x[7] +\n        0.5378 * x[4] * x[6] * x[8] - 0.8641 * x[4] * x[6] * x[9] +\n        0.6423 * x[4] * x[6] * x[10] - 0.8484 * x[4] * x[7] * x[8] -\n        0.3092 * x[4] * x[7] * x[9] +\n        0.6513 * x[4] * x[7] * x[10] +\n        0.0055 * x[4] * x[8] * x[9] +\n        0.0029 * x[4] * x[8] * x[10] +\n        0.9821 * x[4] * x[9] * x[10] +\n        0.477 * x[5] * x[6] * x[7] +\n        0.9873 * x[5] * x[6] * x[8] +\n        0.2413 * x[5] * x[6] * x[9] +\n        0.3671 * x[5] * x[6] * x[10] - 0.2025 * x[5] * x[7] * x[8] -\n        0.5689 * x[5] * x[7] * x[9] +\n        0.6425 * x[5] * x[7] * x[10] +\n        0.4043 * x[5] * x[8] * x[9] - 0.2493 * x[5] * x[8] * x[10] -\n        0.4849 * x[5] * x[9] * x[10] + 0.3103 * x[6] * x[7] * x[8] -\n        0.2523 * x[6] * x[7] * x[9] +\n        0.7611 * x[6] * x[7] * x[10] +\n        0.3698 * x[6] * x[8] * x[9] - 0.8896 * x[6] * x[8] * x[10] +\n        0.7634 * x[6] * x[9] * x[10] - 0.3524 * x[7] * x[8] * x[9] -\n        0.7996 * x[7] * x[8] * x[10] +\n        0.4739 * x[7] * x[9] * x[10] +\n        0.5203 * x[8] * x[9] * x[10] +\n        0.8851 * x[1] * x[2] * x[3] * x[4] +\n        0.9515 * x[1] * x[2] * x[3] * x[5] - 0.0604 * x[1] * x[2] * x[3] * x[6] -\n        0.8915 * x[1] * x[2] * x[3] * x[7] - 0.0968 * x[1] * x[2] * x[3] * x[8] -\n        0.5954 * x[1] * x[2] * x[3] * x[9] - 0.902 * x[1] * x[2] * x[3] * x[10] +\n        0.9315 * x[1] * x[2] * x[4] * x[5] +\n        0.4294 * x[1] * x[2] * x[4] * x[6] +\n        0.7398 * x[1] * x[2] * x[4] * x[7] - 0.6759 * x[1] * x[2] * x[4] * x[8] -\n        0.0166 * x[1] * x[2] * x[4] * x[9] + 0.3176 * x[1] * x[2] * x[4] * x[10] -\n        0.434 * x[1] * x[2] * x[5] * x[6] - 0.8219 * x[1] * x[2] * x[5] * x[7] -\n        0.9323 * x[1] * x[2] * x[5] * x[8] - 0.2384 * x[1] * x[2] * x[5] * x[9] +\n        0.2604 * x[1] * x[2] * x[5] * x[10] +\n        0.4567 * x[1] * x[2] * x[6] * x[7] +\n        0.7508 * x[1] * x[2] * x[6] * x[8] +\n        0.1384 * x[1] * x[2] * x[6] * x[9] - 0.5557 * x[1] * x[2] * x[6] * x[10] -\n        0.2385 * x[1] * x[2] * x[7] * x[8] +\n        0.0199 * x[1] * x[2] * x[7] * x[9] +\n        0.7632 * x[1] * x[2] * x[7] * x[10] - 0.9947 * x[1] * x[2] * x[8] * x[9] -\n        0.3877 * x[1] * x[2] * x[8] * x[10] + 0.8177 * x[1] * x[2] * x[9] * x[10] -\n        0.3725 * x[1] * x[3] * x[4] * x[5] - 0.3487 * x[1] * x[3] * x[4] * x[6] -\n        0.8521 * x[1] * x[3] * x[4] * x[7] + 0.7201 * x[1] * x[3] * x[4] * x[8] -\n        0.9411 * x[1] * x[3] * x[4] * x[9] - 0.6075 * x[1] * x[3] * x[4] * x[10] +\n        0.4446 * x[1] * x[3] * x[5] * x[6] - 0.6889 * x[1] * x[3] * x[5] * x[7] +\n        0.5368 * x[1] * x[3] * x[5] * x[8] +\n        0.9675 * x[1] * x[3] * x[5] * x[9] - 0.1386 * x[1] * x[3] * x[5] * x[10] -\n        0.4474 * x[1] * x[3] * x[6] * x[7] - 0.8875 * x[1] * x[3] * x[6] * x[8] -\n        0.7171 * x[1] * x[3] * x[6] * x[9] - 0.2179 * x[1] * x[3] * x[6] * x[10] -\n        0.317 * x[1] * x[3] * x[7] * x[8] - 0.0332 * x[1] * x[3] * x[7] * x[9] -\n        0.625 * x[1] * x[3] * x[7] * x[10] +\n        0.2913 * x[1] * x[3] * x[8] * x[9] +\n        0.0755 * x[1] * x[3] * x[8] * x[10] - 0.0178 * x[1] * x[3] * x[9] * x[10] -\n        0.215 * x[1] * x[4] * x[5] * x[6] - 0.7588 * x[1] * x[4] * x[5] * x[7] +\n        0.2416 * x[1] * x[4] * x[5] * x[8] - 0.1383 * x[1] * x[4] * x[5] * x[9] +\n        0.2175 * x[1] * x[4] * x[5] * x[10] - 0.5311 * x[1] * x[4] * x[6] * x[7] -\n        0.6322 * x[1] * x[4] * x[6] * x[8] - 0.8211 * x[1] * x[4] * x[6] * x[9] -\n        0.2421 * x[1] * x[4] * x[6] * x[10] - 0.9794 * x[1] * x[4] * x[7] * x[8] +\n        0.6866 * x[1] * x[4] * x[7] * x[9] +\n        0.144 * x[1] * x[4] * x[7] * x[10] +\n        0.935 * x[1] * x[4] * x[8] * x[9] - 0.7224 * x[1] * x[4] * x[8] * x[10] -\n        0.79 * x[1] * x[4] * x[9] * x[10] - 0.6261 * x[1] * x[5] * x[6] * x[7] -\n        0.59 * x[1] * x[5] * x[6] * x[8] +\n        0.8708 * x[1] * x[5] * x[6] * x[9] +\n        0.5423 * x[1] * x[5] * x[6] * x[10] +\n        0.3356 * x[1] * x[5] * x[7] * x[8] +\n        0.142 * x[1] * x[5] * x[7] * x[9] +\n        0.5119 * x[1] * x[5] * x[7] * x[10] +\n        0.7599 * x[1] * x[5] * x[8] * x[9] - 0.4022 * x[1] * x[5] * x[8] * x[10] +\n        0.4446 * x[1] * x[5] * x[9] * x[10] - 0.8166 * x[1] * x[6] * x[7] * x[8] +\n        0.6446 * x[1] * x[6] * x[7] * x[9] - 0.1284 * x[1] * x[6] * x[7] * x[10] -\n        0.3651 * x[1] * x[6] * x[8] * x[9] - 0.2567 * x[1] * x[6] * x[8] * x[10] +\n        0.1421 * x[1] * x[6] * x[9] * x[10] - 0.8825 * x[1] * x[7] * x[8] * x[9] -\n        0.6058 * x[1] * x[7] * x[8] * x[10] + 0.503 * x[1] * x[7] * x[9] * x[10] -\n        0.0462 * x[1] * x[8] * x[9] * x[10] - 0.717 * x[2] * x[3] * x[4] * x[5] +\n        0.0253 * x[2] * x[3] * x[4] * x[6] - 0.9476 * x[2] * x[3] * x[4] * x[7] -\n        0.3171 * x[2] * x[3] * x[4] * x[8] + 0.5691 * x[2] * x[3] * x[4] * x[9] -\n        0.3612 * x[2] * x[3] * x[4] * x[10] +\n        0.0488 * x[2] * x[3] * x[5] * x[6] +\n        0.423 * x[2] * x[3] * x[5] * x[7] +\n        0.2762 * x[2] * x[3] * x[5] * x[8] +\n        0.0221 * x[2] * x[3] * x[5] * x[9] +\n        0.3975 * x[2] * x[3] * x[5] * x[10] - 0.5281 * x[2] * x[3] * x[6] * x[7] -\n        0.722 * x[2] * x[3] * x[6] * x[8] - 0.1433 * x[2] * x[3] * x[6] * x[9] +\n        0.1957 * x[2] * x[3] * x[6] * x[10] +\n        0.7882 * x[2] * x[3] * x[7] * x[8] +\n        0.9988 * x[2] * x[3] * x[7] * x[9] +\n        0.8552 * x[2] * x[3] * x[7] * x[10] +\n        0.3681 * x[2] * x[3] * x[8] * x[9] - 0.6187 * x[2] * x[3] * x[8] * x[10] -\n        0.2208 * x[2] * x[3] * x[9] * x[10] - 0.8222 * x[2] * x[4] * x[5] * x[6] +\n        0.3944 * x[2] * x[4] * x[5] * x[7] +\n        0.4808 * x[2] * x[4] * x[5] * x[8] - 0.8075 * x[2] * x[4] * x[5] * x[9] -\n        0.8579 * x[2] * x[4] * x[5] * x[10] - 0.5665 * x[2] * x[4] * x[6] * x[7] -\n        0.895 * x[2] * x[4] * x[6] * x[8] - 0.3975 * x[2] * x[4] * x[6] * x[9] +\n        0.4934 * x[2] * x[4] * x[6] * x[10] +\n        0.2624 * x[2] * x[4] * x[7] * x[8] +\n        0.2931 * x[2] * x[4] * x[7] * x[9] - 0.8108 * x[2] * x[4] * x[7] * x[10] -\n        0.6769 * x[2] * x[4] * x[8] * x[9] - 0.2571 * x[2] * x[4] * x[8] * x[10] +\n        0.1818 * x[2] * x[4] * x[9] * x[10] - 0.5706 * x[2] * x[5] * x[6] * x[7] +\n        0.6166 * x[2] * x[5] * x[6] * x[8] - 0.7727 * x[2] * x[5] * x[6] * x[9] -\n        0.2887 * x[2] * x[5] * x[6] * x[10] - 0.6625 * x[2] * x[5] * x[7] * x[8] -\n        0.4673 * x[2] * x[5] * x[7] * x[9] + 0.9985 * x[2] * x[5] * x[7] * x[10] -\n        0.0513 * x[2] * x[5] * x[8] * x[9] - 0.243 * x[2] * x[5] * x[8] * x[10] +\n        0.9283 * x[2] * x[5] * x[9] * x[10] - 0.9095 * x[2] * x[6] * x[7] * x[8] +\n        0.0583 * x[2] * x[6] * x[7] * x[9] +\n        0.823 * x[2] * x[6] * x[7] * x[10] - 0.5969 * x[2] * x[6] * x[8] * x[9] +\n        0.8222 * x[2] * x[6] * x[8] * x[10] - 0.0405 * x[2] * x[6] * x[9] * x[10] -\n        0.131 * x[2] * x[7] * x[8] * x[9] - 0.3485 * x[2] * x[7] * x[8] * x[10] +\n        0.8998 * x[2] * x[7] * x[9] * x[10] - 0.2805 * x[2] * x[8] * x[9] * x[10] +\n        0.5217 * x[3] * x[4] * x[5] * x[6] - 0.933 * x[3] * x[4] * x[5] * x[7] +\n        0.9836 * x[3] * x[4] * x[5] * x[8] - 0.9513 * x[3] * x[4] * x[5] * x[9] -\n        0.9415 * x[3] * x[4] * x[5] * x[10] - 0.4551 * x[3] * x[4] * x[6] * x[7] +\n        0.4972 * x[3] * x[4] * x[6] * x[8] - 0.429 * x[3] * x[4] * x[6] * x[9] -\n        0.5465 * x[3] * x[4] * x[6] * x[10] - 0.1411 * x[3] * x[4] * x[7] * x[8] +\n        0.5444 * x[3] * x[4] * x[7] * x[9] +\n        0.1779 * x[3] * x[4] * x[7] * x[10] +\n        0.0402 * x[3] * x[4] * x[8] * x[9] - 0.9732 * x[3] * x[4] * x[8] * x[10] -\n        0.3496 * x[3] * x[4] * x[9] * x[10] - 0.2575 * x[3] * x[5] * x[6] * x[7] +\n        0.6694 * x[3] * x[5] * x[6] * x[8] - 0.4773 * x[3] * x[5] * x[6] * x[9] +\n        0.4754 * x[3] * x[5] * x[6] * x[10] - 0.9142 * x[3] * x[5] * x[7] * x[8] +\n        0.6845 * x[3] * x[5] * x[7] * x[9] - 0.7219 * x[3] * x[5] * x[7] * x[10] +\n        0.7798 * x[3] * x[5] * x[8] * x[9] +\n        0.0733 * x[3] * x[5] * x[8] * x[10] - 0.7376 * x[3] * x[5] * x[9] * x[10] +\n        0.0256 * x[3] * x[6] * x[7] * x[8] - 0.2386 * x[3] * x[6] * x[7] * x[9] +\n        0.8016 * x[3] * x[6] * x[7] * x[10] +\n        0.6794 * x[3] * x[6] * x[8] * x[9] +\n        0.6011 * x[3] * x[6] * x[8] * x[10] - 0.1622 * x[3] * x[6] * x[9] * x[10] -\n        0.0369 * x[3] * x[7] * x[8] * x[9] - 0.5992 * x[3] * x[7] * x[8] * x[10] +\n        0.9241 * x[3] * x[7] * x[9] * x[10] +\n        0.9873 * x[3] * x[8] * x[9] * x[10] +\n        0.5992 * x[4] * x[5] * x[6] * x[7] +\n        0.8133 * x[4] * x[5] * x[6] * x[8] +\n        0.4239 * x[4] * x[5] * x[6] * x[9] - 0.1981 * x[4] * x[5] * x[6] * x[10] +\n        0.5006 * x[4] * x[5] * x[7] * x[8] - 0.5385 * x[4] * x[5] * x[7] * x[9] +\n        0.1593 * x[4] * x[5] * x[7] * x[10] - 0.0871 * x[4] * x[5] * x[8] * x[9] -\n        0.9382 * x[4] * x[5] * x[8] * x[10] - 0.0148 * x[4] * x[5] * x[9] * x[10] -\n        0.4904 * x[4] * x[6] * x[7] * x[8] + 0.5096 * x[4] * x[6] * x[7] * x[9] -\n        0.4809 * x[4] * x[6] * x[7] * x[10] - 0.4848 * x[4] * x[6] * x[8] * x[9] +\n        0.3062 * x[4] * x[6] * x[8] * x[10] +\n        0.9318 * x[4] * x[6] * x[9] * x[10] - 0.1853 * x[4] * x[7] * x[8] * x[9] +\n        0.5946 * x[4] * x[7] * x[8] * x[10] - 0.9998 * x[4] * x[7] * x[9] * x[10] +\n        0.054 * x[4] * x[8] * x[9] * x[10] +\n        0.9006 * x[5] * x[6] * x[7] * x[8] - 0.322 * x[5] * x[6] * x[7] * x[9] -\n        0.4127 * x[5] * x[6] * x[7] * x[10] - 0.6934 * x[5] * x[6] * x[8] * x[9] +\n        0.408 * x[5] * x[6] * x[8] * x[10] - 0.6923 * x[5] * x[6] * x[9] * x[10] -\n        0.0869 * x[5] * x[7] * x[8] * x[9] - 0.0219 * x[5] * x[7] * x[8] * x[10] +\n        0.4814 * x[5] * x[7] * x[9] * x[10] - 0.0782 * x[5] * x[8] * x[9] * x[10] -\n        0.3978 * x[6] * x[7] * x[8] * x[9] - 0.0586 * x[6] * x[7] * x[8] * x[10] +\n        0.8491 * x[6] * x[7] * x[9] * x[10] - 0.9975 * x[6] * x[8] * x[9] * x[10] +\n        0.5027 * x[7] * x[8] * x[9] * x[10] <= 85.414\n    )\n    e5 = replace_expr(e5, x)\n    JuMP.add_nonlinear_constraint(m, e5)\n    e6 = :(\n        (-0.4481 * x[1] * x[2]) - 0.0269 * x[1] * x[3] - 0.1364 * x[1] * x[4] -\n        0.9192 * x[1] * x[5] +\n        0.5189 * x[1] * x[6] +\n        0.3404 * x[1] * x[7] +\n        0.1516 * x[1] * x[8] +\n        0.4074 * x[1] * x[9] - 0.3842 * x[1] * x[10] + 0.4361 * x[2] * x[3] -\n        0.6147 * x[2] * x[4] - 0.8 * x[2] * x[5] + 0.1892 * x[2] * x[6] -\n        0.8637 * x[2] * x[7] +\n        0.3065 * x[2] * x[8] +\n        0.2325 * x[2] * x[9] +\n        0.2648 * x[2] * x[10] +\n        0.3826 * x[3] * x[4] +\n        0.6438 * x[3] * x[5] - 0.5217 * x[3] * x[6] +\n        0.3787 * x[3] * x[7] +\n        0.7293 * x[3] * x[8] - 0.1202 * x[3] * x[9] +\n        0.5314 * x[3] * x[10] +\n        0.2886 * x[4] * x[5] - 0.4004 * x[4] * x[6] - 0.3376 * x[4] * x[7] -\n        0.9079 * x[4] * x[8] - 0.4125 * x[4] * x[9] +\n        0.8876 * x[4] * x[10] +\n        0.3379 * x[5] * x[6] - 0.2619 * x[5] * x[7] - 0.7405 * x[5] * x[8] +\n        0.1524 * x[5] * x[9] +\n        0.8941 * x[5] * x[10] +\n        0.2131 * x[6] * x[7] - 0.3442 * x[6] * x[8] + 0.5042 * x[6] * x[9] -\n        0.931 * x[6] * x[10] + 0.6521 * x[7] * x[8] - 0.3237 * x[7] * x[9] +\n        0.27 * x[7] * x[10] +\n        0.2362 * x[8] * x[9] +\n        0.5923 * x[8] * x[10] +\n        0.986 * x[9] * x[10] - 0.0644 * x[1] + 0.6635 * x[2] - 0.7397 * x[3] +\n        0.942 * x[4] - 0.6956 * x[5] +\n        0.7189 * x[6] +\n        0.2027 * x[7] +\n        0.7485 * x[8] +\n        0.4619 * x[9] +\n        0.0043 * x[10] +\n        (-0.4047 * x[1] * x[2] * x[3]) - 0.8727 * x[1] * x[2] * x[4] -\n        0.014 * x[1] * x[2] * x[5] - 0.9627 * x[1] * x[2] * x[6] -\n        0.15 * x[1] * x[2] * x[7] - 0.7809 * x[1] * x[2] * x[8] -\n        0.4473 * x[1] * x[2] * x[9] +\n        0.4151 * x[1] * x[2] * x[10] +\n        0.0728 * x[1] * x[3] * x[4] - 0.2027 * x[1] * x[3] * x[5] -\n        0.4616 * x[1] * x[3] * x[6] +\n        0.1176 * x[1] * x[3] * x[7] +\n        0.108 * x[1] * x[3] * x[8] +\n        0.3765 * x[1] * x[3] * x[9] +\n        0.305 * x[1] * x[3] * x[10] - 0.5298 * x[1] * x[4] * x[5] -\n        0.0275 * x[1] * x[4] * x[6] - 0.8101 * x[1] * x[4] * x[7] -\n        0.4449 * x[1] * x[4] * x[8] - 0.8782 * x[1] * x[4] * x[9] -\n        0.6795 * x[1] * x[4] * x[10] - 0.8655 * x[1] * x[5] * x[6] -\n        0.6457 * x[1] * x[5] * x[7] + 0.8807 * x[1] * x[5] * x[8] -\n        0.7634 * x[1] * x[5] * x[9] + 0.217 * x[1] * x[5] * x[10] -\n        0.0549 * x[1] * x[6] * x[7] - 0.9422 * x[1] * x[6] * x[8] -\n        0.9389 * x[1] * x[6] * x[9] - 0.2805 * x[1] * x[6] * x[10] -\n        0.3906 * x[1] * x[7] * x[8] +\n        0.8925 * x[1] * x[7] * x[9] +\n        0.359 * x[1] * x[7] * x[10] - 0.3714 * x[1] * x[8] * x[9] -\n        0.5488 * x[1] * x[8] * x[10] +\n        0.1483 * x[1] * x[9] * x[10] +\n        0.225 * x[2] * x[3] * x[4] +\n        0.7272 * x[2] * x[3] * x[5] - 0.8881 * x[2] * x[3] * x[6] -\n        0.0211 * x[2] * x[3] * x[7] - 0.4108 * x[2] * x[3] * x[8] -\n        0.0434 * x[2] * x[3] * x[9] - 0.7799 * x[2] * x[3] * x[10] -\n        0.4614 * x[2] * x[4] * x[5] - 0.0865 * x[2] * x[4] * x[6] +\n        0.3207 * x[2] * x[4] * x[7] +\n        0.0431 * x[2] * x[4] * x[8] +\n        0.8559 * x[2] * x[4] * x[9] - 0.2257 * x[2] * x[4] * x[10] -\n        0.1022 * x[2] * x[5] * x[6] - 0.5768 * x[2] * x[5] * x[7] -\n        0.8797 * x[2] * x[5] * x[8] +\n        0.3955 * x[2] * x[5] * x[9] +\n        0.7964 * x[2] * x[5] * x[10] +\n        0.2734 * x[2] * x[6] * x[7] +\n        0.0895 * x[2] * x[6] * x[8] - 0.4146 * x[2] * x[6] * x[9] +\n        0.9077 * x[2] * x[6] * x[10] - 0.1895 * x[2] * x[7] * x[8] +\n        0.994 * x[2] * x[7] * x[9] - 0.6899 * x[2] * x[7] * x[10] +\n        0.9394 * x[2] * x[8] * x[9] - 0.2503 * x[2] * x[8] * x[10] -\n        0.2187 * x[2] * x[9] * x[10] - 0.1793 * x[3] * x[4] * x[5] +\n        0.9029 * x[3] * x[4] * x[6] +\n        0.1218 * x[3] * x[4] * x[7] +\n        0.2453 * x[3] * x[4] * x[8] +\n        0.7306 * x[3] * x[4] * x[9] - 0.2001 * x[3] * x[4] * x[10] +\n        0.7936 * x[3] * x[5] * x[6] - 0.7984 * x[3] * x[5] * x[7] -\n        0.589 * x[3] * x[5] * x[8] + 0.6958 * x[3] * x[5] * x[9] -\n        0.0455 * x[3] * x[5] * x[10] - 0.267 * x[3] * x[6] * x[7] +\n        0.8622 * x[3] * x[6] * x[8] - 0.5897 * x[3] * x[6] * x[9] +\n        0.1178 * x[3] * x[6] * x[10] +\n        0.8772 * x[3] * x[7] * x[8] - 0.7239 * x[3] * x[7] * x[9] +\n        0.8153 * x[3] * x[7] * x[10] +\n        0.9875 * x[3] * x[8] * x[9] +\n        0.0661 * x[3] * x[8] * x[10] +\n        0.0747 * x[3] * x[9] * x[10] - 0.9466 * x[4] * x[5] * x[6] +\n        0.9993 * x[4] * x[5] * x[7] +\n        0.4921 * x[4] * x[5] * x[8] +\n        0.1736 * x[4] * x[5] * x[9] - 0.5295 * x[4] * x[5] * x[10] -\n        0.5874 * x[4] * x[6] * x[7] - 0.9963 * x[4] * x[6] * x[8] -\n        0.6875 * x[4] * x[6] * x[9] - 0.6238 * x[4] * x[6] * x[10] +\n        0.0738 * x[4] * x[7] * x[8] +\n        0.3122 * x[4] * x[7] * x[9] +\n        0.9116 * x[4] * x[7] * x[10] - 0.7073 * x[4] * x[8] * x[9] +\n        0.3956 * x[4] * x[8] * x[10] +\n        0.6408 * x[4] * x[9] * x[10] +\n        0.906 * x[5] * x[6] * x[7] +\n        0.4384 * x[5] * x[6] * x[8] - 0.0051 * x[5] * x[6] * x[9] +\n        0.689 * x[5] * x[6] * x[10] +\n        0.8015 * x[5] * x[7] * x[8] - 0.1671 * x[5] * x[7] * x[9] +\n        0.1501 * x[5] * x[7] * x[10] - 0.6129 * x[5] * x[8] * x[9] -\n        0.4673 * x[5] * x[8] * x[10] - 0.2172 * x[5] * x[9] * x[10] +\n        0.5448 * x[6] * x[7] * x[8] +\n        0.5743 * x[6] * x[7] * x[9] - 0.2467 * x[6] * x[7] * x[10] +\n        0.8448 * x[6] * x[8] * x[9] - 0.784 * x[6] * x[8] * x[10] -\n        0.2975 * x[6] * x[9] * x[10] - 0.9803 * x[7] * x[8] * x[9] +\n        0.9786 * x[7] * x[8] * x[10] +\n        0.1967 * x[7] * x[9] * x[10] - 0.9423 * x[8] * x[9] * x[10] +\n        0.4814 * x[1] * x[2] * x[3] * x[4] +\n        0.1703 * x[1] * x[2] * x[3] * x[5] +\n        0.511 * x[1] * x[2] * x[3] * x[6] +\n        0.9122 * x[1] * x[2] * x[3] * x[7] +\n        0.1772 * x[1] * x[2] * x[3] * x[8] +\n        0.6143 * x[1] * x[2] * x[3] * x[9] +\n        0.0351 * x[1] * x[2] * x[3] * x[10] - 0.6117 * x[1] * x[2] * x[4] * x[5] +\n        0.6903 * x[1] * x[2] * x[4] * x[6] +\n        0.8105 * x[1] * x[2] * x[4] * x[7] +\n        0.3583 * x[1] * x[2] * x[4] * x[8] +\n        0.296 * x[1] * x[2] * x[4] * x[9] +\n        0.6876 * x[1] * x[2] * x[4] * x[10] - 0.393 * x[1] * x[2] * x[5] * x[6] -\n        0.3819 * x[1] * x[2] * x[5] * x[7] - 0.3434 * x[1] * x[2] * x[5] * x[8] +\n        0.498 * x[1] * x[2] * x[5] * x[9] +\n        0.3344 * x[1] * x[2] * x[5] * x[10] - 0.6604 * x[1] * x[2] * x[6] * x[7] +\n        0.1448 * x[1] * x[2] * x[6] * x[8] - 0.2679 * x[1] * x[2] * x[6] * x[9] -\n        0.9699 * x[1] * x[2] * x[6] * x[10] + 0.4874 * x[1] * x[2] * x[7] * x[8] -\n        0.2642 * x[1] * x[2] * x[7] * x[9] +\n        0.0611 * x[1] * x[2] * x[7] * x[10] +\n        0.1584 * x[1] * x[2] * x[8] * x[9] - 0.3937 * x[1] * x[2] * x[8] * x[10] +\n        0.9029 * x[1] * x[2] * x[9] * x[10] - 0.3443 * x[1] * x[3] * x[4] * x[5] +\n        0.1484 * x[1] * x[3] * x[4] * x[6] +\n        0.4433 * x[1] * x[3] * x[4] * x[7] +\n        0.3218 * x[1] * x[3] * x[4] * x[8] - 0.2226 * x[1] * x[3] * x[4] * x[9] +\n        0.3904 * x[1] * x[3] * x[4] * x[10] +\n        0.6146 * x[1] * x[3] * x[5] * x[6] - 0.8245 * x[1] * x[3] * x[5] * x[7] +\n        0.8728 * x[1] * x[3] * x[5] * x[8] - 0.3059 * x[1] * x[3] * x[5] * x[9] +\n        0.8877 * x[1] * x[3] * x[5] * x[10] +\n        0.1024 * x[1] * x[3] * x[6] * x[7] +\n        0.1653 * x[1] * x[3] * x[6] * x[8] - 0.3166 * x[1] * x[3] * x[6] * x[9] +\n        0.13 * x[1] * x[3] * x[6] * x[10] - 0.4146 * x[1] * x[3] * x[7] * x[8] -\n        0.0127 * x[1] * x[3] * x[7] * x[9] +\n        0.4993 * x[1] * x[3] * x[7] * x[10] +\n        0.6925 * x[1] * x[3] * x[8] * x[9] - 0.0677 * x[1] * x[3] * x[8] * x[10] -\n        0.2175 * x[1] * x[3] * x[9] * x[10] + 0.828 * x[1] * x[4] * x[5] * x[6] -\n        0.1967 * x[1] * x[4] * x[5] * x[7] + 0.4211 * x[1] * x[4] * x[5] * x[8] -\n        0.2497 * x[1] * x[4] * x[5] * x[9] + 0.462 * x[1] * x[4] * x[5] * x[10] -\n        0.7244 * x[1] * x[4] * x[6] * x[7] + 0.5054 * x[1] * x[4] * x[6] * x[8] -\n        0.6719 * x[1] * x[4] * x[6] * x[9] +\n        0.2062 * x[1] * x[4] * x[6] * x[10] +\n        0.4854 * x[1] * x[4] * x[7] * x[8] - 0.8001 * x[1] * x[4] * x[7] * x[9] +\n        0.4813 * x[1] * x[4] * x[7] * x[10] - 0.2475 * x[1] * x[4] * x[8] * x[9] +\n        0.659 * x[1] * x[4] * x[8] * x[10] - 0.8335 * x[1] * x[4] * x[9] * x[10] +\n        0.2203 * x[1] * x[5] * x[6] * x[7] +\n        0.8903 * x[1] * x[5] * x[6] * x[8] - 0.7647 * x[1] * x[5] * x[6] * x[9] +\n        0.5881 * x[1] * x[5] * x[6] * x[10] - 0.3864 * x[1] * x[5] * x[7] * x[8] -\n        0.5257 * x[1] * x[5] * x[7] * x[9] - 0.5672 * x[1] * x[5] * x[7] * x[10] -\n        0.0589 * x[1] * x[5] * x[8] * x[9] - 0.1993 * x[1] * x[5] * x[8] * x[10] -\n        0.4537 * x[1] * x[5] * x[9] * x[10] +\n        0.7725 * x[1] * x[6] * x[7] * x[8] +\n        0.1709 * x[1] * x[6] * x[7] * x[9] - 0.0676 * x[1] * x[6] * x[7] * x[10] -\n        0.6013 * x[1] * x[6] * x[8] * x[9] + 0.8428 * x[1] * x[6] * x[8] * x[10] -\n        0.6915 * x[1] * x[6] * x[9] * x[10] +\n        0.8838 * x[1] * x[7] * x[8] * x[9] +\n        0.9223 * x[1] * x[7] * x[8] * x[10] +\n        0.5193 * x[1] * x[7] * x[9] * x[10] +\n        0.3182 * x[1] * x[8] * x[9] * x[10] - 0.221 * x[2] * x[3] * x[4] * x[5] +\n        0.6815 * x[2] * x[3] * x[4] * x[6] - 0.0966 * x[2] * x[3] * x[4] * x[7] -\n        0.1797 * x[2] * x[3] * x[4] * x[8] - 0.7994 * x[2] * x[3] * x[4] * x[9] +\n        0.6868 * x[2] * x[3] * x[4] * x[10] +\n        0.4518 * x[2] * x[3] * x[5] * x[6] +\n        0.8514 * x[2] * x[3] * x[5] * x[7] +\n        0.6759 * x[2] * x[3] * x[5] * x[8] - 0.6871 * x[2] * x[3] * x[5] * x[9] +\n        0.6584 * x[2] * x[3] * x[5] * x[10] - 0.2458 * x[2] * x[3] * x[6] * x[7] +\n        0.6472 * x[2] * x[3] * x[6] * x[8] - 0.3359 * x[2] * x[3] * x[6] * x[9] -\n        0.863 * x[2] * x[3] * x[6] * x[10] +\n        0.1233 * x[2] * x[3] * x[7] * x[8] +\n        0.6612 * x[2] * x[3] * x[7] * x[9] +\n        0.2013 * x[2] * x[3] * x[7] * x[10] +\n        0.6938 * x[2] * x[3] * x[8] * x[9] - 0.7642 * x[2] * x[3] * x[8] * x[10] +\n        0.3951 * x[2] * x[3] * x[9] * x[10] - 0.3524 * x[2] * x[4] * x[5] * x[6] -\n        0.9741 * x[2] * x[4] * x[5] * x[7] + 0.6833 * x[2] * x[4] * x[5] * x[8] -\n        0.4752 * x[2] * x[4] * x[5] * x[9] - 0.3353 * x[2] * x[4] * x[5] * x[10] +\n        0.9698 * x[2] * x[4] * x[6] * x[7] - 0.9741 * x[2] * x[4] * x[6] * x[8] -\n        0.1607 * x[2] * x[4] * x[6] * x[9] +\n        0.7583 * x[2] * x[4] * x[6] * x[10] +\n        0.803 * x[2] * x[4] * x[7] * x[8] - 0.4884 * x[2] * x[4] * x[7] * x[9] +\n        0.459 * x[2] * x[4] * x[7] * x[10] +\n        0.7593 * x[2] * x[4] * x[8] * x[9] +\n        0.3966 * x[2] * x[4] * x[8] * x[10] +\n        0.2922 * x[2] * x[4] * x[9] * x[10] - 0.8999 * x[2] * x[5] * x[6] * x[7] -\n        0.3177 * x[2] * x[5] * x[6] * x[8] + 0.2054 * x[2] * x[5] * x[6] * x[9] -\n        0.0702 * x[2] * x[5] * x[6] * x[10] - 0.1661 * x[2] * x[5] * x[7] * x[8] +\n        0.949 * x[2] * x[5] * x[7] * x[9] +\n        0.8319 * x[2] * x[5] * x[7] * x[10] - 0.2402 * x[2] * x[5] * x[8] * x[9] +\n        0.3515 * x[2] * x[5] * x[8] * x[10] - 0.6997 * x[2] * x[5] * x[9] * x[10] +\n        0.7683 * x[2] * x[6] * x[7] * x[8] - 0.6599 * x[2] * x[6] * x[7] * x[9] +\n        0.1491 * x[2] * x[6] * x[7] * x[10] +\n        0.4292 * x[2] * x[6] * x[8] * x[9] +\n        0.5753 * x[2] * x[6] * x[8] * x[10] - 0.2752 * x[2] * x[6] * x[9] * x[10] -\n        0.7367 * x[2] * x[7] * x[8] * x[9] +\n        0.2302 * x[2] * x[7] * x[8] * x[10] +\n        0.9897 * x[2] * x[7] * x[9] * x[10] - 0.5626 * x[2] * x[8] * x[9] * x[10] -\n        0.3133 * x[3] * x[4] * x[5] * x[6] - 0.113 * x[3] * x[4] * x[5] * x[7] +\n        0.3194 * x[3] * x[4] * x[5] * x[8] +\n        0.4135 * x[3] * x[4] * x[5] * x[9] - 0.4578 * x[3] * x[4] * x[5] * x[10] -\n        0.4937 * x[3] * x[4] * x[6] * x[7] +\n        0.2359 * x[3] * x[4] * x[6] * x[8] +\n        0.2791 * x[3] * x[4] * x[6] * x[9] - 0.8753 * x[3] * x[4] * x[6] * x[10] -\n        0.8146 * x[3] * x[4] * x[7] * x[8] +\n        0.3627 * x[3] * x[4] * x[7] * x[9] +\n        0.6978 * x[3] * x[4] * x[7] * x[10] - 0.1502 * x[3] * x[4] * x[8] * x[9] +\n        0.8516 * x[3] * x[4] * x[8] * x[10] - 0.8482 * x[3] * x[4] * x[9] * x[10] -\n        0.7326 * x[3] * x[5] * x[6] * x[7] + 0.3347 * x[3] * x[5] * x[6] * x[8] -\n        0.3677 * x[3] * x[5] * x[6] * x[9] +\n        0.8576 * x[3] * x[5] * x[6] * x[10] +\n        0.8423 * x[3] * x[5] * x[7] * x[8] +\n        0.4222 * x[3] * x[5] * x[7] * x[9] +\n        0.3568 * x[3] * x[5] * x[7] * x[10] +\n        0.1597 * x[3] * x[5] * x[8] * x[9] +\n        0.2008 * x[3] * x[5] * x[8] * x[10] +\n        0.6678 * x[3] * x[5] * x[9] * x[10] - 0.7699 * x[3] * x[6] * x[7] * x[8] +\n        0.6536 * x[3] * x[6] * x[7] * x[9] - 0.4263 * x[3] * x[6] * x[7] * x[10] +\n        0.5469 * x[3] * x[6] * x[8] * x[9] +\n        0.6991 * x[3] * x[6] * x[8] * x[10] +\n        0.4764 * x[3] * x[6] * x[9] * x[10] - 0.6822 * x[3] * x[7] * x[8] * x[9] -\n        0.709 * x[3] * x[7] * x[8] * x[10] - 0.6123 * x[3] * x[7] * x[9] * x[10] -\n        0.6075 * x[3] * x[8] * x[9] * x[10] - 0.6624 * x[4] * x[5] * x[6] * x[7] +\n        0.3302 * x[4] * x[5] * x[6] * x[8] +\n        0.6541 * x[4] * x[5] * x[6] * x[9] - 0.6579 * x[4] * x[5] * x[6] * x[10] -\n        0.5587 * x[4] * x[5] * x[7] * x[8] - 0.1261 * x[4] * x[5] * x[7] * x[9] +\n        0.8603 * x[4] * x[5] * x[7] * x[10] +\n        0.1445 * x[4] * x[5] * x[8] * x[9] - 0.773 * x[4] * x[5] * x[8] * x[10] +\n        0.1692 * x[4] * x[5] * x[9] * x[10] +\n        0.8432 * x[4] * x[6] * x[7] * x[8] +\n        0.8133 * x[4] * x[6] * x[7] * x[9] +\n        0.1169 * x[4] * x[6] * x[7] * x[10] - 0.1312 * x[4] * x[6] * x[8] * x[9] +\n        0.9717 * x[4] * x[6] * x[8] * x[10] +\n        0.3126 * x[4] * x[6] * x[9] * x[10] +\n        0.4154 * x[4] * x[7] * x[8] * x[9] - 0.0105 * x[4] * x[7] * x[8] * x[10] +\n        0.4772 * x[4] * x[7] * x[9] * x[10] +\n        0.1875 * x[4] * x[8] * x[9] * x[10] +\n        0.9525 * x[5] * x[6] * x[7] * x[8] - 0.3099 * x[5] * x[6] * x[7] * x[9] -\n        0.239 * x[5] * x[6] * x[7] * x[10] +\n        0.5059 * x[5] * x[6] * x[8] * x[9] +\n        0.466 * x[5] * x[6] * x[8] * x[10] - 0.334 * x[5] * x[6] * x[9] * x[10] +\n        0.8077 * x[5] * x[7] * x[8] * x[9] +\n        0.3148 * x[5] * x[7] * x[8] * x[10] - 0.4982 * x[5] * x[7] * x[9] * x[10] +\n        0.2499 * x[5] * x[8] * x[9] * x[10] - 0.4484 * x[6] * x[7] * x[8] * x[9] +\n        0.0002 * x[6] * x[7] * x[8] * x[10] +\n        0.9242 * x[6] * x[7] * x[9] * x[10] - 0.3877 * x[6] * x[8] * x[9] * x[10] -\n        0.776 * x[7] * x[8] * x[9] * x[10] <= 91.904\n    )\n    e6 = replace_expr(e6, x)\n    JuMP.add_nonlinear_constraint(m, e6)\n    e7 = :(\n        0.1493 * x[1] * x[2] - 0.0821 * x[1] * x[3] + 0.497 * x[1] * x[4] -\n        0.9345 * x[1] * x[5] +\n        0.4136 * x[1] * x[6] +\n        0.7518 * x[1] * x[7] - 0.343 * x[1] * x[8] - 0.4928 * x[1] * x[9] +\n        0.7599 * x[1] * x[10] +\n        0.6319 * x[2] * x[3] - 0.8854 * x[2] * x[4] +\n        0.7768 * x[2] * x[5] +\n        0.0498 * x[2] * x[6] - 0.87 * x[2] * x[7] + 0.2151 * x[2] * x[8] -\n        0.5144 * x[2] * x[9] - 0.4663 * x[2] * x[10] - 0.7141 * x[3] * x[4] +\n        0.3885 * x[3] * x[5] +\n        0.8542 * x[3] * x[6] +\n        0.7864 * x[3] * x[7] +\n        0.2841 * x[3] * x[8] - 0.2428 * x[3] * x[9] - 0.8116 * x[3] * x[10] +\n        0.8953 * x[4] * x[5] +\n        0.2995 * x[4] * x[6] - 0.2316 * x[4] * x[7] - 0.7342 * x[4] * x[8] +\n        0.3091 * x[4] * x[9] - 0.114 * x[4] * x[10] - 0.6494 * x[5] * x[6] -\n        0.5173 * x[5] * x[7] - 0.7047 * x[5] * x[8] - 0.764 * x[5] * x[9] -\n        0.2591 * x[5] * x[10] - 0.6065 * x[6] * x[7] - 0.5798 * x[6] * x[8] +\n        0.1489 * x[6] * x[9] - 0.7814 * x[6] * x[10] + 0.0265 * x[7] * x[8] -\n        0.0071 * x[7] * x[9] - 0.985 * x[7] * x[10] +\n        0.9441 * x[8] * x[9] +\n        0.4356 * x[8] * x[10] +\n        0.9238 * x[9] * x[10] - 0.8049 * x[1] - 0.4609 * x[2] + 0.0185 * x[3] -\n        0.5567 * x[4] +\n        0.5428 * x[5] +\n        0.8039 * x[6] - 0.7982 * x[7] +\n        0.433 * x[8] +\n        0.3945 * x[9] - 0.8879 * x[10] + 0.7921 * x[1] * x[2] * x[4] -\n        0.9752 * x[1] * x[2] * x[3] - 0.6234 * x[1] * x[2] * x[5] -\n        0.2596 * x[1] * x[2] * x[6] +\n        0.038 * x[1] * x[2] * x[7] +\n        0.7493 * x[1] * x[2] * x[8] +\n        0.0256 * x[1] * x[2] * x[9] - 0.457 * x[1] * x[2] * x[10] -\n        0.3738 * x[1] * x[3] * x[4] + 0.2854 * x[1] * x[3] * x[5] -\n        0.4543 * x[1] * x[3] * x[6] - 0.03 * x[1] * x[3] * x[7] -\n        0.9105 * x[1] * x[3] * x[8] - 0.7535 * x[1] * x[3] * x[9] -\n        0.1891 * x[1] * x[3] * x[10] +\n        0.6336 * x[1] * x[4] * x[5] +\n        0.1559 * x[1] * x[4] * x[6] - 0.3327 * x[1] * x[4] * x[7] -\n        0.0413 * x[1] * x[4] * x[8] - 0.3352 * x[1] * x[4] * x[9] -\n        0.9197 * x[1] * x[4] * x[10] - 0.3498 * x[1] * x[5] * x[6] -\n        0.3321 * x[1] * x[5] * x[7] + 0.3069 * x[1] * x[5] * x[8] -\n        0.6815 * x[1] * x[5] * x[9] - 0.9023 * x[1] * x[5] * x[10] -\n        0.3243 * x[1] * x[6] * x[7] - 0.7002 * x[1] * x[6] * x[8] +\n        0.8733 * x[1] * x[6] * x[9] +\n        0.7257 * x[1] * x[6] * x[10] +\n        0.807 * x[1] * x[7] * x[8] - 0.3247 * x[1] * x[7] * x[9] +\n        0.751 * x[1] * x[7] * x[10] - 0.1371 * x[1] * x[8] * x[9] +\n        0.3378 * x[1] * x[8] * x[10] +\n        0.4854 * x[1] * x[9] * x[10] +\n        0.6818 * x[2] * x[3] * x[4] - 0.2154 * x[2] * x[3] * x[5] +\n        0.9713 * x[2] * x[3] * x[6] +\n        0.0508 * x[2] * x[3] * x[7] - 0.0821 * x[2] * x[3] * x[8] -\n        0.2744 * x[2] * x[3] * x[9] +\n        0.3301 * x[2] * x[3] * x[10] +\n        0.0977 * x[2] * x[4] * x[5] +\n        0.7447 * x[2] * x[4] * x[6] +\n        0.152 * x[2] * x[4] * x[7] +\n        0.6629 * x[2] * x[4] * x[8] - 0.8393 * x[2] * x[4] * x[9] +\n        0.1067 * x[2] * x[4] * x[10] - 0.9084 * x[2] * x[5] * x[6] +\n        0.761 * x[2] * x[5] * x[7] +\n        0.5597 * x[2] * x[5] * x[8] - 0.2003 * x[2] * x[5] * x[9] -\n        0.9542 * x[2] * x[5] * x[10] - 0.1824 * x[2] * x[6] * x[7] -\n        0.8383 * x[2] * x[6] * x[8] - 0.6698 * x[2] * x[6] * x[9] +\n        0.0278 * x[2] * x[6] * x[10] - 0.6996 * x[2] * x[7] * x[8] -\n        0.3721 * x[2] * x[7] * x[9] - 0.0097 * x[2] * x[7] * x[10] -\n        0.1389 * x[2] * x[8] * x[9] - 0.1557 * x[2] * x[8] * x[10] +\n        0.3259 * x[2] * x[9] * x[10] +\n        0.2066 * x[3] * x[4] * x[5] +\n        0.4973 * x[3] * x[4] * x[6] - 0.0794 * x[3] * x[4] * x[7] +\n        0.9822 * x[3] * x[4] * x[8] +\n        0.9661 * x[3] * x[4] * x[9] - 0.7344 * x[3] * x[4] * x[10] +\n        0.5813 * x[3] * x[5] * x[6] - 0.0259 * x[3] * x[5] * x[7] -\n        0.8178 * x[3] * x[5] * x[8] +\n        0.1696 * x[3] * x[5] * x[9] +\n        0.0474 * x[3] * x[5] * x[10] - 0.6102 * x[3] * x[6] * x[7] +\n        0.3413 * x[3] * x[6] * x[8] - 0.0321 * x[3] * x[6] * x[9] +\n        0.3867 * x[3] * x[6] * x[10] - 0.9594 * x[3] * x[7] * x[8] -\n        0.0941 * x[3] * x[7] * x[9] +\n        0.2824 * x[3] * x[7] * x[10] +\n        0.2279 * x[3] * x[8] * x[9] - 0.2678 * x[3] * x[8] * x[10] +\n        0.8357 * x[3] * x[9] * x[10] - 0.1385 * x[4] * x[5] * x[6] -\n        0.0028 * x[4] * x[5] * x[7] +\n        0.6343 * x[4] * x[5] * x[8] +\n        0.6558 * x[4] * x[5] * x[9] - 0.3929 * x[4] * x[5] * x[10] +\n        0.5754 * x[4] * x[6] * x[7] +\n        0.5376 * x[4] * x[6] * x[8] - 0.9033 * x[4] * x[6] * x[9] -\n        0.3758 * x[4] * x[6] * x[10] +\n        0.0538 * x[4] * x[7] * x[8] +\n        0.5201 * x[4] * x[7] * x[9] +\n        0.0502 * x[4] * x[7] * x[10] +\n        0.6526 * x[4] * x[8] * x[9] +\n        0.3788 * x[4] * x[8] * x[10] - 0.2957 * x[4] * x[9] * x[10] +\n        0.2894 * x[5] * x[6] * x[7] - 0.7789 * x[5] * x[6] * x[8] -\n        0.7901 * x[5] * x[6] * x[9] +\n        0.4762 * x[5] * x[6] * x[10] +\n        0.4641 * x[5] * x[7] * x[8] +\n        0.4006 * x[5] * x[7] * x[9] +\n        0.9277 * x[5] * x[7] * x[10] +\n        0.1455 * x[5] * x[8] * x[9] - 0.2138 * x[5] * x[8] * x[10] +\n        0.5281 * x[5] * x[9] * x[10] - 0.3557 * x[6] * x[7] * x[8] +\n        0.9451 * x[6] * x[7] * x[9] +\n        0.3845 * x[6] * x[7] * x[10] - 0.931 * x[6] * x[8] * x[9] -\n        0.7231 * x[6] * x[8] * x[10] - 0.1203 * x[6] * x[9] * x[10] +\n        0.6813 * x[7] * x[8] * x[9] - 0.1748 * x[7] * x[8] * x[10] -\n        0.893 * x[7] * x[9] * x[10] +\n        0.3339 * x[8] * x[9] * x[10] +\n        (-0.8394 * x[1] * x[2] * x[3] * x[4]) - 0.7701 * x[1] * x[2] * x[3] * x[5] -\n        0.3017 * x[1] * x[2] * x[3] * x[6] - 0.2722 * x[1] * x[2] * x[3] * x[7] +\n        0.4795 * x[1] * x[2] * x[3] * x[8] +\n        0.3531 * x[1] * x[2] * x[3] * x[9] +\n        0.2825 * x[1] * x[2] * x[3] * x[10] +\n        0.3274 * x[1] * x[2] * x[4] * x[5] - 0.4461 * x[1] * x[2] * x[4] * x[6] +\n        0.2588 * x[1] * x[2] * x[4] * x[7] +\n        0.5324 * x[1] * x[2] * x[4] * x[8] - 0.6424 * x[1] * x[2] * x[4] * x[9] -\n        0.573 * x[1] * x[2] * x[4] * x[10] +\n        0.6427 * x[1] * x[2] * x[5] * x[6] +\n        0.1464 * x[1] * x[2] * x[5] * x[7] +\n        0.7913 * x[1] * x[2] * x[5] * x[8] +\n        0.0191 * x[1] * x[2] * x[5] * x[9] +\n        0.6857 * x[1] * x[2] * x[5] * x[10] +\n        0.3674 * x[1] * x[2] * x[6] * x[7] - 0.7488 * x[1] * x[2] * x[6] * x[8] -\n        0.9634 * x[1] * x[2] * x[6] * x[9] - 0.2154 * x[1] * x[2] * x[6] * x[10] +\n        0.9814 * x[1] * x[2] * x[7] * x[8] +\n        0.3058 * x[1] * x[2] * x[7] * x[9] - 0.5648 * x[1] * x[2] * x[7] * x[10] +\n        0.043 * x[1] * x[2] * x[8] * x[9] +\n        0.3748 * x[1] * x[2] * x[8] * x[10] - 0.1711 * x[1] * x[2] * x[9] * x[10] +\n        0.1803 * x[1] * x[3] * x[4] * x[5] - 0.3642 * x[1] * x[3] * x[4] * x[6] +\n        0.4124 * x[1] * x[3] * x[4] * x[7] +\n        0.2058 * x[1] * x[3] * x[4] * x[8] +\n        0.2026 * x[1] * x[3] * x[4] * x[9] +\n        0.3626 * x[1] * x[3] * x[4] * x[10] +\n        0.5458 * x[1] * x[3] * x[5] * x[6] - 0.0222 * x[1] * x[3] * x[5] * x[7] -\n        0.7975 * x[1] * x[3] * x[5] * x[8] - 0.5112 * x[1] * x[3] * x[5] * x[9] +\n        0.0613 * x[1] * x[3] * x[5] * x[10] +\n        0.769 * x[1] * x[3] * x[6] * x[7] +\n        0.701 * x[1] * x[3] * x[6] * x[8] - 0.7641 * x[1] * x[3] * x[6] * x[9] +\n        0.3574 * x[1] * x[3] * x[6] * x[10] - 0.0437 * x[1] * x[3] * x[7] * x[8] +\n        0.7193 * x[1] * x[3] * x[7] * x[9] +\n        0.4535 * x[1] * x[3] * x[7] * x[10] +\n        0.5978 * x[1] * x[3] * x[8] * x[9] +\n        0.0133 * x[1] * x[3] * x[8] * x[10] +\n        0.8512 * x[1] * x[3] * x[9] * x[10] - 0.6772 * x[1] * x[4] * x[5] * x[6] +\n        0.5878 * x[1] * x[4] * x[5] * x[7] - 0.3585 * x[1] * x[4] * x[5] * x[8] +\n        0.1872 * x[1] * x[4] * x[5] * x[9] +\n        0.0589 * x[1] * x[4] * x[5] * x[10] - 0.3317 * x[1] * x[4] * x[6] * x[7] +\n        0.7479 * x[1] * x[4] * x[6] * x[8] - 0.9671 * x[1] * x[4] * x[6] * x[9] +\n        0.9391 * x[1] * x[4] * x[6] * x[10] +\n        0.9018 * x[1] * x[4] * x[7] * x[8] +\n        0.32 * x[1] * x[4] * x[7] * x[9] +\n        0.6027 * x[1] * x[4] * x[7] * x[10] - 0.6141 * x[1] * x[4] * x[8] * x[9] +\n        0.531 * x[1] * x[4] * x[8] * x[10] +\n        0.2639 * x[1] * x[4] * x[9] * x[10] +\n        0.3663 * x[1] * x[5] * x[6] * x[7] - 0.233 * x[1] * x[5] * x[6] * x[8] +\n        0.4189 * x[1] * x[5] * x[6] * x[9] +\n        0.4041 * x[1] * x[5] * x[6] * x[10] +\n        0.304 * x[1] * x[5] * x[7] * x[8] +\n        0.3126 * x[1] * x[5] * x[7] * x[9] +\n        0.0481 * x[1] * x[5] * x[7] * x[10] - 0.5275 * x[1] * x[5] * x[8] * x[9] -\n        0.1305 * x[1] * x[5] * x[8] * x[10] - 0.6678 * x[1] * x[5] * x[9] * x[10] -\n        0.5155 * x[1] * x[6] * x[7] * x[8] +\n        0.5784 * x[1] * x[6] * x[7] * x[9] +\n        0.0016 * x[1] * x[6] * x[7] * x[10] - 0.1111 * x[1] * x[6] * x[8] * x[9] -\n        0.3946 * x[1] * x[6] * x[8] * x[10] - 0.98 * x[1] * x[6] * x[9] * x[10] -\n        0.1806 * x[1] * x[7] * x[8] * x[9] + 0.988 * x[1] * x[7] * x[8] * x[10] -\n        0.6747 * x[1] * x[7] * x[9] * x[10] - 0.3078 * x[1] * x[8] * x[9] * x[10] +\n        0.2953 * x[2] * x[3] * x[4] * x[5] - 0.8559 * x[2] * x[3] * x[4] * x[6] +\n        0.3771 * x[2] * x[3] * x[4] * x[7] - 0.6117 * x[2] * x[3] * x[4] * x[8] +\n        0.1766 * x[2] * x[3] * x[4] * x[9] +\n        0.472 * x[2] * x[3] * x[4] * x[10] - 0.1445 * x[2] * x[3] * x[5] * x[6] -\n        0.1965 * x[2] * x[3] * x[5] * x[7] +\n        0.5678 * x[2] * x[3] * x[5] * x[8] +\n        0.8256 * x[2] * x[3] * x[5] * x[9] - 0.0288 * x[2] * x[3] * x[5] * x[10] -\n        0.0473 * x[2] * x[3] * x[6] * x[7] +\n        0.1173 * x[2] * x[3] * x[6] * x[8] +\n        0.6063 * x[2] * x[3] * x[6] * x[9] - 0.8786 * x[2] * x[3] * x[6] * x[10] +\n        0.8495 * x[2] * x[3] * x[7] * x[8] +\n        0.1714 * x[2] * x[3] * x[7] * x[9] +\n        0.4934 * x[2] * x[3] * x[7] * x[10] - 0.7093 * x[2] * x[3] * x[8] * x[9] -\n        0.5405 * x[2] * x[3] * x[8] * x[10] + 0.7902 * x[2] * x[3] * x[9] * x[10] -\n        0.333 * x[2] * x[4] * x[5] * x[6] +\n        0.9342 * x[2] * x[4] * x[5] * x[7] +\n        0.6046 * x[2] * x[4] * x[5] * x[8] - 0.7882 * x[2] * x[4] * x[5] * x[9] +\n        0.4245 * x[2] * x[4] * x[5] * x[10] - 0.3577 * x[2] * x[4] * x[6] * x[7] -\n        0.6746 * x[2] * x[4] * x[6] * x[8] - 0.1915 * x[2] * x[4] * x[6] * x[9] -\n        0.0401 * x[2] * x[4] * x[6] * x[10] - 0.9931 * x[2] * x[4] * x[7] * x[8] +\n        0.0294 * x[2] * x[4] * x[7] * x[9] +\n        0.5066 * x[2] * x[4] * x[7] * x[10] +\n        0.9387 * x[2] * x[4] * x[8] * x[9] +\n        0.4504 * x[2] * x[4] * x[8] * x[10] - 0.8174 * x[2] * x[4] * x[9] * x[10] -\n        0.1996 * x[2] * x[5] * x[6] * x[7] +\n        0.3514 * x[2] * x[5] * x[6] * x[8] +\n        0.316 * x[2] * x[5] * x[6] * x[9] +\n        0.6336 * x[2] * x[5] * x[6] * x[10] - 0.5032 * x[2] * x[5] * x[7] * x[8] -\n        0.4267 * x[2] * x[5] * x[7] * x[9] - 0.9986 * x[2] * x[5] * x[7] * x[10] -\n        0.5176 * x[2] * x[5] * x[8] * x[9] - 0.9889 * x[2] * x[5] * x[8] * x[10] -\n        0.2244 * x[2] * x[5] * x[9] * x[10] - 0.1486 * x[2] * x[6] * x[7] * x[8] +\n        0.4237 * x[2] * x[6] * x[7] * x[9] +\n        0.7526 * x[2] * x[6] * x[7] * x[10] +\n        0.3702 * x[2] * x[6] * x[8] * x[9] - 0.0792 * x[2] * x[6] * x[8] * x[10] +\n        0.3093 * x[2] * x[6] * x[9] * x[10] - 0.3792 * x[2] * x[7] * x[8] * x[9] +\n        0.5826 * x[2] * x[7] * x[8] * x[10] - 0.027 * x[2] * x[7] * x[9] * x[10] +\n        0.2429 * x[2] * x[8] * x[9] * x[10] +\n        0.4158 * x[3] * x[4] * x[5] * x[6] - 0.5107 * x[3] * x[4] * x[5] * x[7] -\n        0.3875 * x[3] * x[4] * x[5] * x[8] - 0.8247 * x[3] * x[4] * x[5] * x[9] -\n        0.1237 * x[3] * x[4] * x[5] * x[10] - 0.9108 * x[3] * x[4] * x[6] * x[7] +\n        0.8865 * x[3] * x[4] * x[6] * x[8] - 0.2339 * x[3] * x[4] * x[6] * x[9] -\n        0.3238 * x[3] * x[4] * x[6] * x[10] + 0.3171 * x[3] * x[4] * x[7] * x[8] -\n        0.7991 * x[3] * x[4] * x[7] * x[9] + 0.8642 * x[3] * x[4] * x[7] * x[10] -\n        0.3354 * x[3] * x[4] * x[8] * x[9] - 0.9854 * x[3] * x[4] * x[8] * x[10] +\n        0.6736 * x[3] * x[4] * x[9] * x[10] +\n        0.9472 * x[3] * x[5] * x[6] * x[7] - 0.6774 * x[3] * x[5] * x[6] * x[8] +\n        0.2819 * x[3] * x[5] * x[6] * x[9] - 0.8312 * x[3] * x[5] * x[6] * x[10] +\n        0.9588 * x[3] * x[5] * x[7] * x[8] +\n        0.6607 * x[3] * x[5] * x[7] * x[9] - 0.7955 * x[3] * x[5] * x[7] * x[10] -\n        0.3957 * x[3] * x[5] * x[8] * x[9] - 0.7523 * x[3] * x[5] * x[8] * x[10] -\n        0.232 * x[3] * x[5] * x[9] * x[10] + 0.7743 * x[3] * x[6] * x[7] * x[8] -\n        0.4182 * x[3] * x[6] * x[7] * x[9] - 0.8409 * x[3] * x[6] * x[7] * x[10] +\n        0.2953 * x[3] * x[6] * x[8] * x[9] - 0.6522 * x[3] * x[6] * x[8] * x[10] +\n        0.2996 * x[3] * x[6] * x[9] * x[10] - 0.319 * x[3] * x[7] * x[8] * x[9] +\n        0.092 * x[3] * x[7] * x[8] * x[10] - 0.9485 * x[3] * x[7] * x[9] * x[10] +\n        0.7382 * x[3] * x[8] * x[9] * x[10] - 0.1359 * x[4] * x[5] * x[6] * x[7] +\n        0.3935 * x[4] * x[5] * x[6] * x[8] +\n        0.8373 * x[4] * x[5] * x[6] * x[9] +\n        0.8982 * x[4] * x[5] * x[6] * x[10] - 0.5906 * x[4] * x[5] * x[7] * x[8] -\n        0.1772 * x[4] * x[5] * x[7] * x[9] + 0.834 * x[4] * x[5] * x[7] * x[10] -\n        0.6971 * x[4] * x[5] * x[8] * x[9] - 0.5593 * x[4] * x[5] * x[8] * x[10] +\n        0.5782 * x[4] * x[5] * x[9] * x[10] - 0.0524 * x[4] * x[6] * x[7] * x[8] +\n        0.3458 * x[4] * x[6] * x[7] * x[9] - 0.5235 * x[4] * x[6] * x[7] * x[10] -\n        0.1639 * x[4] * x[6] * x[8] * x[9] +\n        0.8372 * x[4] * x[6] * x[8] * x[10] +\n        0.6061 * x[4] * x[6] * x[9] * x[10] - 0.0421 * x[4] * x[7] * x[8] * x[9] +\n        0.0078 * x[4] * x[7] * x[8] * x[10] +\n        0.992 * x[4] * x[7] * x[9] * x[10] - 0.9383 * x[4] * x[8] * x[9] * x[10] +\n        0.3232 * x[5] * x[6] * x[7] * x[8] - 0.1077 * x[5] * x[6] * x[7] * x[9] -\n        0.6034 * x[5] * x[6] * x[7] * x[10] +\n        0.5167 * x[5] * x[6] * x[8] * x[9] +\n        0.5893 * x[5] * x[6] * x[8] * x[10] +\n        0.3498 * x[5] * x[6] * x[9] * x[10] +\n        0.9897 * x[5] * x[7] * x[8] * x[9] - 0.4292 * x[5] * x[7] * x[8] * x[10] +\n        0.6811 * x[5] * x[7] * x[9] * x[10] - 0.9318 * x[5] * x[8] * x[9] * x[10] -\n        0.628 * x[6] * x[7] * x[8] * x[9] - 0.7347 * x[6] * x[7] * x[8] * x[10] -\n        0.6338 * x[6] * x[7] * x[9] * x[10] - 0.0089 * x[6] * x[8] * x[9] * x[10] +\n        0.435 * x[7] * x[8] * x[9] * x[10] <= 46.589\n    )\n    e7 = replace_expr(e7, x)\n    JuMP.add_nonlinear_constraint(m, e7)\n    e8 = :(\n        0.0457 * x[1] * x[2] + 0.9914 * x[1] * x[3] - 0.2043 * x[1] * x[4] -\n        0.8175 * x[1] * x[5] - 0.3506 * x[1] * x[6] +\n        0.8449 * x[1] * x[7] +\n        0.9969 * x[1] * x[8] +\n        0.7066 * x[1] * x[9] +\n        0.7814 * x[1] * x[10] - 0.2681 * x[2] * x[3] +\n        0.1122 * x[2] * x[4] +\n        0.5142 * x[2] * x[5] +\n        0.5563 * x[2] * x[6] +\n        0.7168 * x[2] * x[7] +\n        0.1767 * x[2] * x[8] - 0.4082 * x[2] * x[9] +\n        0.6883 * x[2] * x[10] +\n        0.4342 * x[3] * x[4] +\n        0.2648 * x[3] * x[5] +\n        0.3778 * x[3] * x[6] - 0.8064 * x[3] * x[7] +\n        0.6143 * x[3] * x[8] +\n        0.0073 * x[3] * x[9] - 0.385 * x[3] * x[10] - 0.1292 * x[4] * x[5] +\n        0.0795 * x[4] * x[6] - 0.3467 * x[4] * x[7] +\n        0.4255 * x[4] * x[8] +\n        0.5645 * x[4] * x[9] - 0.6424 * x[4] * x[10] + 0.0119 * x[5] * x[6] -\n        0.6729 * x[5] * x[7] +\n        0.5847 * x[5] * x[8] +\n        0.7055 * x[5] * x[9] +\n        0.325 * x[5] * x[10] +\n        0.2792 * x[6] * x[7] +\n        0.0091 * x[6] * x[8] - 0.8959 * x[6] * x[9] - 0.2254 * x[6] * x[10] +\n        0.718 * x[7] * x[8] +\n        0.7289 * x[7] * x[9] +\n        0.0895 * x[7] * x[10] - 0.3158 * x[8] * x[9] - 0.6424 * x[8] * x[10] -\n        0.4076 * x[9] * x[10] - 0.7606 * x[1] - 0.4835 * x[2] + 0.7128 * x[3] -\n        0.7993 * x[4] + 0.1586 * x[5] - 0.2892 * x[6] - 0.297 * x[7] +\n        0.4053 * x[8] +\n        0.5703 * x[9] +\n        0.8903 * x[10] +\n        (-0.9557 * x[1] * x[2] * x[3]) - 0.0043 * x[1] * x[2] * x[4] -\n        0.3711 * x[1] * x[2] * x[5] - 0.3175 * x[1] * x[2] * x[6] -\n        0.3467 * x[1] * x[2] * x[7] - 0.0837 * x[1] * x[2] * x[8] +\n        0.397 * x[1] * x[2] * x[9] - 0.8681 * x[1] * x[2] * x[10] -\n        0.2124 * x[1] * x[3] * x[4] + 0.9815 * x[1] * x[3] * x[5] -\n        0.5043 * x[1] * x[3] * x[6] - 0.2869 * x[1] * x[3] * x[7] +\n        0.6841 * x[1] * x[3] * x[8] - 0.4616 * x[1] * x[3] * x[9] +\n        0.4655 * x[1] * x[3] * x[10] - 0.6494 * x[1] * x[4] * x[5] -\n        0.2862 * x[1] * x[4] * x[6] - 0.5755 * x[1] * x[4] * x[7] -\n        0.5887 * x[1] * x[4] * x[8] +\n        0.3282 * x[1] * x[4] * x[9] +\n        0.0774 * x[1] * x[4] * x[10] +\n        0.6841 * x[1] * x[5] * x[6] - 0.2826 * x[1] * x[5] * x[7] +\n        0.9124 * x[1] * x[5] * x[8] +\n        0.8253 * x[1] * x[5] * x[9] +\n        0.1537 * x[1] * x[5] * x[10] - 0.6056 * x[1] * x[6] * x[7] +\n        0.1527 * x[1] * x[6] * x[8] +\n        0.8957 * x[1] * x[6] * x[9] - 0.5742 * x[1] * x[6] * x[10] +\n        0.235 * x[1] * x[7] * x[8] - 0.5581 * x[1] * x[7] * x[9] -\n        0.6459 * x[1] * x[7] * x[10] +\n        0.6936 * x[1] * x[8] * x[9] +\n        0.5801 * x[1] * x[8] * x[10] +\n        0.6639 * x[1] * x[9] * x[10] +\n        0.6154 * x[2] * x[3] * x[4] +\n        0.593 * x[2] * x[3] * x[5] - 0.5041 * x[2] * x[3] * x[6] -\n        0.8966 * x[2] * x[3] * x[7] +\n        0.2624 * x[2] * x[3] * x[8] +\n        0.1377 * x[2] * x[3] * x[9] - 0.3901 * x[2] * x[3] * x[10] -\n        0.244 * x[2] * x[4] * x[5] - 0.0898 * x[2] * x[4] * x[6] +\n        0.7614 * x[2] * x[4] * x[7] - 0.7333 * x[2] * x[4] * x[8] +\n        0.3803 * x[2] * x[4] * x[9] +\n        0.6721 * x[2] * x[4] * x[10] - 0.1619 * x[2] * x[5] * x[6] +\n        0.8134 * x[2] * x[5] * x[7] +\n        0.9525 * x[2] * x[5] * x[8] +\n        0.992 * x[2] * x[5] * x[9] +\n        0.7007 * x[2] * x[5] * x[10] +\n        0.3342 * x[2] * x[6] * x[7] +\n        0.7684 * x[2] * x[6] * x[8] +\n        0.3835 * x[2] * x[6] * x[9] - 0.3171 * x[2] * x[6] * x[10] -\n        0.5577 * x[2] * x[7] * x[8] + 0.6115 * x[2] * x[7] * x[9] -\n        0.1189 * x[2] * x[7] * x[10] +\n        0.8643 * x[2] * x[8] * x[9] +\n        0.3953 * x[2] * x[8] * x[10] - 0.3491 * x[2] * x[9] * x[10] -\n        0.7712 * x[3] * x[4] * x[5] - 0.8291 * x[3] * x[4] * x[6] -\n        0.3737 * x[3] * x[4] * x[7] + 0.388 * x[3] * x[4] * x[8] -\n        0.5345 * x[3] * x[4] * x[9] - 0.2952 * x[3] * x[4] * x[10] +\n        0.2886 * x[3] * x[5] * x[6] +\n        0.0765 * x[3] * x[5] * x[7] +\n        0.8758 * x[3] * x[5] * x[8] +\n        0.4549 * x[3] * x[5] * x[9] - 0.0236 * x[3] * x[5] * x[10] -\n        0.1005 * x[3] * x[6] * x[7] + 0.7607 * x[3] * x[6] * x[8] -\n        0.7844 * x[3] * x[6] * x[9] - 0.0479 * x[3] * x[6] * x[10] +\n        0.9452 * x[3] * x[7] * x[8] - 0.1973 * x[3] * x[7] * x[9] +\n        0.6377 * x[3] * x[7] * x[10] +\n        0.5098 * x[3] * x[8] * x[9] - 0.3909 * x[3] * x[8] * x[10] +\n        0.9553 * x[3] * x[9] * x[10] +\n        0.1032 * x[4] * x[5] * x[6] +\n        0.6899 * x[4] * x[5] * x[7] +\n        0.8619 * x[4] * x[5] * x[8] +\n        0.3971 * x[4] * x[5] * x[9] - 0.3458 * x[4] * x[5] * x[10] -\n        0.5388 * x[4] * x[6] * x[7] + 0.8271 * x[4] * x[6] * x[8] -\n        0.4226 * x[4] * x[6] * x[9] +\n        0.3216 * x[4] * x[6] * x[10] +\n        0.5984 * x[4] * x[7] * x[8] +\n        0.8383 * x[4] * x[7] * x[9] +\n        0.9912 * x[4] * x[7] * x[10] - 0.6707 * x[4] * x[8] * x[9] +\n        0.623 * x[4] * x[8] * x[10] +\n        0.93 * x[4] * x[9] * x[10] - 0.9724 * x[5] * x[6] * x[7] +\n        0.693 * x[5] * x[6] * x[8] - 0.4268 * x[5] * x[6] * x[9] -\n        0.9103 * x[5] * x[6] * x[10] + 0.0769 * x[5] * x[7] * x[8] -\n        0.9401 * x[5] * x[7] * x[9] +\n        0.4041 * x[5] * x[7] * x[10] +\n        0.256 * x[5] * x[8] * x[9] - 0.4499 * x[5] * x[8] * x[10] -\n        0.967 * x[5] * x[9] * x[10] +\n        0.7441 * x[6] * x[7] * x[8] +\n        0.9925 * x[6] * x[7] * x[9] - 0.8395 * x[6] * x[7] * x[10] +\n        0.0652 * x[6] * x[8] * x[9] +\n        0.6151 * x[6] * x[8] * x[10] - 0.5872 * x[6] * x[9] * x[10] -\n        0.021 * x[7] * x[8] * x[9] - 0.355 * x[7] * x[8] * x[10] -\n        0.0804 * x[7] * x[9] * x[10] - 0.8904 * x[8] * x[9] * x[10] +\n        0.8792 * x[1] * x[2] * x[3] * x[5] - 0.0645 * x[1] * x[2] * x[3] * x[4] -\n        0.8687 * x[1] * x[2] * x[3] * x[6] + 0.3423 * x[1] * x[2] * x[3] * x[7] -\n        0.9285 * x[1] * x[2] * x[3] * x[8] - 0.8432 * x[1] * x[2] * x[3] * x[9] -\n        0.5799 * x[1] * x[2] * x[3] * x[10] - 0.6942 * x[1] * x[2] * x[4] * x[5] -\n        0.4111 * x[1] * x[2] * x[4] * x[6] +\n        0.386 * x[1] * x[2] * x[4] * x[7] +\n        0.1187 * x[1] * x[2] * x[4] * x[8] +\n        0.12 * x[1] * x[2] * x[4] * x[9] +\n        0.3772 * x[1] * x[2] * x[4] * x[10] - 0.7117 * x[1] * x[2] * x[5] * x[6] -\n        0.5063 * x[1] * x[2] * x[5] * x[7] - 0.5562 * x[1] * x[2] * x[5] * x[8] +\n        0.5658 * x[1] * x[2] * x[5] * x[9] - 0.9644 * x[1] * x[2] * x[5] * x[10] +\n        0.9425 * x[1] * x[2] * x[6] * x[7] - 0.7938 * x[1] * x[2] * x[6] * x[8] +\n        0.0856 * x[1] * x[2] * x[6] * x[9] +\n        0.9841 * x[1] * x[2] * x[6] * x[10] - 0.5537 * x[1] * x[2] * x[7] * x[8] -\n        0.6452 * x[1] * x[2] * x[7] * x[9] - 0.6664 * x[1] * x[2] * x[7] * x[10] -\n        0.5412 * x[1] * x[2] * x[8] * x[9] + 0.6908 * x[1] * x[2] * x[8] * x[10] -\n        0.5576 * x[1] * x[2] * x[9] * x[10] + 0.1221 * x[1] * x[3] * x[4] * x[5] -\n        0.925 * x[1] * x[3] * x[4] * x[6] + 0.4836 * x[1] * x[3] * x[4] * x[7] -\n        0.4814 * x[1] * x[3] * x[4] * x[8] - 0.8928 * x[1] * x[3] * x[4] * x[9] +\n        0.8237 * x[1] * x[3] * x[4] * x[10] +\n        0.2967 * x[1] * x[3] * x[5] * x[6] +\n        0.519 * x[1] * x[3] * x[5] * x[7] - 0.4036 * x[1] * x[3] * x[5] * x[8] +\n        0.2184 * x[1] * x[3] * x[5] * x[9] +\n        0.5597 * x[1] * x[3] * x[5] * x[10] - 0.6636 * x[1] * x[3] * x[6] * x[7] -\n        0.2396 * x[1] * x[3] * x[6] * x[8] + 0.2761 * x[1] * x[3] * x[6] * x[9] -\n        0.8421 * x[1] * x[3] * x[6] * x[10] + 0.5215 * x[1] * x[3] * x[7] * x[8] -\n        0.3457 * x[1] * x[3] * x[7] * x[9] +\n        0.54 * x[1] * x[3] * x[7] * x[10] +\n        0.1788 * x[1] * x[3] * x[8] * x[9] +\n        0.2414 * x[1] * x[3] * x[8] * x[10] - 0.055 * x[1] * x[3] * x[9] * x[10] -\n        0.2767 * x[1] * x[4] * x[5] * x[6] +\n        0.3488 * x[1] * x[4] * x[5] * x[7] +\n        0.0979 * x[1] * x[4] * x[5] * x[8] - 0.6934 * x[1] * x[4] * x[5] * x[9] -\n        0.6615 * x[1] * x[4] * x[5] * x[10] + 0.503 * x[1] * x[4] * x[6] * x[7] -\n        0.7626 * x[1] * x[4] * x[6] * x[8] - 0.7943 * x[1] * x[4] * x[6] * x[9] -\n        0.3063 * x[1] * x[4] * x[6] * x[10] + 0.0558 * x[1] * x[4] * x[7] * x[8] -\n        0.2301 * x[1] * x[4] * x[7] * x[9] + 0.5779 * x[1] * x[4] * x[7] * x[10] -\n        0.0523 * x[1] * x[4] * x[8] * x[9] +\n        0.4117 * x[1] * x[4] * x[8] * x[10] +\n        0.7896 * x[1] * x[4] * x[9] * x[10] - 0.3012 * x[1] * x[5] * x[6] * x[7] -\n        0.0166 * x[1] * x[5] * x[6] * x[8] - 0.6013 * x[1] * x[5] * x[6] * x[9] -\n        0.27 * x[1] * x[5] * x[6] * x[10] - 0.5193 * x[1] * x[5] * x[7] * x[8] +\n        0.0948 * x[1] * x[5] * x[7] * x[9] +\n        0.2315 * x[1] * x[5] * x[7] * x[10] - 0.8466 * x[1] * x[5] * x[8] * x[9] -\n        0.4082 * x[1] * x[5] * x[8] * x[10] + 0.7234 * x[1] * x[5] * x[9] * x[10] -\n        0.2451 * x[1] * x[6] * x[7] * x[8] + 0.486 * x[1] * x[6] * x[7] * x[9] -\n        0.9333 * x[1] * x[6] * x[7] * x[10] - 0.577 * x[1] * x[6] * x[8] * x[9] +\n        0.6391 * x[1] * x[6] * x[8] * x[10] - 0.078 * x[1] * x[6] * x[9] * x[10] -\n        0.7901 * x[1] * x[7] * x[8] * x[9] + 0.3108 * x[1] * x[7] * x[8] * x[10] -\n        0.5911 * x[1] * x[7] * x[9] * x[10] - 0.7161 * x[1] * x[8] * x[9] * x[10] +\n        0.6677 * x[2] * x[3] * x[4] * x[5] +\n        0.9834 * x[2] * x[3] * x[4] * x[6] - 0.2604 * x[2] * x[3] * x[4] * x[7] +\n        0.1312 * x[2] * x[3] * x[4] * x[8] +\n        0.1699 * x[2] * x[3] * x[4] * x[9] +\n        0.8036 * x[2] * x[3] * x[4] * x[10] +\n        0.4179 * x[2] * x[3] * x[5] * x[6] - 0.4876 * x[2] * x[3] * x[5] * x[7] -\n        0.9695 * x[2] * x[3] * x[5] * x[8] + 0.8412 * x[2] * x[3] * x[5] * x[9] -\n        0.6245 * x[2] * x[3] * x[5] * x[10] - 0.2725 * x[2] * x[3] * x[6] * x[7] +\n        0.9959 * x[2] * x[3] * x[6] * x[8] +\n        0.7839 * x[2] * x[3] * x[6] * x[9] - 0.2566 * x[2] * x[3] * x[6] * x[10] -\n        0.3715 * x[2] * x[3] * x[7] * x[8] - 0.1659 * x[2] * x[3] * x[7] * x[9] -\n        0.3605 * x[2] * x[3] * x[7] * x[10] +\n        0.4571 * x[2] * x[3] * x[8] * x[9] +\n        0.157 * x[2] * x[3] * x[8] * x[10] +\n        0.3664 * x[2] * x[3] * x[9] * x[10] +\n        0.2114 * x[2] * x[4] * x[5] * x[6] - 0.8717 * x[2] * x[4] * x[5] * x[7] +\n        0.7656 * x[2] * x[4] * x[5] * x[8] - 0.1614 * x[2] * x[4] * x[5] * x[9] +\n        0.208 * x[2] * x[4] * x[5] * x[10] +\n        0.2939 * x[2] * x[4] * x[6] * x[7] +\n        0.4719 * x[2] * x[4] * x[6] * x[8] +\n        0.1079 * x[2] * x[4] * x[6] * x[9] - 0.1952 * x[2] * x[4] * x[6] * x[10] +\n        0.9831 * x[2] * x[4] * x[7] * x[8] - 0.3912 * x[2] * x[4] * x[7] * x[9] -\n        0.0164 * x[2] * x[4] * x[7] * x[10] - 0.7641 * x[2] * x[4] * x[8] * x[9] +\n        0.825 * x[2] * x[4] * x[8] * x[10] +\n        0.7573 * x[2] * x[4] * x[9] * x[10] - 0.0731 * x[2] * x[5] * x[6] * x[7] -\n        0.7839 * x[2] * x[5] * x[6] * x[8] +\n        0.2375 * x[2] * x[5] * x[6] * x[9] +\n        0.342 * x[2] * x[5] * x[6] * x[10] - 0.2362 * x[2] * x[5] * x[7] * x[8] +\n        0.7813 * x[2] * x[5] * x[7] * x[9] +\n        0.6021 * x[2] * x[5] * x[7] * x[10] +\n        0.3864 * x[2] * x[5] * x[8] * x[9] +\n        0.7828 * x[2] * x[5] * x[8] * x[10] - 0.2355 * x[2] * x[5] * x[9] * x[10] +\n        0.1796 * x[2] * x[6] * x[7] * x[8] - 0.7816 * x[2] * x[6] * x[7] * x[9] +\n        0.6992 * x[2] * x[6] * x[7] * x[10] - 0.5391 * x[2] * x[6] * x[8] * x[9] +\n        0.1898 * x[2] * x[6] * x[8] * x[10] - 0.3419 * x[2] * x[6] * x[9] * x[10] -\n        0.6057 * x[2] * x[7] * x[8] * x[9] + 0.4886 * x[2] * x[7] * x[8] * x[10] -\n        0.0693 * x[2] * x[7] * x[9] * x[10] + 0.6415 * x[2] * x[8] * x[9] * x[10] -\n        0.1695 * x[3] * x[4] * x[5] * x[6] - 0.662 * x[3] * x[4] * x[5] * x[7] -\n        0.6558 * x[3] * x[4] * x[5] * x[8] - 0.2137 * x[3] * x[4] * x[5] * x[9] +\n        0.0807 * x[3] * x[4] * x[5] * x[10] +\n        0.2775 * x[3] * x[4] * x[6] * x[7] - 0.639 * x[3] * x[4] * x[6] * x[8] +\n        0.1566 * x[3] * x[4] * x[6] * x[9] +\n        0.4792 * x[3] * x[4] * x[6] * x[10] +\n        0.1403 * x[3] * x[4] * x[7] * x[8] - 0.6095 * x[3] * x[4] * x[7] * x[9] +\n        0.9322 * x[3] * x[4] * x[7] * x[10] - 0.0214 * x[3] * x[4] * x[8] * x[9] +\n        0.3126 * x[3] * x[4] * x[8] * x[10] - 0.6241 * x[3] * x[4] * x[9] * x[10] +\n        0.1136 * x[3] * x[5] * x[6] * x[7] +\n        0.4677 * x[3] * x[5] * x[6] * x[8] - 0.6577 * x[3] * x[5] * x[6] * x[9] +\n        0.3394 * x[3] * x[5] * x[6] * x[10] - 0.7785 * x[3] * x[5] * x[7] * x[8] -\n        0.7024 * x[3] * x[5] * x[7] * x[9] + 0.2443 * x[3] * x[5] * x[7] * x[10] -\n        0.2521 * x[3] * x[5] * x[8] * x[9] + 0.2286 * x[3] * x[5] * x[8] * x[10] -\n        0.0991 * x[3] * x[5] * x[9] * x[10] - 0.7218 * x[3] * x[6] * x[7] * x[8] +\n        0.9204 * x[3] * x[6] * x[7] * x[9] - 0.1743 * x[3] * x[6] * x[7] * x[10] +\n        0.2405 * x[3] * x[6] * x[8] * x[9] +\n        0.1433 * x[3] * x[6] * x[8] * x[10] +\n        0.402 * x[3] * x[6] * x[9] * x[10] +\n        0.7113 * x[3] * x[7] * x[8] * x[9] - 0.14 * x[3] * x[7] * x[8] * x[10] +\n        0.1251 * x[3] * x[7] * x[9] * x[10] +\n        0.0473 * x[3] * x[8] * x[9] * x[10] - 0.5929 * x[4] * x[5] * x[6] * x[7] +\n        0.0649 * x[4] * x[5] * x[6] * x[8] +\n        0.9708 * x[4] * x[5] * x[6] * x[9] +\n        0.6177 * x[4] * x[5] * x[6] * x[10] +\n        0.5806 * x[4] * x[5] * x[7] * x[8] - 0.1607 * x[4] * x[5] * x[7] * x[9] +\n        0.059 * x[4] * x[5] * x[7] * x[10] - 0.8811 * x[4] * x[5] * x[8] * x[9] -\n        0.4492 * x[4] * x[5] * x[8] * x[10] +\n        0.7614 * x[4] * x[5] * x[9] * x[10] +\n        0.2033 * x[4] * x[6] * x[7] * x[8] - 0.9171 * x[4] * x[6] * x[7] * x[9] -\n        0.0382 * x[4] * x[6] * x[7] * x[10] - 0.8299 * x[4] * x[6] * x[8] * x[9] -\n        0.5709 * x[4] * x[6] * x[8] * x[10] - 0.396 * x[4] * x[6] * x[9] * x[10] +\n        0.7934 * x[4] * x[7] * x[8] * x[9] +\n        0.0689 * x[4] * x[7] * x[8] * x[10] - 0.4928 * x[4] * x[7] * x[9] * x[10] -\n        0.4895 * x[4] * x[8] * x[9] * x[10] +\n        0.8422 * x[5] * x[6] * x[7] * x[8] +\n        0.8058 * x[5] * x[6] * x[7] * x[9] - 0.3989 * x[5] * x[6] * x[7] * x[10] -\n        0.7604 * x[5] * x[6] * x[8] * x[9] - 0.2455 * x[5] * x[6] * x[8] * x[10] -\n        0.1685 * x[5] * x[6] * x[9] * x[10] - 0.5593 * x[5] * x[7] * x[8] * x[9] -\n        0.7832 * x[5] * x[7] * x[8] * x[10] +\n        0.0926 * x[5] * x[7] * x[9] * x[10] +\n        0.6215 * x[5] * x[8] * x[9] * x[10] +\n        0.3352 * x[6] * x[7] * x[8] * x[9] +\n        0.3423 * x[6] * x[7] * x[8] * x[10] - 0.8728 * x[6] * x[7] * x[9] * x[10] +\n        0.6484 * x[6] * x[8] * x[9] * x[10] - 0.2626 * x[7] * x[8] * x[9] * x[10] <=\n        14.826\n    )\n    e8 = replace_expr(e8, x)\n    JuMP.add_nonlinear_constraint(m, e8)\n    e9 = :(\n        0.1204 * x[1] * x[3] - 0.6331 * x[1] * x[2] + 0.2074 * x[1] * x[4] -\n        0.0007 * x[1] * x[5] + 0.1524 * x[1] * x[6] - 0.1373 * x[1] * x[7] -\n        0.5286 * x[1] * x[8] + 0.0533 * x[1] * x[9] - 0.0113 * x[1] * x[10] +\n        0.039 * x[2] * x[3] +\n        0.746 * x[2] * x[4] - 0.7493 * x[2] * x[5] - 0.3501 * x[2] * x[6] -\n        0.7046 * x[2] * x[7] + 0.623 * x[2] * x[8] - 0.3282 * x[2] * x[9] +\n        0.2535 * x[2] * x[10] +\n        0.7369 * x[3] * x[4] - 0.3179 * x[3] * x[5] - 0.7554 * x[3] * x[6] +\n        0.3384 * x[3] * x[7] +\n        0.7428 * x[3] * x[8] +\n        0.6871 * x[3] * x[9] - 0.2774 * x[3] * x[10] + 0.1942 * x[4] * x[5] -\n        0.0372 * x[4] * x[6] +\n        0.9036 * x[4] * x[7] +\n        0.9891 * x[4] * x[8] +\n        0.2623 * x[4] * x[9] +\n        0.4058 * x[4] * x[10] +\n        0.2905 * x[5] * x[6] +\n        0.8707 * x[5] * x[7] - 0.6906 * x[5] * x[8] +\n        0.0175 * x[5] * x[9] +\n        0.7644 * x[5] * x[10] +\n        0.1747 * x[6] * x[7] - 0.3217 * x[6] * x[8] - 0.3756 * x[6] * x[9] -\n        0.4446 * x[6] * x[10] - 0.5191 * x[7] * x[8] + 0.8229 * x[7] * x[9] -\n        0.0585 * x[7] * x[10] +\n        0.7931 * x[8] * x[9] +\n        0.2165 * x[8] * x[10] +\n        0.3018 * x[9] * x[10] - 0.6853 * x[1] + 0.4834 * x[2] - 0.9677 * x[3] +\n        0.9793 * x[4] - 0.3145 * x[5] + 0.9356 * x[6] - 0.651 * x[7] - 0.7873 * x[8] +\n        0.5914 * x[9] - 0.82 * x[10] + 0.6907 * x[1] * x[2] * x[4] -\n        0.4133 * x[1] * x[2] * x[3] + 0.0963 * x[1] * x[2] * x[5] -\n        0.2825 * x[1] * x[2] * x[6] +\n        0.0354 * x[1] * x[2] * x[7] +\n        0.5125 * x[1] * x[2] * x[8] +\n        0.9351 * x[1] * x[2] * x[9] +\n        0.7973 * x[1] * x[2] * x[10] - 0.8916 * x[1] * x[3] * x[4] -\n        0.7597 * x[1] * x[3] * x[5] +\n        0.2381 * x[1] * x[3] * x[6] +\n        0.0077 * x[1] * x[3] * x[7] +\n        0.3442 * x[1] * x[3] * x[8] +\n        0.1405 * x[1] * x[3] * x[9] +\n        0.8568 * x[1] * x[3] * x[10] - 0.261 * x[1] * x[4] * x[5] -\n        0.8792 * x[1] * x[4] * x[6] - 0.0695 * x[1] * x[4] * x[7] -\n        0.827 * x[1] * x[4] * x[8] +\n        0.5092 * x[1] * x[4] * x[9] +\n        0.4796 * x[1] * x[4] * x[10] - 0.7576 * x[1] * x[5] * x[6] -\n        0.2986 * x[1] * x[5] * x[7] - 0.6192 * x[1] * x[5] * x[8] -\n        0.8556 * x[1] * x[5] * x[9] - 0.0737 * x[1] * x[5] * x[10] -\n        0.0614 * x[1] * x[6] * x[7] - 0.0832 * x[1] * x[6] * x[8] -\n        0.6275 * x[1] * x[6] * x[9] - 0.4122 * x[1] * x[6] * x[10] +\n        0.1479 * x[1] * x[7] * x[8] - 0.4795 * x[1] * x[7] * x[9] +\n        0.4531 * x[1] * x[7] * x[10] - 0.564 * x[1] * x[8] * x[9] -\n        0.7735 * x[1] * x[8] * x[10] +\n        0.5994 * x[1] * x[9] * x[10] +\n        0.5007 * x[2] * x[3] * x[4] +\n        0.5843 * x[2] * x[3] * x[5] - 0.436 * x[2] * x[3] * x[6] -\n        0.2484 * x[2] * x[3] * x[7] +\n        0.5402 * x[2] * x[3] * x[8] +\n        0.4467 * x[2] * x[3] * x[9] - 0.7388 * x[2] * x[3] * x[10] +\n        0.449 * x[2] * x[4] * x[5] +\n        0.2 * x[2] * x[4] * x[6] - 0.2227 * x[2] * x[4] * x[7] +\n        0.1216 * x[2] * x[4] * x[8] - 0.1403 * x[2] * x[4] * x[9] +\n        0.2873 * x[2] * x[4] * x[10] - 0.9251 * x[2] * x[5] * x[6] -\n        0.9097 * x[2] * x[5] * x[7] - 0.299 * x[2] * x[5] * x[8] -\n        0.037 * x[2] * x[5] * x[9] +\n        0.1356 * x[2] * x[5] * x[10] +\n        0.1424 * x[2] * x[6] * x[7] +\n        0.9099 * x[2] * x[6] * x[8] - 0.8295 * x[2] * x[6] * x[9] -\n        0.9163 * x[2] * x[6] * x[10] - 0.886 * x[2] * x[7] * x[8] -\n        0.5395 * x[2] * x[7] * x[9] +\n        0.4885 * x[2] * x[7] * x[10] +\n        0.0733 * x[2] * x[8] * x[9] +\n        0.6171 * x[2] * x[8] * x[10] +\n        0.9443 * x[2] * x[9] * x[10] +\n        0.8452 * x[3] * x[4] * x[5] +\n        0.2589 * x[3] * x[4] * x[6] - 0.3954 * x[3] * x[4] * x[7] +\n        0.2099 * x[3] * x[4] * x[8] - 0.4274 * x[3] * x[4] * x[9] +\n        0.7638 * x[3] * x[4] * x[10] +\n        0.0518 * x[3] * x[5] * x[6] - 0.7951 * x[3] * x[5] * x[7] -\n        0.0508 * x[3] * x[5] * x[8] - 0.2861 * x[3] * x[5] * x[9] +\n        0.0163 * x[3] * x[5] * x[10] +\n        0.3989 * x[3] * x[6] * x[7] - 0.3631 * x[3] * x[6] * x[8] -\n        0.1875 * x[3] * x[6] * x[9] +\n        0.6995 * x[3] * x[6] * x[10] +\n        0.5373 * x[3] * x[7] * x[8] +\n        0.7748 * x[3] * x[7] * x[9] +\n        0.0892 * x[3] * x[7] * x[10] +\n        0.093 * x[3] * x[8] * x[9] - 0.4689 * x[3] * x[8] * x[10] +\n        0.4298 * x[3] * x[9] * x[10] - 0.4441 * x[4] * x[5] * x[6] -\n        0.9731 * x[4] * x[5] * x[7] - 0.0911 * x[4] * x[5] * x[8] -\n        0.8933 * x[4] * x[5] * x[9] - 0.3553 * x[4] * x[5] * x[10] -\n        0.1372 * x[4] * x[6] * x[7] +\n        0.239 * x[4] * x[6] * x[8] +\n        0.9347 * x[4] * x[6] * x[9] - 0.8911 * x[4] * x[6] * x[10] -\n        0.528 * x[4] * x[7] * x[8] - 0.13 * x[4] * x[7] * x[9] -\n        0.2034 * x[4] * x[7] * x[10] - 0.69 * x[4] * x[8] * x[9] +\n        0.2966 * x[4] * x[8] * x[10] +\n        0.9593 * x[4] * x[9] * x[10] - 0.9582 * x[5] * x[6] * x[7] +\n        0.4532 * x[5] * x[6] * x[8] +\n        0.5574 * x[5] * x[6] * x[9] - 0.4571 * x[5] * x[6] * x[10] -\n        0.9344 * x[5] * x[7] * x[8] - 0.1114 * x[5] * x[7] * x[9] +\n        0.477 * x[5] * x[7] * x[10] - 0.0515 * x[5] * x[8] * x[9] -\n        0.456 * x[5] * x[8] * x[10] +\n        0.1071 * x[5] * x[9] * x[10] +\n        0.3639 * x[6] * x[7] * x[8] +\n        0.1604 * x[6] * x[7] * x[9] +\n        0.7412 * x[6] * x[7] * x[10] - 0.842 * x[6] * x[8] * x[9] +\n        0.2298 * x[6] * x[8] * x[10] - 0.7632 * x[6] * x[9] * x[10] +\n        0.467 * x[7] * x[8] * x[9] - 0.3678 * x[7] * x[8] * x[10] -\n        0.0498 * x[7] * x[9] * x[10] +\n        0.2148 * x[8] * x[9] * x[10] +\n        0.607 * x[1] * x[2] * x[3] * x[4] - 0.984 * x[1] * x[2] * x[3] * x[5] +\n        0.1984 * x[1] * x[2] * x[3] * x[6] - 0.3261 * x[1] * x[2] * x[3] * x[7] +\n        0.9942 * x[1] * x[2] * x[3] * x[8] +\n        0.4899 * x[1] * x[2] * x[3] * x[9] +\n        0.1859 * x[1] * x[2] * x[3] * x[10] +\n        0.7152 * x[1] * x[2] * x[4] * x[5] +\n        0.6231 * x[1] * x[2] * x[4] * x[6] - 0.3239 * x[1] * x[2] * x[4] * x[7] +\n        0.6656 * x[1] * x[2] * x[4] * x[8] +\n        0.6511 * x[1] * x[2] * x[4] * x[9] +\n        0.4798 * x[1] * x[2] * x[4] * x[10] - 0.6549 * x[1] * x[2] * x[5] * x[6] +\n        0.3657 * x[1] * x[2] * x[5] * x[7] +\n        0.2469 * x[1] * x[2] * x[5] * x[8] +\n        0.1256 * x[1] * x[2] * x[5] * x[9] - 0.83 * x[1] * x[2] * x[5] * x[10] +\n        0.8632 * x[1] * x[2] * x[6] * x[7] - 0.6316 * x[1] * x[2] * x[6] * x[8] +\n        0.901 * x[1] * x[2] * x[6] * x[9] +\n        0.2282 * x[1] * x[2] * x[6] * x[10] - 0.3158 * x[1] * x[2] * x[7] * x[8] -\n        0.9495 * x[1] * x[2] * x[7] * x[9] + 0.379 * x[1] * x[2] * x[7] * x[10] -\n        0.7787 * x[1] * x[2] * x[8] * x[9] - 0.3534 * x[1] * x[2] * x[8] * x[10] +\n        0.0053 * x[1] * x[2] * x[9] * x[10] - 0.1876 * x[1] * x[3] * x[4] * x[5] -\n        0.502 * x[1] * x[3] * x[4] * x[6] +\n        0.1311 * x[1] * x[3] * x[4] * x[7] +\n        0.6431 * x[1] * x[3] * x[4] * x[8] +\n        0.3694 * x[1] * x[3] * x[4] * x[9] - 0.7882 * x[1] * x[3] * x[4] * x[10] -\n        0.3699 * x[1] * x[3] * x[5] * x[6] - 0.874 * x[1] * x[3] * x[5] * x[7] -\n        0.4416 * x[1] * x[3] * x[5] * x[8] +\n        0.2313 * x[1] * x[3] * x[5] * x[9] +\n        0.357 * x[1] * x[3] * x[5] * x[10] +\n        0.1096 * x[1] * x[3] * x[6] * x[7] +\n        0.9751 * x[1] * x[3] * x[6] * x[8] +\n        0.4229 * x[1] * x[3] * x[6] * x[9] - 0.0638 * x[1] * x[3] * x[6] * x[10] +\n        0.9879 * x[1] * x[3] * x[7] * x[8] +\n        0.8635 * x[1] * x[3] * x[7] * x[9] +\n        0.4333 * x[1] * x[3] * x[7] * x[10] +\n        0.8267 * x[1] * x[3] * x[8] * x[9] +\n        0.3304 * x[1] * x[3] * x[8] * x[10] +\n        0.7375 * x[1] * x[3] * x[9] * x[10] +\n        0.1234 * x[1] * x[4] * x[5] * x[6] - 0.2028 * x[1] * x[4] * x[5] * x[7] +\n        0.4864 * x[1] * x[4] * x[5] * x[8] +\n        0.4254 * x[1] * x[4] * x[5] * x[9] - 0.7986 * x[1] * x[4] * x[5] * x[10] -\n        0.3318 * x[1] * x[4] * x[6] * x[7] +\n        0.7505 * x[1] * x[4] * x[6] * x[8] +\n        0.8088 * x[1] * x[4] * x[6] * x[9] - 0.4503 * x[1] * x[4] * x[6] * x[10] +\n        0.8307 * x[1] * x[4] * x[7] * x[8] - 0.9624 * x[1] * x[4] * x[7] * x[9] -\n        0.172 * x[1] * x[4] * x[7] * x[10] + 0.2328 * x[1] * x[4] * x[8] * x[9] -\n        0.0483 * x[1] * x[4] * x[8] * x[10] - 0.8543 * x[1] * x[4] * x[9] * x[10] -\n        0.1414 * x[1] * x[5] * x[6] * x[7] - 0.6745 * x[1] * x[5] * x[6] * x[8] +\n        0.2956 * x[1] * x[5] * x[6] * x[9] - 0.9646 * x[1] * x[5] * x[6] * x[10] +\n        0.6631 * x[1] * x[5] * x[7] * x[8] - 0.921 * x[1] * x[5] * x[7] * x[9] +\n        0.7216 * x[1] * x[5] * x[7] * x[10] - 0.0916 * x[1] * x[5] * x[8] * x[9] +\n        0.5066 * x[1] * x[5] * x[8] * x[10] - 0.2279 * x[1] * x[5] * x[9] * x[10] +\n        0.4388 * x[1] * x[6] * x[7] * x[8] +\n        0.1251 * x[1] * x[6] * x[7] * x[9] - 0.4666 * x[1] * x[6] * x[7] * x[10] -\n        0.6096 * x[1] * x[6] * x[8] * x[9] - 0.1296 * x[1] * x[6] * x[8] * x[10] +\n        0.147 * x[1] * x[6] * x[9] * x[10] - 0.8773 * x[1] * x[7] * x[8] * x[9] +\n        0.3256 * x[1] * x[7] * x[8] * x[10] +\n        0.1917 * x[1] * x[7] * x[9] * x[10] - 0.7454 * x[1] * x[8] * x[9] * x[10] +\n        0.953 * x[2] * x[3] * x[4] * x[5] - 0.2524 * x[2] * x[3] * x[4] * x[6] +\n        0.6998 * x[2] * x[3] * x[4] * x[7] +\n        0.9019 * x[2] * x[3] * x[4] * x[8] +\n        0.0886 * x[2] * x[3] * x[4] * x[9] - 0.745 * x[2] * x[3] * x[4] * x[10] +\n        0.7499 * x[2] * x[3] * x[5] * x[6] +\n        0.064 * x[2] * x[3] * x[5] * x[7] - 0.919 * x[2] * x[3] * x[5] * x[8] -\n        0.9064 * x[2] * x[3] * x[5] * x[9] + 0.2797 * x[2] * x[3] * x[5] * x[10] -\n        0.6761 * x[2] * x[3] * x[6] * x[7] - 0.9433 * x[2] * x[3] * x[6] * x[8] +\n        0.4738 * x[2] * x[3] * x[6] * x[9] - 0.469 * x[2] * x[3] * x[6] * x[10] -\n        0.6195 * x[2] * x[3] * x[7] * x[8] +\n        0.4109 * x[2] * x[3] * x[7] * x[9] +\n        0.774 * x[2] * x[3] * x[7] * x[10] - 0.6599 * x[2] * x[3] * x[8] * x[9] +\n        0.5277 * x[2] * x[3] * x[8] * x[10] - 0.207 * x[2] * x[3] * x[9] * x[10] +\n        0.7556 * x[2] * x[4] * x[5] * x[6] - 0.0444 * x[2] * x[4] * x[5] * x[7] -\n        0.6359 * x[2] * x[4] * x[5] * x[8] +\n        0.5783 * x[2] * x[4] * x[5] * x[9] +\n        0.4262 * x[2] * x[4] * x[5] * x[10] - 0.5666 * x[2] * x[4] * x[6] * x[7] +\n        0.4188 * x[2] * x[4] * x[6] * x[8] +\n        0.3495 * x[2] * x[4] * x[6] * x[9] - 0.6488 * x[2] * x[4] * x[6] * x[10] -\n        0.9492 * x[2] * x[4] * x[7] * x[8] - 0.2321 * x[2] * x[4] * x[7] * x[9] -\n        0.0055 * x[2] * x[4] * x[7] * x[10] - 0.556 * x[2] * x[4] * x[8] * x[9] +\n        0.3175 * x[2] * x[4] * x[8] * x[10] +\n        0.392 * x[2] * x[4] * x[9] * x[10] +\n        0.7571 * x[2] * x[5] * x[6] * x[7] - 0.123 * x[2] * x[5] * x[6] * x[8] -\n        0.9402 * x[2] * x[5] * x[6] * x[9] + 0.9707 * x[2] * x[5] * x[6] * x[10] -\n        0.9632 * x[2] * x[5] * x[7] * x[8] +\n        0.5879 * x[2] * x[5] * x[7] * x[9] +\n        0.7006 * x[2] * x[5] * x[7] * x[10] +\n        0.3368 * x[2] * x[5] * x[8] * x[9] +\n        0.7005 * x[2] * x[5] * x[8] * x[10] - 0.9946 * x[2] * x[5] * x[9] * x[10] -\n        0.5453 * x[2] * x[6] * x[7] * x[8] - 0.6007 * x[2] * x[6] * x[7] * x[9] +\n        0.1658 * x[2] * x[6] * x[7] * x[10] +\n        0.5857 * x[2] * x[6] * x[8] * x[9] - 0.6648 * x[2] * x[6] * x[8] * x[10] -\n        0.3842 * x[2] * x[6] * x[9] * x[10] - 0.8785 * x[2] * x[7] * x[8] * x[9] -\n        0.3002 * x[2] * x[7] * x[8] * x[10] - 0.1467 * x[2] * x[7] * x[9] * x[10] +\n        0.5581 * x[2] * x[8] * x[9] * x[10] +\n        0.255 * x[3] * x[4] * x[5] * x[6] - 0.3062 * x[3] * x[4] * x[5] * x[7] -\n        0.1995 * x[3] * x[4] * x[5] * x[8] +\n        0.7855 * x[3] * x[4] * x[5] * x[9] +\n        0.076 * x[3] * x[4] * x[5] * x[10] +\n        0.9889 * x[3] * x[4] * x[6] * x[7] +\n        0.6766 * x[3] * x[4] * x[6] * x[8] +\n        0.3158 * x[3] * x[4] * x[6] * x[9] - 0.8643 * x[3] * x[4] * x[6] * x[10] -\n        0.8024 * x[3] * x[4] * x[7] * x[8] - 0.6817 * x[3] * x[4] * x[7] * x[9] -\n        0.9275 * x[3] * x[4] * x[7] * x[10] + 0.5669 * x[3] * x[4] * x[8] * x[9] -\n        0.8213 * x[3] * x[4] * x[8] * x[10] +\n        0.3068 * x[3] * x[4] * x[9] * x[10] +\n        0.9216 * x[3] * x[5] * x[6] * x[7] +\n        0.8245 * x[3] * x[5] * x[6] * x[8] - 0.387 * x[3] * x[5] * x[6] * x[9] +\n        0.2332 * x[3] * x[5] * x[6] * x[10] - 0.2114 * x[3] * x[5] * x[7] * x[8] -\n        0.5222 * x[3] * x[5] * x[7] * x[9] - 0.1285 * x[3] * x[5] * x[7] * x[10] +\n        0.2733 * x[3] * x[5] * x[8] * x[9] - 0.5025 * x[3] * x[5] * x[8] * x[10] -\n        0.3684 * x[3] * x[5] * x[9] * x[10] - 0.1281 * x[3] * x[6] * x[7] * x[8] +\n        0.7043 * x[3] * x[6] * x[7] * x[9] +\n        0.4752 * x[3] * x[6] * x[7] * x[10] +\n        0.4398 * x[3] * x[6] * x[8] * x[9] - 0.2425 * x[3] * x[6] * x[8] * x[10] +\n        0.0265 * x[3] * x[6] * x[9] * x[10] +\n        0.1761 * x[3] * x[7] * x[8] * x[9] +\n        0.6789 * x[3] * x[7] * x[8] * x[10] - 0.2652 * x[3] * x[7] * x[9] * x[10] -\n        0.7416 * x[3] * x[8] * x[9] * x[10] +\n        0.3104 * x[4] * x[5] * x[6] * x[7] +\n        0.5838 * x[4] * x[5] * x[6] * x[8] - 0.2481 * x[4] * x[5] * x[6] * x[9] -\n        0.5737 * x[4] * x[5] * x[6] * x[10] +\n        0.1995 * x[4] * x[5] * x[7] * x[8] +\n        0.7254 * x[4] * x[5] * x[7] * x[9] - 0.6076 * x[4] * x[5] * x[7] * x[10] +\n        0.2583 * x[4] * x[5] * x[8] * x[9] +\n        0.3748 * x[4] * x[5] * x[8] * x[10] - 0.821 * x[4] * x[5] * x[9] * x[10] -\n        0.7231 * x[4] * x[6] * x[7] * x[8] +\n        0.792 * x[4] * x[6] * x[7] * x[9] +\n        0.1935 * x[4] * x[6] * x[7] * x[10] +\n        0.3677 * x[4] * x[6] * x[8] * x[9] - 0.3893 * x[4] * x[6] * x[8] * x[10] -\n        0.5531 * x[4] * x[6] * x[9] * x[10] + 0.3063 * x[4] * x[7] * x[8] * x[9] -\n        0.3756 * x[4] * x[7] * x[8] * x[10] + 0.9983 * x[4] * x[7] * x[9] * x[10] -\n        0.4544 * x[4] * x[8] * x[9] * x[10] +\n        0.8651 * x[5] * x[6] * x[7] * x[8] +\n        0.8738 * x[5] * x[6] * x[7] * x[9] +\n        0.7123 * x[5] * x[6] * x[7] * x[10] - 0.789 * x[5] * x[6] * x[8] * x[9] -\n        0.9015 * x[5] * x[6] * x[8] * x[10] + 0.8536 * x[5] * x[6] * x[9] * x[10] -\n        0.6222 * x[5] * x[7] * x[8] * x[9] + 0.531 * x[5] * x[7] * x[8] * x[10] -\n        0.7534 * x[5] * x[7] * x[9] * x[10] +\n        0.1807 * x[5] * x[8] * x[9] * x[10] +\n        0.8496 * x[6] * x[7] * x[8] * x[9] +\n        0.0791 * x[6] * x[7] * x[8] * x[10] +\n        0.8057 * x[6] * x[7] * x[9] * x[10] - 0.81 * x[6] * x[8] * x[9] * x[10] +\n        0.7906 * x[7] * x[8] * x[9] * x[10] <= 9.957\n    )\n    e9 = replace_expr(e9, x)\n    JuMP.add_nonlinear_constraint(m, e9)\n    e10 = :(\n        (-0.6891 * x[1] * x[2]) - 0.416 * x[1] * x[3] - 0.4715 * x[1] * x[4] +\n        0.6858 * x[1] * x[5] - 0.4223 * x[1] * x[6] +\n        0.7652 * x[1] * x[7] +\n        0.7955 * x[1] * x[8] +\n        0.5377 * x[1] * x[9] +\n        0.9667 * x[1] * x[10] - 0.8157 * x[2] * x[3] - 0.9023 * x[2] * x[4] -\n        0.5467 * x[2] * x[5] - 0.3177 * x[2] * x[6] - 0.9398 * x[2] * x[7] +\n        0.2349 * x[2] * x[8] +\n        0.001 * x[2] * x[9] +\n        0.3641 * x[2] * x[10] - 0.9461 * x[3] * x[4] +\n        0.1124 * x[3] * x[5] +\n        0.0992 * x[3] * x[6] +\n        0.0372 * x[3] * x[7] - 0.6933 * x[3] * x[8] + 0.9793 * x[3] * x[9] -\n        0.2495 * x[3] * x[10] - 0.865 * x[4] * x[5] - 0.5344 * x[4] * x[6] +\n        0.3443 * x[4] * x[7] +\n        0.0946 * x[4] * x[8] +\n        0.99 * x[4] * x[9] +\n        0.1293 * x[4] * x[10] - 0.1439 * x[5] * x[6] - 0.1023 * x[5] * x[7] +\n        0.4527 * x[5] * x[8] - 0.9526 * x[5] * x[9] - 0.9404 * x[5] * x[10] -\n        0.4876 * x[6] * x[7] - 0.4892 * x[6] * x[8] - 0.8809 * x[6] * x[9] +\n        0.5844 * x[6] * x[10] - 0.5909 * x[7] * x[8] +\n        0.8432 * x[7] * x[9] +\n        0.4261 * x[7] * x[10] - 0.7159 * x[8] * x[9] +\n        0.6584 * x[8] * x[10] +\n        0.0654 * x[9] * x[10] +\n        0.9716 * x[1] +\n        0.3374 * x[2] - 0.6073 * x[3] - 0.4237 * x[4] +\n        0.4155 * x[5] +\n        0.8152 * x[6] - 0.6799 * x[7] - 0.7925 * x[8] - 0.3313 * x[9] -\n        0.8543 * x[10] + (-0.1007 * x[1] * x[2] * x[3]) -\n        0.5326 * x[1] * x[2] * x[4] +\n        0.6566 * x[1] * x[2] * x[5] +\n        0.1937 * x[1] * x[2] * x[6] - 0.9996 * x[1] * x[2] * x[7] -\n        0.5367 * x[1] * x[2] * x[8] - 0.1918 * x[1] * x[2] * x[9] -\n        0.8802 * x[1] * x[2] * x[10] - 0.6497 * x[1] * x[3] * x[4] -\n        0.3399 * x[1] * x[3] * x[5] +\n        0.0515 * x[1] * x[3] * x[6] +\n        0.8846 * x[1] * x[3] * x[7] +\n        0.022 * x[1] * x[3] * x[8] +\n        0.9133 * x[1] * x[3] * x[9] - 0.7262 * x[1] * x[3] * x[10] -\n        0.7918 * x[1] * x[4] * x[5] - 0.6313 * x[1] * x[4] * x[6] +\n        0.9966 * x[1] * x[4] * x[7] - 0.6426 * x[1] * x[4] * x[8] -\n        0.3197 * x[1] * x[4] * x[9] - 0.2285 * x[1] * x[4] * x[10] +\n        0.0003 * x[1] * x[5] * x[6] +\n        0.8027 * x[1] * x[5] * x[7] +\n        0.8966 * x[1] * x[5] * x[8] +\n        0.6134 * x[1] * x[5] * x[9] +\n        0.0598 * x[1] * x[5] * x[10] - 0.9651 * x[1] * x[6] * x[7] +\n        0.9353 * x[1] * x[6] * x[8] +\n        0.8902 * x[1] * x[6] * x[9] - 0.007 * x[1] * x[6] * x[10] +\n        0.5675 * x[1] * x[7] * x[8] +\n        0.8712 * x[1] * x[7] * x[9] +\n        0.2321 * x[1] * x[7] * x[10] - 0.3199 * x[1] * x[8] * x[9] +\n        0.0664 * x[1] * x[8] * x[10] - 0.3827 * x[1] * x[9] * x[10] +\n        0.4324 * x[2] * x[3] * x[4] +\n        0.9173 * x[2] * x[3] * x[5] +\n        0.0144 * x[2] * x[3] * x[6] +\n        0.0691 * x[2] * x[3] * x[7] - 0.2872 * x[2] * x[3] * x[8] -\n        0.8985 * x[2] * x[3] * x[9] +\n        0.0914 * x[2] * x[3] * x[10] +\n        0.1849 * x[2] * x[4] * x[5] - 0.0897 * x[2] * x[4] * x[6] -\n        0.7576 * x[2] * x[4] * x[7] - 0.1726 * x[2] * x[4] * x[8] +\n        0.9337 * x[2] * x[4] * x[9] +\n        0.0318 * x[2] * x[4] * x[10] - 0.2369 * x[2] * x[5] * x[6] +\n        0.9287 * x[2] * x[5] * x[7] - 0.9551 * x[2] * x[5] * x[8] -\n        0.6268 * x[2] * x[5] * x[9] +\n        0.4162 * x[2] * x[5] * x[10] +\n        0.7695 * x[2] * x[6] * x[7] +\n        0.615 * x[2] * x[6] * x[8] +\n        0.4118 * x[2] * x[6] * x[9] - 0.8214 * x[2] * x[6] * x[10] +\n        0.1937 * x[2] * x[7] * x[8] +\n        0.2846 * x[2] * x[7] * x[9] - 0.1472 * x[2] * x[7] * x[10] +\n        0.307 * x[2] * x[8] * x[9] +\n        0.7698 * x[2] * x[8] * x[10] - 0.6545 * x[2] * x[9] * x[10] -\n        0.5534 * x[3] * x[4] * x[5] +\n        0.0359 * x[3] * x[4] * x[6] +\n        0.7667 * x[3] * x[4] * x[7] +\n        0.0927 * x[3] * x[4] * x[8] - 0.5321 * x[3] * x[4] * x[9] -\n        0.4937 * x[3] * x[4] * x[10] +\n        0.7388 * x[3] * x[5] * x[6] +\n        0.9809 * x[3] * x[5] * x[7] +\n        0.0004 * x[3] * x[5] * x[8] +\n        0.695 * x[3] * x[5] * x[9] +\n        0.5494 * x[3] * x[5] * x[10] +\n        0.6195 * x[3] * x[6] * x[7] +\n        0.2356 * x[3] * x[6] * x[8] - 0.1412 * x[3] * x[6] * x[9] +\n        0.7508 * x[3] * x[6] * x[10] - 0.769 * x[3] * x[7] * x[8] -\n        0.1995 * x[3] * x[7] * x[9] + 0.7897 * x[3] * x[7] * x[10] -\n        0.9464 * x[3] * x[8] * x[9] - 0.0035 * x[3] * x[8] * x[10] +\n        0.7893 * x[3] * x[9] * x[10] +\n        0.2009 * x[4] * x[5] * x[6] +\n        0.573 * x[4] * x[5] * x[7] +\n        0.0687 * x[4] * x[5] * x[8] +\n        0.3609 * x[4] * x[5] * x[9] +\n        0.7069 * x[4] * x[5] * x[10] +\n        0.3176 * x[4] * x[6] * x[7] - 0.2025 * x[4] * x[6] * x[8] +\n        0.9283 * x[4] * x[6] * x[9] +\n        0.6098 * x[4] * x[6] * x[10] +\n        0.6859 * x[4] * x[7] * x[8] - 0.3653 * x[4] * x[7] * x[9] -\n        0.406 * x[4] * x[7] * x[10] + 0.6706 * x[4] * x[8] * x[9] -\n        0.4475 * x[4] * x[8] * x[10] - 0.1989 * x[4] * x[9] * x[10] -\n        0.5974 * x[5] * x[6] * x[7] +\n        0.4318 * x[5] * x[6] * x[8] +\n        0.3654 * x[5] * x[6] * x[9] - 0.2119 * x[5] * x[6] * x[10] -\n        0.0018 * x[5] * x[7] * x[8] - 0.9865 * x[5] * x[7] * x[9] -\n        0.8902 * x[5] * x[7] * x[10] - 0.6653 * x[5] * x[8] * x[9] +\n        0.3769 * x[5] * x[8] * x[10] - 0.2194 * x[5] * x[9] * x[10] +\n        0.8789 * x[6] * x[7] * x[8] - 0.7093 * x[6] * x[7] * x[9] +\n        0.3827 * x[6] * x[7] * x[10] - 0.0405 * x[6] * x[8] * x[9] +\n        0.7626 * x[6] * x[8] * x[10] +\n        0.4358 * x[6] * x[9] * x[10] +\n        0.7368 * x[7] * x[8] * x[9] - 0.0174 * x[7] * x[8] * x[10] -\n        0.4531 * x[7] * x[9] * x[10] +\n        0.3375 * x[8] * x[9] * x[10] +\n        (-0.4826 * x[1] * x[2] * x[3] * x[4]) - 0.2493 * x[1] * x[2] * x[3] * x[5] +\n        0.5075 * x[1] * x[2] * x[3] * x[6] - 0.6548 * x[1] * x[2] * x[3] * x[7] -\n        0.7159 * x[1] * x[2] * x[3] * x[8] - 0.7049 * x[1] * x[2] * x[3] * x[9] -\n        0.3438 * x[1] * x[2] * x[3] * x[10] - 0.1976 * x[1] * x[2] * x[4] * x[5] +\n        0.0079 * x[1] * x[2] * x[4] * x[6] - 0.8311 * x[1] * x[2] * x[4] * x[7] +\n        0.3371 * x[1] * x[2] * x[4] * x[8] +\n        0.6852 * x[1] * x[2] * x[4] * x[9] +\n        0.2669 * x[1] * x[2] * x[4] * x[10] +\n        0.3508 * x[1] * x[2] * x[5] * x[6] - 0.281 * x[1] * x[2] * x[5] * x[7] -\n        0.1383 * x[1] * x[2] * x[5] * x[8] - 0.5659 * x[1] * x[2] * x[5] * x[9] +\n        0.008 * x[1] * x[2] * x[5] * x[10] - 0.2438 * x[1] * x[2] * x[6] * x[7] +\n        0.8352 * x[1] * x[2] * x[6] * x[8] - 0.6792 * x[1] * x[2] * x[6] * x[9] -\n        0.505 * x[1] * x[2] * x[6] * x[10] - 0.117 * x[1] * x[2] * x[7] * x[8] -\n        0.3067 * x[1] * x[2] * x[7] * x[9] - 0.3803 * x[1] * x[2] * x[7] * x[10] +\n        0.7882 * x[1] * x[2] * x[8] * x[9] +\n        0.3372 * x[1] * x[2] * x[8] * x[10] - 0.919 * x[1] * x[2] * x[9] * x[10] -\n        0.7383 * x[1] * x[3] * x[4] * x[5] +\n        0.7541 * x[1] * x[3] * x[4] * x[6] +\n        0.5834 * x[1] * x[3] * x[4] * x[7] +\n        0.1474 * x[1] * x[3] * x[4] * x[8] +\n        0.0948 * x[1] * x[3] * x[4] * x[9] - 0.3359 * x[1] * x[3] * x[4] * x[10] +\n        0.165 * x[1] * x[3] * x[5] * x[6] +\n        0.3496 * x[1] * x[3] * x[5] * x[7] +\n        0.6279 * x[1] * x[3] * x[5] * x[8] - 0.6031 * x[1] * x[3] * x[5] * x[9] +\n        0.1115 * x[1] * x[3] * x[5] * x[10] - 0.7796 * x[1] * x[3] * x[6] * x[7] -\n        0.5661 * x[1] * x[3] * x[6] * x[8] +\n        0.1693 * x[1] * x[3] * x[6] * x[9] +\n        0.957 * x[1] * x[3] * x[6] * x[10] +\n        0.7301 * x[1] * x[3] * x[7] * x[8] - 0.1917 * x[1] * x[3] * x[7] * x[9] +\n        0.9096 * x[1] * x[3] * x[7] * x[10] - 0.2321 * x[1] * x[3] * x[8] * x[9] -\n        0.1408 * x[1] * x[3] * x[8] * x[10] + 0.9235 * x[1] * x[3] * x[9] * x[10] -\n        0.5794 * x[1] * x[4] * x[5] * x[6] + 0.227 * x[1] * x[4] * x[5] * x[7] -\n        0.3337 * x[1] * x[4] * x[5] * x[8] - 0.3646 * x[1] * x[4] * x[5] * x[9] -\n        0.4327 * x[1] * x[4] * x[5] * x[10] - 0.1094 * x[1] * x[4] * x[6] * x[7] +\n        0.3825 * x[1] * x[4] * x[6] * x[8] +\n        0.5071 * x[1] * x[4] * x[6] * x[9] +\n        0.8944 * x[1] * x[4] * x[6] * x[10] - 0.3627 * x[1] * x[4] * x[7] * x[8] +\n        0.065 * x[1] * x[4] * x[7] * x[9] +\n        0.7137 * x[1] * x[4] * x[7] * x[10] +\n        0.5367 * x[1] * x[4] * x[8] * x[9] +\n        0.1169 * x[1] * x[4] * x[8] * x[10] +\n        0.1142 * x[1] * x[4] * x[9] * x[10] - 0.814 * x[1] * x[5] * x[6] * x[7] +\n        0.7162 * x[1] * x[5] * x[6] * x[8] +\n        0.4038 * x[1] * x[5] * x[6] * x[9] +\n        0.3275 * x[1] * x[5] * x[6] * x[10] - 0.7578 * x[1] * x[5] * x[7] * x[8] +\n        0.2681 * x[1] * x[5] * x[7] * x[9] +\n        0.618 * x[1] * x[5] * x[7] * x[10] +\n        0.8112 * x[1] * x[5] * x[8] * x[9] +\n        0.652 * x[1] * x[5] * x[8] * x[10] +\n        0.5574 * x[1] * x[5] * x[9] * x[10] +\n        0.1105 * x[1] * x[6] * x[7] * x[8] - 0.685 * x[1] * x[6] * x[7] * x[9] +\n        0.2517 * x[1] * x[6] * x[7] * x[10] - 0.2113 * x[1] * x[6] * x[8] * x[9] -\n        0.9952 * x[1] * x[6] * x[8] * x[10] - 0.9702 * x[1] * x[6] * x[9] * x[10] -\n        0.3537 * x[1] * x[7] * x[8] * x[9] + 0.326 * x[1] * x[7] * x[8] * x[10] -\n        0.2615 * x[1] * x[7] * x[9] * x[10] - 0.1564 * x[1] * x[8] * x[9] * x[10] +\n        0.9175 * x[2] * x[3] * x[4] * x[5] - 0.5903 * x[2] * x[3] * x[4] * x[6] +\n        0.9029 * x[2] * x[3] * x[4] * x[7] +\n        0.3648 * x[2] * x[3] * x[4] * x[8] - 0.9126 * x[2] * x[3] * x[4] * x[9] -\n        0.644 * x[2] * x[3] * x[4] * x[10] +\n        0.7789 * x[2] * x[3] * x[5] * x[6] +\n        0.0203 * x[2] * x[3] * x[5] * x[7] +\n        0.8897 * x[2] * x[3] * x[5] * x[8] - 0.5469 * x[2] * x[3] * x[5] * x[9] -\n        0.2008 * x[2] * x[3] * x[5] * x[10] +\n        0.6762 * x[2] * x[3] * x[6] * x[7] +\n        0.3243 * x[2] * x[3] * x[6] * x[8] - 0.6903 * x[2] * x[3] * x[6] * x[9] +\n        0.2058 * x[2] * x[3] * x[6] * x[10] +\n        0.3876 * x[2] * x[3] * x[7] * x[8] +\n        0.3695 * x[2] * x[3] * x[7] * x[9] +\n        0.0322 * x[2] * x[3] * x[7] * x[10] - 0.502 * x[2] * x[3] * x[8] * x[9] -\n        0.9679 * x[2] * x[3] * x[8] * x[10] + 0.6939 * x[2] * x[3] * x[9] * x[10] -\n        0.7335 * x[2] * x[4] * x[5] * x[6] - 0.0071 * x[2] * x[4] * x[5] * x[7] +\n        0.7911 * x[2] * x[4] * x[5] * x[8] - 0.8217 * x[2] * x[4] * x[5] * x[9] -\n        0.6734 * x[2] * x[4] * x[5] * x[10] + 0.5343 * x[2] * x[4] * x[6] * x[7] -\n        0.6164 * x[2] * x[4] * x[6] * x[8] - 0.0679 * x[2] * x[4] * x[6] * x[9] -\n        0.3156 * x[2] * x[4] * x[6] * x[10] - 0.9986 * x[2] * x[4] * x[7] * x[8] -\n        0.0287 * x[2] * x[4] * x[7] * x[9] + 0.3193 * x[2] * x[4] * x[7] * x[10] -\n        0.92 * x[2] * x[4] * x[8] * x[9] - 0.147 * x[2] * x[4] * x[8] * x[10] -\n        0.9656 * x[2] * x[4] * x[9] * x[10] - 0.9044 * x[2] * x[5] * x[6] * x[7] +\n        0.9256 * x[2] * x[5] * x[6] * x[8] - 0.0849 * x[2] * x[5] * x[6] * x[9] -\n        0.2946 * x[2] * x[5] * x[6] * x[10] + 0.4543 * x[2] * x[5] * x[7] * x[8] -\n        0.6516 * x[2] * x[5] * x[7] * x[9] - 0.2951 * x[2] * x[5] * x[7] * x[10] -\n        0.5713 * x[2] * x[5] * x[8] * x[9] +\n        0.9107 * x[2] * x[5] * x[8] * x[10] +\n        0.5607 * x[2] * x[5] * x[9] * x[10] +\n        0.5813 * x[2] * x[6] * x[7] * x[8] +\n        0.1879 * x[2] * x[6] * x[7] * x[9] +\n        0.0879 * x[2] * x[6] * x[7] * x[10] - 0.1947 * x[2] * x[6] * x[8] * x[9] -\n        0.5199 * x[2] * x[6] * x[8] * x[10] - 0.661 * x[2] * x[6] * x[9] * x[10] +\n        0.7548 * x[2] * x[7] * x[8] * x[9] - 0.8094 * x[2] * x[7] * x[8] * x[10] -\n        0.8729 * x[2] * x[7] * x[9] * x[10] + 0.703 * x[2] * x[8] * x[9] * x[10] -\n        0.6193 * x[3] * x[4] * x[5] * x[6] +\n        0.863 * x[3] * x[4] * x[5] * x[7] +\n        0.3731 * x[3] * x[4] * x[5] * x[8] +\n        0.975 * x[3] * x[4] * x[5] * x[9] - 0.9151 * x[3] * x[4] * x[5] * x[10] -\n        0.1013 * x[3] * x[4] * x[6] * x[7] - 0.7563 * x[3] * x[4] * x[6] * x[8] -\n        0.9394 * x[3] * x[4] * x[6] * x[9] - 0.1056 * x[3] * x[4] * x[6] * x[10] +\n        0.5528 * x[3] * x[4] * x[7] * x[8] - 0.4469 * x[3] * x[4] * x[7] * x[9] -\n        0.6919 * x[3] * x[4] * x[7] * x[10] + 0.6454 * x[3] * x[4] * x[8] * x[9] -\n        0.7436 * x[3] * x[4] * x[8] * x[10] - 0.4406 * x[3] * x[4] * x[9] * x[10] -\n        0.6553 * x[3] * x[5] * x[6] * x[7] + 0.0815 * x[3] * x[5] * x[6] * x[8] -\n        0.2592 * x[3] * x[5] * x[6] * x[9] - 0.3449 * x[3] * x[5] * x[6] * x[10] -\n        0.723 * x[3] * x[5] * x[7] * x[8] + 0.7367 * x[3] * x[5] * x[7] * x[9] -\n        0.5166 * x[3] * x[5] * x[7] * x[10] - 0.6852 * x[3] * x[5] * x[8] * x[9] +\n        0.5099 * x[3] * x[5] * x[8] * x[10] - 0.1606 * x[3] * x[5] * x[9] * x[10] -\n        0.8887 * x[3] * x[6] * x[7] * x[8] +\n        0.499 * x[3] * x[6] * x[7] * x[9] +\n        0.6686 * x[3] * x[6] * x[7] * x[10] +\n        0.4415 * x[3] * x[6] * x[8] * x[9] - 0.2126 * x[3] * x[6] * x[8] * x[10] -\n        0.8338 * x[3] * x[6] * x[9] * x[10] - 0.8861 * x[3] * x[7] * x[8] * x[9] -\n        0.9484 * x[3] * x[7] * x[8] * x[10] - 0.2048 * x[3] * x[7] * x[9] * x[10] -\n        0.1835 * x[3] * x[8] * x[9] * x[10] - 0.2758 * x[4] * x[5] * x[6] * x[7] -\n        0.5844 * x[4] * x[5] * x[6] * x[8] +\n        0.3621 * x[4] * x[5] * x[6] * x[9] +\n        0.6829 * x[4] * x[5] * x[6] * x[10] - 0.5893 * x[4] * x[5] * x[7] * x[8] +\n        0.5491 * x[4] * x[5] * x[7] * x[9] - 0.8351 * x[4] * x[5] * x[7] * x[10] +\n        0.5027 * x[4] * x[5] * x[8] * x[9] +\n        0.7318 * x[4] * x[5] * x[8] * x[10] - 0.8597 * x[4] * x[5] * x[9] * x[10] +\n        0.7574 * x[4] * x[6] * x[7] * x[8] - 0.9517 * x[4] * x[6] * x[7] * x[9] -\n        0.6703 * x[4] * x[6] * x[7] * x[10] +\n        0.1705 * x[4] * x[6] * x[8] * x[9] +\n        0.3118 * x[4] * x[6] * x[8] * x[10] - 0.299 * x[4] * x[6] * x[9] * x[10] +\n        0.1919 * x[4] * x[7] * x[8] * x[9] +\n        0.2 * x[4] * x[7] * x[8] * x[10] +\n        0.0314 * x[4] * x[7] * x[9] * x[10] - 0.9798 * x[4] * x[8] * x[9] * x[10] -\n        0.4391 * x[5] * x[6] * x[7] * x[8] + 0.4177 * x[5] * x[6] * x[7] * x[9] -\n        0.3681 * x[5] * x[6] * x[7] * x[10] - 0.7607 * x[5] * x[6] * x[8] * x[9] +\n        0.6108 * x[5] * x[6] * x[8] * x[10] +\n        0.9076 * x[5] * x[6] * x[9] * x[10] +\n        0.3781 * x[5] * x[7] * x[8] * x[9] +\n        0.4656 * x[5] * x[7] * x[8] * x[10] - 0.965 * x[5] * x[7] * x[9] * x[10] -\n        0.7647 * x[5] * x[8] * x[9] * x[10] - 0.7166 * x[6] * x[7] * x[8] * x[9] -\n        0.7744 * x[6] * x[7] * x[8] * x[10] - 0.1137 * x[6] * x[7] * x[9] * x[10] +\n        0.2768 * x[6] * x[8] * x[9] * x[10] - 0.1211 * x[7] * x[8] * x[9] * x[10] <=\n        84.029\n    )\n    e10 = replace_expr(e10, x)\n    JuMP.add_nonlinear_constraint(m, e10)\n    e11 = :(\n        0.591 * x[1] * x[3] - 0.6987 * x[1] * x[2] + 0.7248 * x[1] * x[4] -\n        0.3342 * x[1] * x[5] +\n        0.2565 * x[1] * x[6] +\n        0.0506 * x[1] * x[7] +\n        0.1018 * x[1] * x[8] +\n        0.6964 * x[1] * x[9] - 0.3124 * x[1] * x[10] - 0.0906 * x[2] * x[3] -\n        0.4594 * x[2] * x[4] - 0.7137 * x[2] * x[5] + 0.6835 * x[2] * x[6] -\n        0.9256 * x[2] * x[7] + 0.8048 * x[2] * x[8] - 0.8525 * x[2] * x[9] +\n        0.6184 * x[2] * x[10] +\n        0.6039 * x[3] * x[4] - 0.1299 * x[3] * x[5] +\n        0.7409 * x[3] * x[6] +\n        0.7098 * x[3] * x[7] - 0.7156 * x[3] * x[8] + 0.7937 * x[3] * x[9] -\n        0.9671 * x[3] * x[10] - 0.8201 * x[4] * x[5] - 0.9828 * x[4] * x[6] -\n        0.2199 * x[4] * x[7] - 0.1975 * x[4] * x[8] +\n        0.6526 * x[4] * x[9] +\n        0.8052 * x[4] * x[10] +\n        0.2971 * x[5] * x[6] +\n        0.1198 * x[5] * x[7] +\n        0.217 * x[5] * x[8] +\n        0.0079 * x[5] * x[9] - 0.3018 * x[5] * x[10] + 0.9843 * x[6] * x[7] -\n        0.9696 * x[6] * x[8] + 0.8791 * x[6] * x[9] - 0.9214 * x[6] * x[10] -\n        0.6654 * x[7] * x[8] +\n        0.8961 * x[7] * x[9] +\n        0.7488 * x[7] * x[10] - 0.816 * x[8] * x[9] +\n        0.7283 * x[8] * x[10] +\n        0.7735 * x[9] * x[10] +\n        0.4313 * x[1] - 0.8995 * x[2] - 0.0242 * x[3] + 0.1137 * x[4] -\n        0.0807 * x[5] + 0.3716 * x[6] - 0.9041 * x[7] - 0.0494 * x[8] +\n        0.8577 * x[9] +\n        0.4838 * x[10] +\n        0.4225 * x[1] * x[2] * x[4] - 0.2484 * x[1] * x[2] * x[3] +\n        0.9204 * x[1] * x[2] * x[5] +\n        0.4425 * x[1] * x[2] * x[6] +\n        0.8533 * x[1] * x[2] * x[7] - 0.8434 * x[1] * x[2] * x[8] +\n        0.3368 * x[1] * x[2] * x[9] - 0.2922 * x[1] * x[2] * x[10] -\n        0.674 * x[1] * x[3] * x[4] - 0.506 * x[1] * x[3] * x[5] +\n        0.45 * x[1] * x[3] * x[6] +\n        0.9451 * x[1] * x[3] * x[7] - 0.6033 * x[1] * x[3] * x[8] -\n        0.5666 * x[1] * x[3] * x[9] - 0.5187 * x[1] * x[3] * x[10] -\n        0.2378 * x[1] * x[4] * x[5] - 0.8728 * x[1] * x[4] * x[6] +\n        0.2078 * x[1] * x[4] * x[7] - 0.4754 * x[1] * x[4] * x[8] -\n        0.0257 * x[1] * x[4] * x[9] - 0.6292 * x[1] * x[4] * x[10] -\n        0.3056 * x[1] * x[5] * x[6] +\n        0.9041 * x[1] * x[5] * x[7] +\n        0.9193 * x[1] * x[5] * x[8] +\n        0.1786 * x[1] * x[5] * x[9] - 0.8288 * x[1] * x[5] * x[10] +\n        0.8871 * x[1] * x[6] * x[7] - 0.5883 * x[1] * x[6] * x[8] -\n        0.4245 * x[1] * x[6] * x[9] + 0.2509 * x[1] * x[6] * x[10] -\n        0.8896 * x[1] * x[7] * x[8] - 0.7735 * x[1] * x[7] * x[9] +\n        0.6383 * x[1] * x[7] * x[10] - 0.7938 * x[1] * x[8] * x[9] -\n        0.6181 * x[1] * x[8] * x[10] + 0.0857 * x[1] * x[9] * x[10] -\n        0.4053 * x[2] * x[3] * x[4] + 0.2158 * x[2] * x[3] * x[5] -\n        0.7104 * x[2] * x[3] * x[6] + 0.1614 * x[2] * x[3] * x[7] -\n        0.5585 * x[2] * x[3] * x[8] - 0.0765 * x[2] * x[3] * x[9] -\n        0.9573 * x[2] * x[3] * x[10] + 0.744 * x[2] * x[4] * x[5] -\n        0.1551 * x[2] * x[4] * x[6] +\n        0.4025 * x[2] * x[4] * x[7] +\n        0.9942 * x[2] * x[4] * x[8] - 0.2869 * x[2] * x[4] * x[9] -\n        0.6106 * x[2] * x[4] * x[10] + 0.5482 * x[2] * x[5] * x[6] -\n        0.5155 * x[2] * x[5] * x[7] +\n        0.2689 * x[2] * x[5] * x[8] +\n        0.291 * x[2] * x[5] * x[9] - 0.6436 * x[2] * x[5] * x[10] -\n        0.6477 * x[2] * x[6] * x[7] - 0.0194 * x[2] * x[6] * x[8] -\n        0.2997 * x[2] * x[6] * x[9] + 0.7213 * x[2] * x[6] * x[10] -\n        0.9991 * x[2] * x[7] * x[8] +\n        0.8354 * x[2] * x[7] * x[9] +\n        0.9739 * x[2] * x[7] * x[10] +\n        0.9231 * x[2] * x[8] * x[9] - 0.5433 * x[2] * x[8] * x[10] -\n        0.5059 * x[2] * x[9] * x[10] +\n        0.1579 * x[3] * x[4] * x[5] +\n        0.9595 * x[3] * x[4] * x[6] - 0.4744 * x[3] * x[4] * x[7] -\n        0.7872 * x[3] * x[4] * x[8] +\n        0.8894 * x[3] * x[4] * x[9] +\n        0.6219 * x[3] * x[4] * x[10] - 0.9093 * x[3] * x[5] * x[6] +\n        0.9121 * x[3] * x[5] * x[7] +\n        0.4676 * x[3] * x[5] * x[8] - 0.056 * x[3] * x[5] * x[9] +\n        0.7962 * x[3] * x[5] * x[10] +\n        0.2177 * x[3] * x[6] * x[7] - 0.1877 * x[3] * x[6] * x[8] +\n        0.2283 * x[3] * x[6] * x[9] +\n        0.5367 * x[3] * x[6] * x[10] - 0.594 * x[3] * x[7] * x[8] +\n        0.022 * x[3] * x[7] * x[9] - 0.9741 * x[3] * x[7] * x[10] -\n        0.7372 * x[3] * x[8] * x[9] - 0.0799 * x[3] * x[8] * x[10] +\n        0.6106 * x[3] * x[9] * x[10] +\n        0.4631 * x[4] * x[5] * x[6] - 0.7378 * x[4] * x[5] * x[7] -\n        0.8125 * x[4] * x[5] * x[8] - 0.4392 * x[4] * x[5] * x[9] -\n        0.7147 * x[4] * x[5] * x[10] - 0.974 * x[4] * x[6] * x[7] +\n        0.9874 * x[4] * x[6] * x[8] +\n        0.422 * x[4] * x[6] * x[9] +\n        0.6878 * x[4] * x[6] * x[10] +\n        0.12 * x[4] * x[7] * x[8] - 0.8755 * x[4] * x[7] * x[9] -\n        0.2555 * x[4] * x[7] * x[10] - 0.5743 * x[4] * x[8] * x[9] -\n        0.5735 * x[4] * x[8] * x[10] - 0.6477 * x[4] * x[9] * x[10] +\n        0.0007 * x[5] * x[6] * x[7] +\n        0.0896 * x[5] * x[6] * x[8] +\n        0.1403 * x[5] * x[6] * x[9] +\n        0.0392 * x[5] * x[6] * x[10] - 0.9063 * x[5] * x[7] * x[8] -\n        0.3817 * x[5] * x[7] * x[9] +\n        0.8622 * x[5] * x[7] * x[10] +\n        0.0331 * x[5] * x[8] * x[9] - 0.1539 * x[5] * x[8] * x[10] -\n        0.684 * x[5] * x[9] * x[10] +\n        0.8427 * x[6] * x[7] * x[8] +\n        0.679 * x[6] * x[7] * x[9] - 0.8744 * x[6] * x[7] * x[10] -\n        0.5763 * x[6] * x[8] * x[9] +\n        0.131 * x[6] * x[8] * x[10] +\n        0.7207 * x[6] * x[9] * x[10] +\n        0.2711 * x[7] * x[8] * x[9] +\n        0.901 * x[7] * x[8] * x[10] - 0.0142 * x[7] * x[9] * x[10] +\n        0.7093 * x[8] * x[9] * x[10] +\n        0.7493 * x[1] * x[2] * x[3] * x[5] - 0.7313 * x[1] * x[2] * x[3] * x[4] -\n        0.1795 * x[1] * x[2] * x[3] * x[6] - 0.6154 * x[1] * x[2] * x[3] * x[7] +\n        0.4774 * x[1] * x[2] * x[3] * x[8] +\n        0.2237 * x[1] * x[2] * x[3] * x[9] +\n        0.819 * x[1] * x[2] * x[3] * x[10] - 0.2799 * x[1] * x[2] * x[4] * x[5] -\n        0.4367 * x[1] * x[2] * x[4] * x[6] - 0.7202 * x[1] * x[2] * x[4] * x[7] +\n        0.7141 * x[1] * x[2] * x[4] * x[8] +\n        0.2112 * x[1] * x[2] * x[4] * x[9] +\n        0.7705 * x[1] * x[2] * x[4] * x[10] +\n        0.0843 * x[1] * x[2] * x[5] * x[6] +\n        0.3562 * x[1] * x[2] * x[5] * x[7] +\n        0.7516 * x[1] * x[2] * x[5] * x[8] +\n        0.6577 * x[1] * x[2] * x[5] * x[9] +\n        0.288 * x[1] * x[2] * x[5] * x[10] +\n        0.179 * x[1] * x[2] * x[6] * x[7] +\n        0.1567 * x[1] * x[2] * x[6] * x[8] - 0.3688 * x[1] * x[2] * x[6] * x[9] +\n        0.7408 * x[1] * x[2] * x[6] * x[10] - 0.4765 * x[1] * x[2] * x[7] * x[8] +\n        0.6741 * x[1] * x[2] * x[7] * x[9] +\n        0.112 * x[1] * x[2] * x[7] * x[10] - 0.8509 * x[1] * x[2] * x[8] * x[9] +\n        0.4165 * x[1] * x[2] * x[8] * x[10] - 0.9974 * x[1] * x[2] * x[9] * x[10] -\n        0.3871 * x[1] * x[3] * x[4] * x[5] +\n        0.6783 * x[1] * x[3] * x[4] * x[6] +\n        0.8508 * x[1] * x[3] * x[4] * x[7] - 0.7738 * x[1] * x[3] * x[4] * x[8] +\n        0.6638 * x[1] * x[3] * x[4] * x[9] +\n        0.5599 * x[1] * x[3] * x[4] * x[10] +\n        0.7158 * x[1] * x[3] * x[5] * x[6] +\n        0.1086 * x[1] * x[3] * x[5] * x[7] - 0.69 * x[1] * x[3] * x[5] * x[8] -\n        0.4714 * x[1] * x[3] * x[5] * x[9] +\n        0.6628 * x[1] * x[3] * x[5] * x[10] +\n        0.1565 * x[1] * x[3] * x[6] * x[7] +\n        0.2639 * x[1] * x[3] * x[6] * x[8] - 0.0214 * x[1] * x[3] * x[6] * x[9] -\n        0.6831 * x[1] * x[3] * x[6] * x[10] - 0.7759 * x[1] * x[3] * x[7] * x[8] +\n        0.3236 * x[1] * x[3] * x[7] * x[9] - 0.768 * x[1] * x[3] * x[7] * x[10] -\n        0.4247 * x[1] * x[3] * x[8] * x[9] +\n        0.4122 * x[1] * x[3] * x[8] * x[10] +\n        0.4506 * x[1] * x[3] * x[9] * x[10] +\n        0.3552 * x[1] * x[4] * x[5] * x[6] +\n        0.446 * x[1] * x[4] * x[5] * x[7] +\n        0.3144 * x[1] * x[4] * x[5] * x[8] +\n        0.4965 * x[1] * x[4] * x[5] * x[9] - 0.8063 * x[1] * x[4] * x[5] * x[10] -\n        0.612 * x[1] * x[4] * x[6] * x[7] +\n        0.7794 * x[1] * x[4] * x[6] * x[8] +\n        0.834 * x[1] * x[4] * x[6] * x[9] +\n        0.6108 * x[1] * x[4] * x[6] * x[10] +\n        0.8644 * x[1] * x[4] * x[7] * x[8] - 0.8542 * x[1] * x[4] * x[7] * x[9] -\n        0.2302 * x[1] * x[4] * x[7] * x[10] - 0.1178 * x[1] * x[4] * x[8] * x[9] -\n        0.9046 * x[1] * x[4] * x[8] * x[10] - 0.262 * x[1] * x[4] * x[9] * x[10] -\n        0.6183 * x[1] * x[5] * x[6] * x[7] + 0.6188 * x[1] * x[5] * x[6] * x[8] -\n        0.0381 * x[1] * x[5] * x[6] * x[9] - 0.7188 * x[1] * x[5] * x[6] * x[10] -\n        0.1034 * x[1] * x[5] * x[7] * x[8] +\n        0.4047 * x[1] * x[5] * x[7] * x[9] +\n        0.0084 * x[1] * x[5] * x[7] * x[10] - 0.4031 * x[1] * x[5] * x[8] * x[9] +\n        0.702 * x[1] * x[5] * x[8] * x[10] - 0.8478 * x[1] * x[5] * x[9] * x[10] +\n        0.7782 * x[1] * x[6] * x[7] * x[8] +\n        0.7223 * x[1] * x[6] * x[7] * x[9] +\n        0.5405 * x[1] * x[6] * x[7] * x[10] +\n        0.7626 * x[1] * x[6] * x[8] * x[9] - 0.2324 * x[1] * x[6] * x[8] * x[10] -\n        0.6926 * x[1] * x[6] * x[9] * x[10] - 0.4473 * x[1] * x[7] * x[8] * x[9] +\n        0.5227 * x[1] * x[7] * x[8] * x[10] - 0.1544 * x[1] * x[7] * x[9] * x[10] +\n        0.1788 * x[1] * x[8] * x[9] * x[10] - 0.8851 * x[2] * x[3] * x[4] * x[5] -\n        0.397 * x[2] * x[3] * x[4] * x[6] - 0.8556 * x[2] * x[3] * x[4] * x[7] +\n        0.5239 * x[2] * x[3] * x[4] * x[8] +\n        0.0308 * x[2] * x[3] * x[4] * x[9] - 0.7734 * x[2] * x[3] * x[4] * x[10] +\n        0.3039 * x[2] * x[3] * x[5] * x[6] - 0.7162 * x[2] * x[3] * x[5] * x[7] +\n        0.3885 * x[2] * x[3] * x[5] * x[8] - 0.999 * x[2] * x[3] * x[5] * x[9] -\n        0.1183 * x[2] * x[3] * x[5] * x[10] - 0.1821 * x[2] * x[3] * x[6] * x[7] +\n        0.6174 * x[2] * x[3] * x[6] * x[8] - 0.854 * x[2] * x[3] * x[6] * x[9] +\n        0.5544 * x[2] * x[3] * x[6] * x[10] +\n        0.232 * x[2] * x[3] * x[7] * x[8] - 0.6641 * x[2] * x[3] * x[7] * x[9] -\n        0.3447 * x[2] * x[3] * x[7] * x[10] +\n        0.6963 * x[2] * x[3] * x[8] * x[9] +\n        0.1228 * x[2] * x[3] * x[8] * x[10] +\n        0.1779 * x[2] * x[3] * x[9] * x[10] +\n        0.973 * x[2] * x[4] * x[5] * x[6] +\n        0.1374 * x[2] * x[4] * x[5] * x[7] - 0.5653 * x[2] * x[4] * x[5] * x[8] +\n        0.3235 * x[2] * x[4] * x[5] * x[9] - 0.7351 * x[2] * x[4] * x[5] * x[10] +\n        0.1866 * x[2] * x[4] * x[6] * x[7] - 0.1166 * x[2] * x[4] * x[6] * x[8] +\n        0.6616 * x[2] * x[4] * x[6] * x[9] +\n        0.3928 * x[2] * x[4] * x[6] * x[10] +\n        0.4047 * x[2] * x[4] * x[7] * x[8] - 0.492 * x[2] * x[4] * x[7] * x[9] +\n        0.0233 * x[2] * x[4] * x[7] * x[10] - 0.0839 * x[2] * x[4] * x[8] * x[9] +\n        0.9802 * x[2] * x[4] * x[8] * x[10] +\n        0.2466 * x[2] * x[4] * x[9] * x[10] +\n        0.0186 * x[2] * x[5] * x[6] * x[7] +\n        0.761 * x[2] * x[5] * x[6] * x[8] +\n        0.1837 * x[2] * x[5] * x[6] * x[9] +\n        0.6049 * x[2] * x[5] * x[6] * x[10] - 0.782 * x[2] * x[5] * x[7] * x[8] +\n        0.8772 * x[2] * x[5] * x[7] * x[9] +\n        0.9354 * x[2] * x[5] * x[7] * x[10] +\n        0.5135 * x[2] * x[5] * x[8] * x[9] +\n        0.5527 * x[2] * x[5] * x[8] * x[10] +\n        0.5089 * x[2] * x[5] * x[9] * x[10] - 0.9858 * x[2] * x[6] * x[7] * x[8] +\n        0.7245 * x[2] * x[6] * x[7] * x[9] - 0.7463 * x[2] * x[6] * x[7] * x[10] -\n        0.5182 * x[2] * x[6] * x[8] * x[9] - 0.6181 * x[2] * x[6] * x[8] * x[10] -\n        0.815 * x[2] * x[6] * x[9] * x[10] - 0.1105 * x[2] * x[7] * x[8] * x[9] -\n        0.6992 * x[2] * x[7] * x[8] * x[10] +\n        0.2491 * x[2] * x[7] * x[9] * x[10] +\n        0.6866 * x[2] * x[8] * x[9] * x[10] - 0.7184 * x[3] * x[4] * x[5] * x[6] +\n        0.7077 * x[3] * x[4] * x[5] * x[7] - 0.8608 * x[3] * x[4] * x[5] * x[8] -\n        0.851 * x[3] * x[4] * x[5] * x[9] + 0.6374 * x[3] * x[4] * x[5] * x[10] -\n        0.0365 * x[3] * x[4] * x[6] * x[7] +\n        0.7884 * x[3] * x[4] * x[6] * x[8] +\n        0.6555 * x[3] * x[4] * x[6] * x[9] - 0.3754 * x[3] * x[4] * x[6] * x[10] -\n        0.0738 * x[3] * x[4] * x[7] * x[8] +\n        0.9879 * x[3] * x[4] * x[7] * x[9] +\n        0.0135 * x[3] * x[4] * x[7] * x[10] - 0.3498 * x[3] * x[4] * x[8] * x[9] -\n        0.0971 * x[3] * x[4] * x[8] * x[10] + 0.904 * x[3] * x[4] * x[9] * x[10] -\n        0.2376 * x[3] * x[5] * x[6] * x[7] + 0.2933 * x[3] * x[5] * x[6] * x[8] -\n        0.9793 * x[3] * x[5] * x[6] * x[9] - 0.2463 * x[3] * x[5] * x[6] * x[10] +\n        0.4602 * x[3] * x[5] * x[7] * x[8] +\n        0.2682 * x[3] * x[5] * x[7] * x[9] - 0.5987 * x[3] * x[5] * x[7] * x[10] +\n        0.5991 * x[3] * x[5] * x[8] * x[9] - 0.2997 * x[3] * x[5] * x[8] * x[10] +\n        0.4424 * x[3] * x[5] * x[9] * x[10] - 0.2551 * x[3] * x[6] * x[7] * x[8] -\n        0.4591 * x[3] * x[6] * x[7] * x[9] +\n        0.191 * x[3] * x[6] * x[7] * x[10] +\n        0.7592 * x[3] * x[6] * x[8] * x[9] - 0.4934 * x[3] * x[6] * x[8] * x[10] -\n        0.5187 * x[3] * x[6] * x[9] * x[10] - 0.1522 * x[3] * x[7] * x[8] * x[9] -\n        0.7995 * x[3] * x[7] * x[8] * x[10] +\n        0.2015 * x[3] * x[7] * x[9] * x[10] +\n        0.7515 * x[3] * x[8] * x[9] * x[10] - 0.3003 * x[4] * x[5] * x[6] * x[7] -\n        0.0052 * x[4] * x[5] * x[6] * x[8] - 0.2116 * x[4] * x[5] * x[6] * x[9] -\n        0.069 * x[4] * x[5] * x[6] * x[10] +\n        0.4125 * x[4] * x[5] * x[7] * x[8] +\n        0.1911 * x[4] * x[5] * x[7] * x[9] +\n        0.141 * x[4] * x[5] * x[7] * x[10] - 0.4838 * x[4] * x[5] * x[8] * x[9] +\n        0.0428 * x[4] * x[5] * x[8] * x[10] - 0.3545 * x[4] * x[5] * x[9] * x[10] -\n        0.836 * x[4] * x[6] * x[7] * x[8] +\n        0.9044 * x[4] * x[6] * x[7] * x[9] +\n        0.9537 * x[4] * x[6] * x[7] * x[10] +\n        0.0803 * x[4] * x[6] * x[8] * x[9] - 0.4248 * x[4] * x[6] * x[8] * x[10] +\n        0.9858 * x[4] * x[6] * x[9] * x[10] +\n        0.8136 * x[4] * x[7] * x[8] * x[9] +\n        0.6273 * x[4] * x[7] * x[8] * x[10] +\n        0.3116 * x[4] * x[7] * x[9] * x[10] +\n        0.5186 * x[4] * x[8] * x[9] * x[10] +\n        0.4613 * x[5] * x[6] * x[7] * x[8] +\n        0.5744 * x[5] * x[6] * x[7] * x[9] - 0.5661 * x[5] * x[6] * x[7] * x[10] -\n        0.7528 * x[5] * x[6] * x[8] * x[9] - 0.1247 * x[5] * x[6] * x[8] * x[10] -\n        0.5048 * x[5] * x[6] * x[9] * x[10] +\n        0.1487 * x[5] * x[7] * x[8] * x[9] +\n        0.6904 * x[5] * x[7] * x[8] * x[10] - 0.4091 * x[5] * x[7] * x[9] * x[10] +\n        0.8667 * x[5] * x[8] * x[9] * x[10] +\n        0.4524 * x[6] * x[7] * x[8] * x[9] - 0.4188 * x[6] * x[7] * x[8] * x[10] -\n        0.3955 * x[6] * x[7] * x[9] * x[10] + 0.3814 * x[6] * x[8] * x[9] * x[10] -\n        0.4766 * x[7] * x[8] * x[9] * x[10] <= 99.878\n    )\n    e11 = replace_expr(e11, x)\n    JuMP.add_nonlinear_constraint(m, e11)\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/multi.jl",
    "content": "# println(\"--------------------------------------------------------------------------\")\n# println(\"Multi4/N - exprmode 1 -> X1 * X2 * X3 * X4\")\n# println(\"Multi4/N - exprmode 2 -> (X1*X2) * (X3*X4)\")\n# println(\"Multi4/N - exprmode 3 -> (X1*X2) * X3 * X4\")\n# println(\"Multi4/N - exprmode 4 -> X1 * X2 * (X3*X4)\")\n# println(\"Multi4/N - exprmode 5 -> ((X1*X2) * X3) * X4\")\n# println(\"Multi4/N - exprmode 6 -> (X1*X2*X3) *X4\")\n# println(\"Multi4/N - exprmode 7 -> X1 * (X2 * (X3*X4))\")\n# println(\"Multi4/N - exprmode 8 -> X1 * (X2*X3) * X4\")\n# println(\"Multi4/N - exprmode 9 -> X1 * (X2*X3*X4)\")\n# println(\"Multi4/N - exprmode 10 -> X1 * ((X2*X3) * X4)\")\n# println(\"Multi4/N - exprmode 11 -> (X1 * (X2*X3)) * X4\")\n# println(\"--------------------------------------------------------------------------\")\n# println(\"Multi3/N - exprmode 1 -> X1 * X2 * X3\")\n# println(\"Multi3/N - exprmode 2 -> (X1*X2) * X3\")\n# println(\"Multi3/N - exprmode 3 -> X1 * (X2*X3)\")\n# println(\"--------------------------------------------------------------------------\")\n# println(\"                                Options\")\n# println(\"N | K | convhull | exprmode | unifrom | randomub | sos2 | presolve | delta\")\n# println(\"--------------------------------------------------------------------------\")\n\nfunction multi4(; verbose = false, solver = nothing, exprmode = 1)\n    m = JuMP.Model(solver)\n\n    Random.seed!(1)\n    @variable(m, 0.1 <= x[1:4] <= rand() * 100)\n    if exprmode == 1\n        @NLobjective(m, Max, x[1] * x[2] * x[3] * x[4])\n    elseif exprmode == 2\n        @NLobjective(m, Max, (x[1] * x[2]) * (x[3] * x[4]))\n    elseif exprmode == 3\n        @NLobjective(m, Max, (x[1] * x[2]) * x[3] * x[4])\n    elseif exprmode == 4\n        @NLobjective(m, Max, x[1] * x[2] * (x[3] * x[4]))\n    elseif exprmode == 5\n        @NLobjective(m, Max, (((x[1] * x[2]) * x[3]) * x[4]))\n    elseif exprmode == 6\n        @NLobjective(m, Max, (x[1] * x[2] * x[3]) * x[4])\n    elseif exprmode == 7\n        @NLobjective(m, Max, x[1] * (x[2] * (x[3] * x[4])))\n    elseif exprmode == 8\n        @NLobjective(m, Max, x[1] * (x[2] * x[3]) * x[4])\n    elseif exprmode == 9\n        @NLobjective(m, Max, x[1] * (x[2] * x[3] * x[4]))\n    elseif exprmode == 10\n        @NLobjective(m, Max, x[1] * ((x[2] * x[3]) * x[4]))\n    elseif exprmode == 11\n        @NLobjective(m, Max, (x[1] * (x[2] * x[3])) * x[4])\n    else\n        error(\"exprmode argument only taks from 1-7\")\n    end\n    @constraint(m, sum(x[i] for i in 1:4) <= 4)\n\n    if verbose\n        print(m)\n    end\n\n    return m\nend\n\nfunction multi3(; verbose = false, solver = nothing, exprmode = 1)\n    m = JuMP.Model(solver)\n\n    Random.seed!(1)\n    ub = rand()\n    @variable(m, 0.1 <= x[1:3] <= ub * 1000)\n    if exprmode == 1\n        @NLobjective(m, Max, x[1] * x[2] * x[3])\n    elseif exprmode == 2\n        @NLobjective(m, Max, (x[1] * x[2]) * x[3])\n    elseif exprmode == 3\n        @NLobjective(m, Max, x[1] * (x[2] * x[3]))\n    else\n        error(\"exprmode argument only taks from 1-7\")\n    end\n\n    @constraint(m, sum(x[i] for i in 1:3) <= 3)\n\n    if verbose\n        print(m)\n    end\n\n    return m\nend\n\nfunction multi2(; verbose = false, solver = nothing)\n    # Global solution: 0.92906489 (arg min: [0.7336635, 1.266336])\n\n    m = JuMP.Model(solver)\n\n    Random.seed!(1)\n    @variable(m, 0.1 <= x[1:2] <= rand() * 10)\n    @NLobjective(m, Max, x[1] * x[2])\n    @constraint(m, sum(x[i] for i in 1:2) <= 2)\n\n    if verbose\n        print(m)\n    end\n\n    return m\nend\n\nfunction multi4N(;\n    verbose = false,\n    exprmode = 1,\n    solver = nothing,\n    N = 1,\n    randomub = true,\n)\n    m = JuMP.Model(solver)\n\n    M = 1 + 3 * N\n    Random.seed!(100)\n    isa(randomub, Bool) ? @variable(m, 0.1 <= x[1:M] <= 100 * rand()) :\n    @variable(m, 0.1 <= x[1:M] <= randomub)\n\n    if exprmode == 1\n        @NLobjective(m, Max, sum(x[i] * x[i+1] * x[i+2] * x[i+3] for i in 1:3:(M-1)))\n    elseif exprmode == 2\n        @NLobjective(m, Max, sum((x[i] * x[i+1]) * (x[i+2] * x[i+3]) for i in 1:3:(M-1)))\n    elseif exprmode == 3\n        @NLobjective(m, Max, sum((x[i] * x[i+1]) * x[i+2] * x[i+3] for i in 1:3:(M-1)))\n    elseif exprmode == 4\n        @NLobjective(m, Max, sum(x[i] * x[i+1] * (x[i+2] * x[i+3]) for i in 1:3:(M-1)))\n    elseif exprmode == 5\n        @NLobjective(\n            m,\n            Max,\n            sum((((x[i] * x[i+1]) * x[i+2]) * x[i+3]) for i in 1:3:(M-1))\n        )\n    elseif exprmode == 6\n        @NLobjective(m, Max, sum((x[i] * x[i+1] * x[i+2]) * x[i+3] for i in 1:3:(M-1)))\n    elseif exprmode == 7\n        @NLobjective(m, Max, sum(x[i] * (x[i+1] * (x[i+2] * x[i+3])) for i in 1:3:(M-1)))\n    elseif exprmode == 8\n        @NLobjective(m, Max, sum(x[i] * (x[i+1] * x[i+2]) * x[i+3] for i in 1:3:(M-1)))\n    elseif exprmode == 9\n        @NLobjective(m, Max, sum(x[i] * (x[i+1] * x[i+2] * x[i+3]) for i in 1:3:(M-1)))\n    elseif exprmode == 10\n        @NLobjective(m, Max, sum(x[i] * ((x[i+1] * x[i+2]) * x[i+3]) for i in 1:3:(M-1)))\n    elseif exprmode == 11\n        @NLobjective(m, Max, sum((x[i] * (x[i+1] * x[i+2])) * x[i+3] for i in 1:3:(M-1)))\n    else\n        error(\"exprmode argument only taks from 1-7\")\n    end\n\n    @constraint(m, [i in 1:3:(M-1)], x[i] + x[i+1] + x[i+2] + x[i+3] <= 4)\n\n    if verbose\n        print(m)\n    end\n\n    return m\nend\n\nfunction multi3N(;\n    verbose = false,\n    randomub = nothing,\n    solver = nothing,\n    exprmode = 1,\n    N = 1,\n    delta = 4,\n)\n    m = JuMP.Model(solver)\n\n    M = 1 + 2 * N\n    Random.seed!(100)\n    isa(randomub, Int) ? @variable(m, 0.1 <= x[1:M] <= randomub) :\n    @variable(m, 0.1 <= x[1:M] <= rand() * 100)\n    if exprmode == 1\n        @NLobjective(m, Max, sum(x[i] * x[i+1] * x[i+2] for i in 1:2:(M-1)))\n    elseif exprmode == 2\n        @NLobjective(m, Max, sum((x[i] * x[i+1]) * x[i+2] for i in 1:2:(M-1)))\n    elseif exprmode == 3\n        @NLobjective(m, Max, sum(x[i] * (x[i+1] * x[i+2]) for i in 1:2:(M-1)))\n    else\n        error(\"exprmode argument only taks from 1-7\")\n    end\n\n    @constraint(m, [i in 1:2:(M-1)], x[i] + x[i+1] + x[i+2] <= 3)\n\n    if verbose\n        print(m)\n    end\n\n    return m\nend\n\nfunction multiKND(;\n    verbose = false,\n    solver = nothing,\n    exprmode = 1,\n    randomub = true,\n    N = 1,\n    K = 2,\n    D = 1,\n)\n    m = JuMP.Model(solver)\n\n    M = K + (K - D) * (N - 1)\n    Random.seed!(100)\n    isa(randomub, Int) ? @variable(m, 0.1 <= x[1:M] <= randomub) :\n    @variable(m, 0.1 <= x[1:M] <= rand() * 100)\n    @NLobjective(m, Max, sum(prod(x[i+k] for k in 0:(K-1)) for i in 1:(K-D):(M-D)))\n    @constraint(m, [i in 1:(K-D):(M-D)], sum(x[i+k] for k in 0:(K-1)) <= K)\n\n    verbose && print(m)\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/nlp.jl",
    "content": "function nlp1(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 1 <= x[1:2] <= 4)\n    @NLconstraint(m, x[1] * x[2] >= 8)\n    @NLobjective(m, Min, 6 * x[1]^2 + 4 * x[2]^2 - 2.5 * x[1] * x[2])\n\n    return m\nend\n\nfunction nlp2(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, -500 <= x[1:2] <= 500)\n    @NLobjective(m, Min, sum((x[i]^2 - i)^2 for i in 1:2))\n\n    return m\nend\n\nfunction max_cover_var_picker(m::Alpine.Optimizer)\n    nodes = Set()\n    for pair in keys(m.nonconvex_terms)\n        for i in pair\n            @assert isa(i.args[2], Int)\n            push!(nodes, i.args[2])\n        end\n    end\n    nodes = collect(nodes)\n    m.num_var_disc_mip = length(nodes)\n    m.disc_vars = nodes\n    return\nend\n\nfunction mathopt(; solver = nothing)\n    # Modified based on `mathopt` instances from MINLPLib\n    # Global solution: -1004.73094034, arg min: [ -10.0, 15.2543377, -3.2034701]\n\n    m = JuMP.Model(solver)\n\n    LB = [-10, -15, -10]\n    UB = [20, 20, 20]\n    x0 = [-10.0, 15.3, -3.2]\n    @variable(\n        m,\n        LB[i] <= x[i = 1:3] <= UB[i],\n        start = x0[i],\n    )\n    @NLobjective(m, Min, 10 * (x[1] * x[2] - x[2] * x[3]) + x[1] * x[3])\n    @NLconstraint(m, x[1] * x[2] + x[2] * x[3]^2 >= 4)\n    @constraint(m, 3 * x[1] + 4 * x[2] + 5 * x[3] <= 15)\n\n    return m\nend\n\nfunction nlp3(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    LB = [100, 1000, 1000, 10, 10, 10, 10, 10]\n    UB = [10000, 10000, 10000, 1000, 1000, 1000, 1000, 1000]\n\n    @variable(m, LB[i] <= x[i = 1:8] <= UB[i])\n\n    @constraint(m, 0.0025 * (x[4] + x[6]) <= 1)\n    @constraint(m, 0.0025 * (x[5] - x[4] + x[7]) <= 1)\n    @constraint(m, 0.01(x[8] - x[5]) <= 1)\n    @NLconstraint(m, 100 * x[1] - x[1] * x[6] + 833.33252 * x[4] <= 83333.333)\n    @NLconstraint(m, x[2] * x[4] - x[2] * x[7] - 1250 * x[4] + 1250 * x[5] <= 0)\n    @NLconstraint(m, x[3] * x[5] - x[3] * x[8] - 2500 * x[5] + 1250000 <= 0)\n\n    @objective(m, Min, x[1] + x[2] + x[3])\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/rosenbrock.jl",
    "content": "# Reference: https://direct.mit.edu/evco/article/14/1/119/1232/A-Note-on-the-Extended-Rosenbrock-Function\n# Global optimum = 0.0, arg min = (1,1)\n\nfunction rosenbrock(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, -10 <= x <= 10)\n    @variable(m, -10 <= y <= 10)\n\n    @NLobjective(m, Min, 100 * (y - x^2)^2 + (1 - x)^2)\n\n    return m\nend\n"
  },
  {
    "path": "examples/MINLPs/sincos.jl",
    "content": "# Functions in this file are not tested until support for trigonometric functions is added. \n\nfunction sincos_p1(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, 0.1 <= x[1:10] <= 10)\n    @NLconstraint(m, [i in 1:9], x[i] * x[i+1] * sin(x[i]) >= 0.32)\n    @NLconstraint(m, [i in 1:9], x[i] * x[i+1] * sin(x[i]) <= 0.42)\n    @NLobjective(m, Min, sum(cos(x[i]) + sin(x[i]) for i in 1:10))\n\n    return m\nend\n\nfunction trig(; solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, objvar)\n    x_Idx = Any[1]\n    @variable(m, x[x_Idx])\n    JuMP.set_lower_bound(x[1], -2.0)\n    JuMP.set_upper_bound(x[1], 5.0)\n\n    @NLconstraint(\n        m,\n        e1,\n        -(sin(11 * x[1]) + cos(13 * x[1]) - sin(17 * x[1]) - cos(19 * x[1])) + objvar ==\n        0.0\n    )\n    @NLconstraint(m, e2, 5 * sin(x[1]) - x[1] <= 0.0)\n\n    @objective(m, Min, objvar)\n\n    return m\nend\n\nfunction specialopts(; verbose = false, solver = nothing)\n    m = JuMP.Model(solver)\n\n    @variable(m, x[i = 1:6])\n\n    @NLconstraint(m, sin(x[1]) + cos(x[2]) >= 1)\n    @NLconstraint(m, sin(x[1]) * x[2] >= 1)\n    @NLconstraint(m, sin(x[1]) * cos(x[2]) >= 1)\n    #\n    @NLconstraint(m, sin(x[1] * x[2]) >= 0.5)\n    @NLconstraint(m, cos(x[1] + x[2]) >= 0.5)\n    @NLconstraint(m, cos(x[1] / 2) >= 0.5)\n    @NLconstraint(m, cos(x[1] * x[2] / 5) >= 0.5)\n    @NLconstraint(m, sin(x[1] / 5 + x[2] / 5) >= 0.5)\n\n    return m\nend\n"
  },
  {
    "path": "examples/Project.toml",
    "content": "[deps]\nAlpine = \"07493b3f-dabb-5b16-a503-4139292d7dd4\"\nCPLEX = \"a076750e-1247-5638-91d2-ce28b192dca0\"\nGurobi = \"2e9cd046-0924-5485-92f1-d5272153d98b\"\nHiGHS = \"87dc4568-4c63-4d18-b0c0-bb2238e4078b\"\nIpopt = \"b6b21f68-93f8-5de0-b562-5493be1d77c9\"\nJuMP = \"4076af6c-e467-56ae-b986-b466b2749572\"\nJuniper = \"2ddba703-00a4-53a7-87a5-e8b9971dde84\"\nPavito = \"cd433a01-47d1-575d-afb7-6db927ee8d8f\"\nRevise = \"295af30f-e4ad-537b-8983-00126c2a3abe\"\n\n[compat]\nJuMP = \"1\"\njulia = \"1\"\n"
  },
  {
    "path": "examples/README.md",
    "content": "# Examples for Alpine\n`run_examples.jl` file contains the main driver file which can be executed to compute global optimality for a non-convex MINLP of your choice. Multiple such JuMP models of MINLPs can be found inside the `examples/MINLPs` folder.\n\nA few useful **hints** to explore within Alpine: \n* Try different integer values (>= 4) for `partition_scaling_factor` to potentially observe \n    better Alpine run times, which can be instance specific.\n* Choose `presolve_bt` to `false` if you prefer the optimization-based bound tightening (OBBT) presolve to be turned off. \n* If you prefer to use Alpine for only OBBT presolve, without any paritioning applied to the \n    nonlinear terms, include option `\"apply_partitioning\"` and set it to `false` while initializing the \n    Alpine solver. \n* If the nonconvex instance you want to solve has binary variables (i.e., a MINLP like in [here](https://github.com/lanl-ansi/Alpine.jl/blob/32757b2568acfe71257e41ed4122a120717a6460/examples/MINLPs/blend.jl#LL1C1-L1C1), then include a local MINLP solver as an additional attribute while initializing `Alpine.Optimizer` in `run_examples.jl`. \n\n# Random families of non-convex QCQPs\nScripts for generating homogeneous families of nonconvex QCQP instances, useful for benchmarking ML-based models for tuning certain algorithmic parameters of global optimization, can be found [here](https://github.com/lanl-ansi/Alpine.jl/tree/master/examples/random_QCQPs). "
  },
  {
    "path": "examples/optimizers.jl",
    "content": "#---------------------------;\n# MIP solvers - commercial  ;\n#---------------------------;\n# https://github.com/jump-dev/Gurobi.jl\nfunction get_gurobi()\n    GRB_ENV = Gurobi.Env()\n    return optimizer_with_attributes(\n        () -> Gurobi.Optimizer(GRB_ENV), # To avoid printing License info multiple times\n        MOI.Silent() => true,\n        \"Presolve\" => 1,\n    )\nend\n\n# https://github.com/jump-dev/CPLEX.jl\nfunction get_cplex()\n    return optimizer_with_attributes(\n        CPLEX.Optimizer,\n        MOI.Silent() => true,\n        \"CPX_PARAM_PREIND\" => 1,\n    )\nend\n\n#---------------------------;\n# MIP solvers - open-source\n#---------------------------;\n# https://github.com/jump-dev/HiGHS.jl\nfunction get_highs()\n    return JuMP.optimizer_with_attributes(\n        HiGHS.Optimizer,\n        \"presolve\" => \"on\",\n        \"log_to_console\" => false,\n    )\nend\n\n# https://github.com/jump-dev/Cbc.jl\nfunction get_cbc()\n    return optimizer_with_attributes(Cbc.Optimizer, MOI.Silent() => true)\nend\n\n#---------------------------;\n# Continuous local solver   ; \n#---------------------------;\n# https://github.com/jump-dev/Ipopt.jl\nfunction get_ipopt()\n    return optimizer_with_attributes(\n        Ipopt.Optimizer,\n        MOI.Silent() => true,\n        \"sb\" => \"yes\",\n        \"max_iter\" => Int(1E4),\n    )\nend\n\n#----------------------;\n# Convex MINLP solver  ;\n#----------------------;\n# https://github.com/jump-dev/Pavito.jl\nfunction get_pavito(mip_solver, cont_solver)\n    return optimizer_with_attributes(\n        Pavito.Optimizer,\n        MOI.Silent() => true,\n        \"mip_solver\" => mip_solver,\n        \"cont_solver\" => cont_solver,\n        \"mip_solver_drives\" => false,\n    )\nend\n\n#-------------------------------;\n# Non-convex Local MINLP solver ;\n#-------------------------------;\n# https://github.com/lanl-ansi/Juniper.jl\nfunction get_juniper(mip_solver, nl_solver)\n    return optimizer_with_attributes(\n        Juniper.Optimizer,\n        MOI.Silent() => true,\n        \"mip_solver\" => mip_solver,\n        \"nl_solver\" => nl_solver,\n    )\nend\n"
  },
  {
    "path": "examples/random_QCQPs/README.md",
    "content": "# Random families of non-convex QCQPs \nScripts for generating a family of random non-convex quadratically-constrained quadratic programs (QCQPs) instances in Section 5 of the paper \"Learning to Accelerate the Global Optimization of Quadratically-Constrained Quadratic Programs\" by R. Kannan, H. Nagarajan, and D. Deka ([arXiv](https://arxiv.org/abs/2301.00306)). As discussed in the aforementioned paper, these homogeneous families of instances can be very useful for benchmarking machine learning-based models for tuning certain algorithmic parameters of global optimization.\n\nInstances in the above paper were generated using Python 3.8.5 and NumPy 1.19.2.\n\nTo generate 1000 random bilinear instances with `N` variables (`N = 10, 20, 50`), run\n```\npython3 generate_bilinear_instances.py --numVariables N --numInstances 1000\n```\n\nTo generate 1000 random QCQP instances (including both bilinear and univariate quadratic terms) with `N` variables (`N = 10, 20, 50`), run\n```\npython3 generate_qcqp_instances.py --numVariables N --numInstances 1000\n```\n\nTo generate 1000 random pooling instances, run\n```\npython3 generate_pooling_instances.py --numInstances 1000\n```\nAdditional data files for generating the pooling instances can be found within the `pooling` folder. These data files were generated using the scripts [here](https://github.com/poolinginstances/poolinginstances).\n\n\nIf you find these instances useful in your work, we kindly request that you cite the following paper [arXiv link](https://arxiv.org/abs/2301.00306):\n```bibtex\n@article{alpine_learning_2022,\n  title={Learning to Accelerate the Global Optimization of Quadratically-Constrained Quadratic Programs},\n  author={Kannan, Rohit and Nagarajan, Harsha and Deka, Deepjyoti},\n  journal={arXiv preprint:2301.00306},\n  url={https://arxiv.org/abs/2301.00306},\n  year={2022}\n}\n```"
  },
  {
    "path": "examples/random_QCQPs/bilinear/generate_bilinear_instances.py",
    "content": "\"\"\"\n// @brief  Script to generate the nonconvex instances with only bilinear terms\n//\t\t   Input arguments: numVariables, numInstances\n// Reference: \"Learning to Accelerate the Global Optimization of Quadratically-Constrained \n\t\t\t   Quadratic Programs\" by R. Kannan, H. Nagarajan, and D. Deka \n\t\t\t   (Link: https://arxiv.org/abs/2301.00306)\n// Contributor: @rohitkannan \n\"\"\"\n\nimport random\nimport json\nimport numpy as np\nimport argparse\nimport os\n\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--numVariables', type=int, required=True)\nparser.add_argument('--numInstances', type=int, required=True)\nargs = parser.parse_args()\n\nnumVariables = int(args.numVariables)\nnumInstances = int(args.numInstances)\n\ninstances_path = \"./N_\" + str(numVariables) + \"/\"\nos.makedirs(instances_path)\n\n# random seed for instances\nif numVariables == 10:\n\trandom.seed(4898)\nelif numVariables == 20:\n\trandom.seed(6736) \nelif numVariables == 50:\n\trandom.seed(8197) \n\nnp.random.seed(round(random.random()*10000)) \n\n\nstart = 1  # starting instance number\n\nnumQuadraticConstraints = numVariables  # number of constraints with bilinear and linear terms\nnumLinearConstraints = round(numVariables/5)  # number of linear equality constraints\n\nconstraint_sparsity = 1.0  # (actually opposite of sparsity) fraction of possible bilinear and linear terms occurring in each constraint\nmaxNumBilinearTerms = round(numVariables*(numVariables-1)/2)\nnumBilinearTerms = min(5*numVariables,maxNumBilinearTerms)  # number of bilinear terms in the formulation\n\nfrac_quad_con_pert = 0.2  # fraction of quadratic constraints perturbed\nnumPertFactors = 3  # number of perturbation factors per perturbed quadratic constraint\npert_frac = 0.5  # perturbation fraction around nominal instance\n\n\n# to sort list of lists\ndef Sort(sub_li):\n    return(sorted(sub_li, key = lambda x: (x[0],x[1])))    \n\n\n# GENERATE COMMON BILINEAR TERMS FOR ALL INSTANCES\npossible_bilinear_terms = [[i,j] for i in range(numVariables) for j in range(i+1,numVariables)]\nrandom.shuffle(possible_bilinear_terms)\nbilinear_terms = Sort(possible_bilinear_terms[:numBilinearTerms])\n\n\n# GENERATE BASE COEFFICIENTS\nq_bilinear = []  # bilinear coefficients\nq_bilinear_ind = []  # bilinear coefficient indices\n\n# OBJECTIVE COEFFICIENTS\nq_bilinear.append([2*random.random()-1 for j in range(numBilinearTerms)])  # all bilinear terms participate in the objective (sparsity not applied here)\nq_bilinear_ind.append(list(np.arange(numBilinearTerms)))\n\n# CONSTRAINT COEFFICIENTS\nnumQuadNonZero = round(numBilinearTerms*constraint_sparsity)\nfor i in range(numQuadraticConstraints):\n\tq_bilinear.append([2*random.random()-1 for j in range(numQuadNonZero)])\n\ttmp_ind = list(np.random.choice(numBilinearTerms, numQuadNonZero, replace=False))\n\ttmp_ind.sort()\n\tq_bilinear_ind.append(tmp_ind)\n\n\nq_linear = []  # linear coefficients\nq_linear_ind = []  # linear coefficient indices\n\n# OBJECTIVE COEFFICIENTS\nq_linear.append([2*random.random()-1 for j in range(numVariables)])  # all linear terms participate in the objective (sparsity not applied here)\nq_linear_ind.append(list(np.arange(numVariables)))\n\n# CONSTRAINT COEFFICIENTS\nnumLinNonZero = round(numVariables*constraint_sparsity)\nfor i in range(numQuadraticConstraints+numLinearConstraints):\n\tif i < numQuadraticConstraints:  # only a fraction of linear terms appear in quadratic constraints\n\t\tq_linear.append([2*random.random()-1 for j in range(numLinNonZero)])\n\t\ttmp_ind = list(np.random.choice(numVariables, numLinNonZero, replace=False))\n\telse:  # all linear terms appear in linear equality constraints\n\t\tq_linear.append([2*random.random()-1 for j in range(numVariables)])\n\t\ttmp_ind = list(np.arange(numVariables))\n\ttmp_ind.sort()\n\tq_linear_ind.append(tmp_ind)\n\n\n# GENERATE BASE RHS COEFFICIENTS\nquadratic_scaling = 100\nrhs_quadratic = [quadratic_scaling*random.random() for i in range(numQuadraticConstraints)]\n\nlinear_scaling = 1\nrhs_linear = [linear_scaling*(2*random.random()-1) for i in range(numLinearConstraints)]\n\n\n# RE-SCALE PROBLEM SO THAT CONSTRAINTS RHS ARE EQUAL TO ONE\nfor i in range(numQuadraticConstraints):\n\tfor j in range(numQuadNonZero):\n\t\tq_bilinear[i+1][j] /= rhs_quadratic[i]\n\tfor j in range(numLinNonZero):\n\t\tq_linear[i+1][j] /= rhs_quadratic[i]\n\n\nfor i in range(numLinearConstraints):\n\tfor j in range(numVariables):\n\t\tq_linear[i+1+numQuadraticConstraints][j] /= rhs_linear[i]\n\n\n# CONSTRUCT PERTURBATION FACTORS FOR THE OBJECTIVE AND QUADRATIC CONSTRAINT COEFFICIENTS\nq_bilinear_obj_factors = np.zeros((numPertFactors,numBilinearTerms))\nq_linear_obj_factors = np.zeros((numPertFactors,numVariables))\nfor j in range(numBilinearTerms):\n\tfor k in range(numPertFactors):\n\t\tq_bilinear_obj_factors[k,j] = pert_frac*random.random()*q_bilinear[0][j]\nfor j in range(numVariables):\n\tfor k in range(numPertFactors):\n\t\tq_linear_obj_factors[k,j] = pert_frac*random.random()*q_linear[0][j]\n\nnumQuadConPert = round(numQuadraticConstraints*frac_quad_con_pert)\nq_bilinear_con_factors = np.zeros((numPertFactors,numQuadConPert,numQuadNonZero))\nq_linear_con_factors = np.zeros((numPertFactors,numQuadConPert,numLinNonZero))\nfor i in range(numQuadConPert):\n\tfor j in range(numQuadNonZero):\n\t\tfor k in range(numPertFactors):\n\t\t\tq_bilinear_con_factors[k,i,j] = pert_frac*random.random()*q_bilinear[i+1][j]\n\tfor j in range(numLinNonZero):\n\t\tfor k in range(numPertFactors):\n\t\t\tq_linear_con_factors[k,i,j] = pert_frac*random.random()*q_linear[i+1][j]\n\n\n\n# GENERATE PERTURBED INSTANCES\nfor inst in range(start,numInstances+start):\n\toutput_file = instances_path + \"bilinear_v\" + str(numVariables) + \"_b\" + str(numBilinearTerms) + \"_s\" + str(round(constraint_sparsity*100)) + \"_\" + str(inst) + \".jl\"\n\tjson_file = instances_path + \"bilinear_v\" + str(numVariables) + \"_b\" + str(numBilinearTerms) + \"_s\" + str(round(constraint_sparsity*100)) + \"_\" + str(inst) + \".json\"\n\n\tjson_dict = {}\n\tjson_dict[\"numVariables\"] = numVariables\n\tjson_dict[\"numQuadraticConstraints\"] = numQuadraticConstraints\n\tjson_dict[\"numLinearConstraints\"] = numLinearConstraints\n\tjson_dict[\"constraint_sparsity\"] = constraint_sparsity\n\n\tjson_dict[\"numBilinearTerms\"] = numBilinearTerms\n\tjson_dict[\"bilinear_terms\"] = bilinear_terms\n\n\tjson_dict[\"pert_frac\"] = pert_frac\n\tjson_dict[\"numPertFactors\"] = numPertFactors\n\tjson_dict[\"numQuadConPert\"] = numQuadConPert\n\tjson_dict[\"bilinear_obj_factors\"] = q_bilinear_obj_factors.tolist()\n\tjson_dict[\"linear_obj_factors\"] = q_linear_obj_factors.tolist()\n\tjson_dict[\"bilinear_con_factors\"] = q_bilinear_con_factors.tolist()\n\tjson_dict[\"linear_con_factors\"] = q_linear_con_factors.tolist()\n\n\n# GENERATE PERTURBATION FACTORS\n\ttheta = 2*(np.random.rand(numPertFactors,numQuadConPert+1) - 0.5)\n\n\tjson_dict[\"theta\"] = theta.tolist()\n\n# STORE SPARSITY PATTERN AND INITIALIZE DATA\n\tf = open(output_file, \"w\")\n\n\tf.write(\"# ----- Bilinear Terms ----- #\\n\")\n\tf.write(\"numBilinearTerms = \" + str(numBilinearTerms) + \"\\n\")\n\tf.write(\"bilinear_terms = [\")\n\tcount_bilinear = 0\n\tfor term in bilinear_terms:\n\t\tf.write(\"[\" + str(term[0]+1) + \",\" + str(term[1]+1) + \"]\")\n\t\tcount_bilinear += 1\n\t\tif count_bilinear < numBilinearTerms:\n\t\t\tf.write(\", \")\n\t\telse:\n\t\t\tf.write(\"] \\n\\n\")\n\t\n\tf.write(\"numQuadNonZero = \" + str(numQuadNonZero) + \"\\n\")\n\tf.write(\"numLinNonZero = \" + str(numLinNonZero) + \"\\n\\n\")\n\n\tf.write(\"# ----- Data Matrices ----- #\\n\")\n\tf.write(\"bilinear_obj_coeffs = zeros(Float64,\" + str(numBilinearTerms) + \") \\n\")\n\tf.write(\"bilinear_con_coeffs = zeros(Float64,\" + str(numQuadraticConstraints) + \",\" + str(numQuadNonZero) + \") \\n\")\n\tf.write(\"bilinear_con_coeff_indices = zeros(Int64,\" + str(numQuadraticConstraints) + \",\" + str(numQuadNonZero) + \") \\n\")\n\tf.write(\"linear_obj_coeffs = zeros(Float64,\" + str(numVariables) + \") \\n\")\n\tf.write(\"linear_con_coeffs_1 = zeros(Float64,\" + str(numQuadraticConstraints) + \",\" + str(numLinNonZero) + \") \\n\")\n\tf.write(\"linear_con_coeff_indices_1 = zeros(Int64,\" + str(numQuadraticConstraints) + \",\" + str(numLinNonZero) + \") \\n\")\n\tf.write(\"linear_con_coeffs_2 = zeros(Float64,\" + str(numLinearConstraints) + \",\" + str(numVariables) + \") \\n\")\n\tf.write(\"linear_con_coeff_indices_2 = zeros(Int64,\" + str(numLinearConstraints) + \",\" + str(numVariables) + \") \\n\\n\")\n\n\tf.write(\"# ----- Variables ----- #\\n\")\n\tf.write(\"@variable(m, 0 <= x[1:\" + str(numVariables) + \"] <= 1)\\n\")\n\tf.write(\"@variable(m, 0 <= w[1:\" + str(numBilinearTerms) + \"] <= 1)\\n\\n\")\n\n\tf.write(\"# ----- Bilinear Equations ----- #\\n\")\n\tf.write(\"@NLconstraint(m, [i=1:\" + str(numBilinearTerms) + \"], w[i] == x[bilinear_terms[i][1]]*x[bilinear_terms[i][2]])\\n\\n\\n\")\n\n\tjson_dict[\"x_lower\"] = [0 for i in range(numVariables)]\n\tjson_dict[\"x_upper\"] = [1 for i in range(numVariables)]\n\n\n# OBJECTIVE\n\t# tmp variables for storing generated data\n\tQ = [0.]*numBilinearTerms\n\tq = [0.]*numVariables\n\n\tcount_quad_con = 0\n\tcount_lin_con = 0\n\tfor i in range(numVariables):\n\t\tq[i] = q_linear[0][i]\n\t\tfor k in range(numPertFactors):\n\t\t\tq[i] += q_linear_obj_factors[k,i]*theta[k,0]\n\tfor i in range(numBilinearTerms):\n\t\tQ[i] = q_bilinear[0][i]\n\t\tfor k in range(numPertFactors):\n\t\t\tQ[i] += q_bilinear_obj_factors[k,i]*theta[k,0]\n\n\tjson_dict[\"obj_bilinear_coeffs\"] = Q\n\tjson_dict[\"obj_linear_coeffs\"] = q\n\n\tf.write(\"# ----- Objective ----- #\\n\")\n\tf.write(\"bilinear_obj_coeffs = \" + str(Q) + \"\\n\")\n\tf.write(\"linear_obj_coeffs = \" + str(q) + \"\\n\")\n\n\tf.write(\"\\n\")\n\tf.write(\"@objective(m, Min, sum(bilinear_obj_coeffs[i]*w[i] for i = 1:\" + str(numBilinearTerms) + \") + sum(linear_obj_coeffs[i]*x[i] for i = 1:\" + str(numVariables) + \")) \\n\\n\\n\")\n\n\n\tbilinear_obj_matrix = np.zeros((numVariables, numVariables))\n\tfor i in range(numBilinearTerms):\n\t\tbilinear_obj_matrix[bilinear_terms[i][0]][bilinear_terms[i][1]] = Q[i]/2.0\n\t\tbilinear_obj_matrix[bilinear_terms[i][1]][bilinear_terms[i][0]] = Q[i]/2.0\n\n\tjson_dict[\"obj_bilinear_eigvals\"] = np.linalg.eigvals(bilinear_obj_matrix).tolist()\n\n\n# QUADRATIC CONSTRAINTS\n\tf.write(\"# ----- Constraints ----- #\\n\")\n\n\tjson_dict[\"quadratic_con_rhs\"] = [1.0 for i in range(numQuadraticConstraints)]\n\n\tbilinear_con_coeffs = []\n\tbilinear_con_coeff_indices = []\n\tlinear_con_coeffs = []\n\tlinear_con_coeff_indices = []\n\tcon_bilinear_eigvals = np.empty([numQuadraticConstraints, numVariables], dtype=float)\n\n\tfor k in range(numQuadraticConstraints):\n\t\tQ = [0.]*numQuadNonZero\n\t\tQ_ind = [i+1 for i in q_bilinear_ind[count_quad_con+1]]\n\t\tq = [0.]*numLinNonZero\n\t\tq_ind = [i+1 for i in q_linear_ind[count_lin_con+1]]\n\n\t\tcount_quad_con += 1\n\t\tcount_lin_con += 1\n\t\tfor i in range(numLinNonZero):\n\t\t\tq[i] = q_linear[count_lin_con][i]\n\t\t\tif k < numQuadConPert:\n\t\t\t\tfor j in range(numPertFactors):\n\t\t\t\t\tq[i] += q_linear_con_factors[j,count_lin_con-1,i]*theta[j,count_lin_con]\n\t\tfor i in range(numQuadNonZero):\n\t\t\tQ[i] = q_bilinear[count_quad_con][i]\n\t\t\tif k < numQuadConPert:\n\t\t\t\tfor j in range(numPertFactors):\n\t\t\t\t\tQ[i] += q_bilinear_con_factors[j,count_quad_con-1,i]*theta[j,count_quad_con]\n\n\t\tbilinear_con_coeffs.append(Q)\n\t\tbilinear_con_coeff_indices.append([float(i) for i in q_bilinear_ind[count_quad_con]])\n\t\tlinear_con_coeffs.append(q)\n\t\tlinear_con_coeff_indices.append([float(i) for i in q_linear_ind[count_lin_con]])\n\n\t\tf.write(\"bilinear_con_coeffs[\" + str(count_quad_con) + \",:] = \" + str(Q) + \"\\n\")\n\t\tf.write(\"bilinear_con_coeff_indices[\" + str(count_quad_con) + \",:] = \" + str(Q_ind) + \"\\n\")\n\t\tf.write(\"linear_con_coeffs_1[\" + str(count_lin_con) + \",:] = \" + str(q) + \"\\n\")\n\t\tf.write(\"linear_con_coeff_indices_1[\" + str(count_lin_con) + \",:] = \" + str(q_ind) + \"\\n\")\n\t\tf.write(\"\\n\")\n\n\t\tf.write(\"@constraint(m, sum(bilinear_con_coeffs[\" + str(count_quad_con) + \",i]*w[bilinear_con_coeff_indices[\" + str(count_quad_con) + \",i]] for i = 1:\" + str(numQuadNonZero) + \") + sum(linear_con_coeffs_1[\" + str(count_lin_con) + \",i]*x[linear_con_coeff_indices_1[\" + str(count_lin_con) + \",i]] for i = 1:\" + str(numLinNonZero) + \") <= 1) \\n\\n\\n\")\n\n\n\t\tbilinear_con_matrix = np.zeros((numVariables, numVariables))\n\t\tfor i in range(numQuadNonZero):\n\t\t\tind = q_bilinear_ind[count_quad_con][i]\n\t\t\tind1 = bilinear_terms[ind][0]\n\t\t\tind2 = bilinear_terms[ind][1]\n\t\t\tbilinear_con_matrix[ind1][ind2] = Q[i]/2.0\n\t\t\tbilinear_con_matrix[ind2][ind1] = Q[i]/2.0\n\n\t\tcon_bilinear_eigvals[k] = np.linalg.eigvals(bilinear_con_matrix)\n\n\t\n\tjson_dict[\"con_bilinear_eigvals\"] = con_bilinear_eigvals.tolist()\n\n\n# LINEAR CONSTRAINTS\n\tjson_dict[\"linear_con_rhs\"] = [1.0 for i in range(numLinearConstraints)]\n\n\tfor k in range(numLinearConstraints):\n\t\tq = [0.]*numVariables\n\t\tq_ind = [i+1 for i in q_linear_ind[count_lin_con+1]]\n\n\t\tcount_lin_con += 1\n\t\tfor i in range(numVariables):\n\t\t\tq[i] = q_linear[count_lin_con][i]\n\n\t\tlinear_con_coeffs.append(q)\n\t\tlinear_con_coeff_indices.append([float(i) for i in q_linear_ind[count_lin_con]])\n\n\t\tf.write(\"linear_con_coeffs_2[\" + str(count_lin_con - numQuadraticConstraints) + \",:] = \" + str(q) + \"\\n\")\n\t\tf.write(\"linear_con_coeff_indices_2[\" + str(count_lin_con - numQuadraticConstraints) + \",:] = \" + str(q_ind) + \"\\n\")\n\t\tf.write(\"\\n\")\n\n\t\tf.write(\"@constraint(m, sum(linear_con_coeffs_2[\" + str(count_lin_con - numQuadraticConstraints) + \",i]*x[linear_con_coeff_indices_2[\" + str(count_lin_con - numQuadraticConstraints) + \",i]] for i = 1:\" + str(numVariables) + \") == 1) \\n\\n\\n\")\n\t\t\n\tf.close()\n\n\n\tjson_dict[\"con_bilinear_coeffs\"] = bilinear_con_coeffs\n\tjson_dict[\"con_bilinear_coeff_indices\"] = bilinear_con_coeff_indices\n\tjson_dict[\"con_linear_coeffs\"] = linear_con_coeffs\n\tjson_dict[\"con_linear_coeff_indices\"] = linear_con_coeff_indices\n\n\twith open(json_file, 'w', encoding='utf-8') as outF:\n\t\tjson.dump(json_dict, outF, ensure_ascii=False, indent=4)\n"
  },
  {
    "path": "examples/random_QCQPs/pooling/generate_pooling_instances.py",
    "content": "\"\"\"\n// @brief  Script to generate the nonconvex pooling instances based on Luedtke et al. (SIOPT vol. 30 (2020), pp. 1582–1609)\n//\t\t   Input arguments: numInstances\n// Reference: \"Learning to Accelerate the Global Optimization of Quadratically-Constrained \n\t\t\t   Quadratic Programs\" by R. Kannan, H. Nagarajan, and D. Deka \n\t\t\t   (Link: https://arxiv.org/abs/2301.00306)\n// Contributor: @rohitkannan \n\"\"\"\n\nimport numpy as np\nimport random\nimport json\nimport argparse\nimport os\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--numInstances', type=int, required=True)\nargs = parser.parse_args()\n\nnumInstances = int(args.numInstances)\n\ninstances_path = \"./pooling_instances/\"\nos.mkdir(instances_path)\n\n# random seed for instances\nrandom.seed(8446) \nnp.random.seed(round(random.random()*10000)) \n\n\ndef flatten(t):\n\treturn [item for sublist in t for item in sublist]\n\n\n# parameters defining the instance\nnum_copies = 15\nnum_added_edges = 150\nnum_specs = 1\n\n\nnum_orig_inputs = 3\nnum_orig_pools = 1\nnum_orig_outputs = 2\n\n\n# fraction by which to perturb the nominal input qualities\npert_frac = 0.2\n\n\n# scaling factors for parameters\ncapacities_scaling = 100.0\ncosts_scaling = 2.0\n\n\n\ninput_file = \"haverly_\" + str(num_copies) + \"_addedges_\" + str(num_added_edges) + \"_attr_\" + str(num_specs-1) + \"_1.dat\"\n\n\n\n# first map the vertex labels to integers\ninputs_dict = dict()\noutputs_dict = dict()\npools_dict = dict()\n\nfor c in range(num_copies):\n\tfor i in range(num_orig_inputs):\n\t\tif c < 10 and num_copies > 10:\n\t\t\ttmp = \"h0\" + str(c) + \"_i\" + str(i+1)\n\t\telse:\n\t\t\ttmp = \"h\" + str(c) + \"_i\" + str(i+1)\n\t\tinputs_dict[tmp] = c*num_orig_inputs + i\n\n\tfor j in range(num_orig_outputs):\n\t\tif c < 10 and num_copies > 10:\n\t\t\ttmp = \"h0\" + str(c) + \"_j\" + str(j+1)\n\t\telse:\n\t\t\ttmp = \"h\" + str(c) + \"_j\" + str(j+1)\n\t\toutputs_dict[tmp] = c*num_orig_outputs + j\n\n\tfor l in range(num_orig_pools):\n\t\tif c < 10 and num_copies > 10:\n\t\t\ttmp = \"h0\" + str(c) + \"_l\" + str(l+1)\n\t\telse:\n\t\t\ttmp = \"h\" + str(c) + \"_l\" + str(l+1)\n\t\tpools_dict[tmp] = c*num_orig_pools + l\n\n\n# compute actual number of inputs, pools, and outputs\nnum_inputs = num_orig_inputs*num_copies\nnum_pools = num_orig_pools*num_copies\nnum_outputs = num_orig_outputs*num_copies\n\n\n# extract the relevant lines for each input parameter\nfile1 = open(input_file, 'r')\nLines = file1.readlines()\n\nstart_edges = False\nstart_costs = False\nstart_capacities = False\nstart_specs = False\nstart_limits = False\n\nlines_edges = []\nlines_costs = []\nlines_capacities = []\nlines_specs = []\nlines_limits = []\n\nfor line in Lines:\n\tif start_edges and line.startswith('/;'):\n\t\tstart_edges = False\n\tif start_costs and line.startswith('/;'):\n\t\tstart_costs = False\n\tif start_capacities and line.startswith('/;'):\n\t\tstart_capacities = False\n\tif start_specs and line.startswith('/;'):\n\t\tstart_specs = False\n\tif start_limits and line.startswith('/;'):\n\t\tstart_limits = False\n\n\tif start_edges:\n\t\tlines_edges.append(line)\n\tif start_costs:\n\t\tlines_costs.append(line)\n\tif start_capacities:\n\t\tlines_capacities.append(line)\n\tif start_specs:\n\t\tlines_specs.append(line)\n\tif start_limits:\n\t\tlines_limits.append(line)\n\n\tif line.startswith('set A /'):\n\t\tstart_edges = True\n\tif line.startswith('parameter cost(V,V) /'):\n\t\tstart_costs = True\n\tif line.startswith('parameter C(V) /'):\n\t\tstart_capacities = True\n\tif line.startswith('parameter lambda(K,V) /'):\n\t\tstart_specs = True\n\tif line.startswith('parameter overbeta(K,V) /'):\n\t\tstart_limits = True\n\n\n# first, extract capacities\ncap_i = [0.0 for i in range(num_inputs)]\ncap_j = [0.0 for j in range(num_outputs)]\ncap_l = [0.0 for l in range(num_pools)]\n\nfor line in lines_capacities:\n\tif num_copies > 10:\n\t\tid = line[4:10]\n\t\tval = float(line[11:])\n\telse:\n\t\tid = line[4:9]\n\t\tval = float(line[10:])\n\n\tif id in inputs_dict:\n\t\tcap_i[inputs_dict[id]] = val/capacities_scaling\n\tif id in outputs_dict:\n\t\tcap_j[outputs_dict[id]] = val/capacities_scaling\n\tif id in pools_dict:\n\t\tcap_l[pools_dict[id]] = val/capacities_scaling\n\n\n# next, extract costs\ncost_ij_rows = []\ncost_ij_cols = []\ncost_ij_vals = []\n\ncost_il_rows = []\ncost_il_cols = []\ncost_il_vals = []\n\ncost_lj_rows = []\ncost_lj_cols = []\ncost_lj_vals = []\n\nfor line in lines_costs:\n\tids = line.rstrip().split('.')\n\tif num_copies > 10:\n\t\tid1 = ids[0][-6:]\n\t\tid2 = ids[1][:6]\n\t\tval = float(line[18:])\n\telse:\n\t\tid1 = ids[0][-5:]\n\t\tid2 = ids[1][:5]\n\t\tval = float(line[16:])\n\n\tif id1 in inputs_dict and id2 in outputs_dict:\n\t\tcost_ij_rows.append(inputs_dict[id1])\n\t\tcost_ij_cols.append(outputs_dict[id2])\n\t\tcost_ij_vals.append(val/costs_scaling)\n\n\tif id1 in inputs_dict and id2 in pools_dict:\n\t\tcost_il_rows.append(inputs_dict[id1])\n\t\tcost_il_cols.append(pools_dict[id2])\n\t\tcost_il_vals.append(val/costs_scaling)\n\n\tif id1 in pools_dict and id2 in outputs_dict:\n\t\tcost_lj_rows.append(pools_dict[id1])\n\t\tcost_lj_cols.append(outputs_dict[id2])\n\t\tcost_lj_vals.append(val/costs_scaling)\n\n\n# next, extract the edges\narcs_ij = []\narcs_il = []\narcs_lj = []\n\nfor line in lines_edges:\n\tids = line.rstrip().split('.')\n\tif num_copies > 10:\n\t\tid1 = ids[0][-6:]\n\t\tid2 = ids[1][:6]\n\telse:\n\t\tid1 = ids[0][-5:]\n\t\tid2 = ids[1][:5]\n\n\tif id1 in inputs_dict and id2 in outputs_dict:\n\t\tarcs_ij.append((inputs_dict[id1],outputs_dict[id2]))\n\n\tif id1 in inputs_dict and id2 in pools_dict:\n\t\tarcs_il.append((inputs_dict[id1],pools_dict[id2]))\n\n\tif id1 in pools_dict and id2 in outputs_dict:\n\t\tarcs_lj.append((pools_dict[id1],outputs_dict[id2]))\n\t\t\n\n# next, extract the nominal input qualities\n# ignore limits on output qualities\nspecs_in_nominal = [[0.0 for k in range(num_specs)] for i in range(num_inputs)]\n\nfor line in lines_specs:\n\tif num_specs > 1:\n\t\tattr = int(line.rstrip().split('.')[0][-1])\n\telse:\n\t\tattr = 0\n\n\tif (num_specs == 1) or (attr > 0):\n\t\tif num_copies > 10:\n\t\t\tid = line.rstrip().split('.')[1][:6]\n\t\t\tval = float(line[14:])\n\t\telse:\n\t\t\tid = line.rstrip().split('.')[1][:5]\n\t\t\tval = float(line[13:])\n\telse:\n\t\tif num_copies > 10:\n\t\t\tid = line.rstrip().split('.')[1][:6]\n\t\t\tval = float(line[16:])\n\t\telse:\n\t\t\tid = line.rstrip().split('.')[1][:5]\n\t\t\tval = float(line[15:])\n\n\tspecs_in_nominal[inputs_dict[id]][attr] = val\n\n\n# define aliases for problem dimensions\nnum_i = num_inputs\nnum_l = num_pools\nnum_j = num_outputs\nnum_k = num_specs\n\n\n# generate auxiliary sets for the model\ninputs_to_pool = [[t[0] for t in arcs_il if t[1] == l] for l in range(num_l)]  # which inputs are connected to each pool?\ninputs_to_output = [[t[0] for t in arcs_ij if t[1] == j] for j in range(num_j)]  # which inputs are directly connected to each output?\noutputs_from_input = [[t[1] for t in arcs_ij if t[0] == i] for i in range(num_i)]  # which outputs are directly connected to each input?\noutputs_from_pool = [[t[1] for t in arcs_lj if t[0] == l] for l in range(num_l)]  # which outputs are connected to each pool?\npools_from_input = [[t[1] for t in arcs_il if t[0] == i] for i in range(num_i)] # which pools are connected to each input?\npools_to_output = [[t[0] for t in arcs_lj if t[1] == j] for j in range(num_j)]  # which pools are directly connected to each output?\ninputs_pools_to_output = [[(i,t[0]) for t in arcs_lj if t[1] == j for i in inputs_to_pool[t[0]]] for j in range(num_j)]  # which input-pool pairs connected to each output?\narcs_ilj = [(i,l,j) for l in range(num_l) for i in inputs_to_pool[l] for j in outputs_from_pool[l]]  # list of arcs from inputs to pools to outputs\n\noutputs_reachable_from_input = [list(set([t[1] for t in arcs_ij if t[0] == i] + flatten([[t[1] for t in arcs_lj if t[0] == l if i in inputs_to_pool[l]] for l in range(num_l)]))) for i in range(num_i)]  # which outputs are reachable starting from each input?\ninputs_reachable_from_output = [[i for i in range(num_i) if j in outputs_reachable_from_input[i]] for j in range(num_j)]  # which inputs are reachable starting from each output reversing arc directions?\n\n\n# randomly generate target qualities at outputs\nspecs_out_min = [[0.0 for k in range(num_specs)] for j in range(num_outputs)]\nspecs_out_max = [[0.0 for k in range(num_specs)] for j in range(num_outputs)]\n\nfor j in range(num_j):\n\tfor k in range(num_k):\n\t\tspec_out_min = np.amin([specs_in_nominal[i][k] for i in inputs_reachable_from_output[j]])\n\t\tspec_out_max = np.amax([specs_in_nominal[i][k] for i in inputs_reachable_from_output[j]])\n\n\t\tstart_frac = 0.2 + 0.2*random.random()\n\t\tstop_frac = 0.6 + 0.2*random.random()\n\n\t\tspecs_out_min[j][k] = spec_out_min + start_frac*(spec_out_max - spec_out_min)\n\t\tspecs_out_max[j][k] = spec_out_min + stop_frac*(spec_out_max - spec_out_min)\n\n\n\nfor inst in range(numInstances):\n\n\toutput_file = instances_path + \"pooling_c15_e150_q1_\" + str(inst+1) + \".jl\"\n\tjson_file = instances_path + \"pooling_c15_e150_q1_\" + str(inst+1) + \".json\"\n\n\ttheta_specs = np.random.rand(num_inputs, num_specs)\n\tspecs_in = [[0.0 for k in range(num_specs)] for i in range(num_inputs)]\n\tfor i in range(num_inputs):\n\t\tfor k in range(num_specs):\n\t\t\tspecs_in[i][k] = (1 - pert_frac + 2*pert_frac*theta_specs[i,k])*specs_in_nominal[i][k]\n\n\n\t# define auxiliary parameters for the quality constraints\n\tgamma_low = [[[specs_in[i][k]-specs_out_min[j][k] for k in range(num_specs)] for j in range(num_outputs)] for i in range(num_inputs)]\n\tgamma_up = [[[specs_in[i][k]-specs_out_max[j][k] for k in range(num_specs)] for j in range(num_outputs)] for i in range(num_inputs)]\n\n\n\t# Write to file. Convert to one indexing before creating Julia input\n\tf = open(output_file, \"w\")\n\tf.write(\"using SparseArrays \\n\\n\")\n\n\tf.write(\"num_i = \" + str(num_i) + \"\\n\")\n\tf.write(\"num_l = \" + str(num_l) + \"\\n\")\n\tf.write(\"num_j = \" + str(num_j) + \"\\n\")\n\tf.write(\"num_k = \" + str(num_k) + \"\\n\\n\")\n\n\tf.write(\"arcs_ij = \" + str([(i+1,j+1) for (i,j) in arcs_ij]) + \"\\n\")\n\tf.write(\"arcs_il = \" + str([(i+1,l+1) for (i,l) in arcs_il]) + \"\\n\")\n\tf.write(\"arcs_lj = \" + str([(l+1,j+1) for (l,j) in arcs_lj]) + \"\\n\")\n\tf.write(\"arcs_ilj = \" + str([(i+1,l+1,j+1) for (i,l,j) in arcs_ilj]) + \"\\n\\n\")\n\n\tf.write(\"inputs_to_pool = [Int64[] for l=1:num_l] \\n\")\n\tfor l in range(num_l):\n\t\tf.write(\"inputs_to_pool[\" + str(l+1) + \"] = \" + str([i+1 for i in inputs_to_pool[l]]) + \"\\n\")\n\tf.write(\"\\n\")\n\n\tf.write(\"inputs_to_output = [Int64[] for j=1:num_j] \\n\")\n\tfor j in range(num_j):\n\t\tf.write(\"inputs_to_output[\" + str(j+1) + \"] = \" + str([i+1 for i in inputs_to_output[j]]) + \"\\n\")\n\tf.write(\"\\n\")\n\n\tf.write(\"pools_to_output = [Int64[] for j=1:num_j] \\n\")\n\tfor j in range(num_j):\n\t\tf.write(\"pools_to_output[\" + str(j+1) + \"] = \" + str([l+1 for l in pools_to_output[j]]) + \"\\n\")\n\tf.write(\"\\n\")\n\n\tf.write(\"pools_from_input = [Int64[] for i=1:num_i] \\n\")\n\tfor i in range(num_i):\n\t\tf.write(\"pools_from_input[\" + str(i+1) + \"] = \" + str([l+1 for l in pools_from_input[i]]) + \"\\n\")\n\tf.write(\"\\n\")\n\n\tf.write(\"outputs_from_pool = [Int64[] for l=1:num_l] \\n\")\n\tfor l in range(num_l):\n\t\tf.write(\"outputs_from_pool[\" + str(l+1) + \"] = \" + str([j+1 for j in outputs_from_pool[l]]) + \"\\n\")\n\tf.write(\"\\n\")\n\n\tf.write(\"outputs_from_input = [Int64[] for i=1:num_i] \\n\")\n\tfor i in range(num_i):\n\t\tf.write(\"outputs_from_input[\" + str(i+1) + \"] = \" + str([j+1 for j in outputs_from_input[i]]) + \"\\n\")\n\tf.write(\"\\n\")\n\n\tf.write(\"inputs_pools_to_output = [Tuple{Int64, Int64}[] for j=1:num_j] \\n\")\n\tfor j in range(num_j):\n\t\tf.write(\"inputs_pools_to_output[\" + str(j+1) + \"] = \" + str([(i+1,l+1) for (i,l) in inputs_pools_to_output[j]]) + \"\\n\")\n\tf.write(\"\\n\")\n\n\n\tf.write(\"cap_i = \" + str(cap_i) + \"\\n\")\n\tf.write(\"cap_l = \" + str(cap_l) + \"\\n\")\n\tf.write(\"cap_j = \" + str(cap_j) + \"\\n\\n\")\n\n\tf.write(\"cost_ij_rows = \" + str([i+1 for i in cost_ij_rows]) + \"\\n\")\n\tf.write(\"cost_ij_cols = \" + str([j+1 for j in cost_ij_cols]) + \"\\n\")\n\tf.write(\"cost_ij_vals = \" + str(cost_ij_vals) + \"\\n\")\n\tf.write(\"cost_ij = sparse(cost_ij_rows, cost_ij_cols, cost_ij_vals) \\n\\n\")\n\n\tf.write(\"cost_il_rows = \" + str([i+1 for i in cost_il_rows]) + \"\\n\")\n\tf.write(\"cost_il_cols = \" + str([l+1 for l in cost_il_cols]) + \"\\n\")\n\tf.write(\"cost_il_vals = \" + str(cost_il_vals) + \"\\n\")\n\tf.write(\"cost_il = sparse(cost_il_rows, cost_il_cols, cost_il_vals) \\n\\n\")\n\n\tf.write(\"cost_lj_rows = \" + str([l+1 for l in cost_lj_rows]) + \"\\n\")\n\tf.write(\"cost_lj_cols = \" + str([j+1 for j in cost_lj_cols]) + \"\\n\")\n\tf.write(\"cost_lj_vals = \" + str(cost_lj_vals) + \"\\n\")\n\tf.write(\"cost_lj = sparse(cost_lj_rows, cost_lj_cols, cost_lj_vals) \\n\\n\")\n\n\tf.write(\"gamma_low = \" + str(gamma_low) + \"\\n\\n\")\n\tf.write(\"gamma_up = \" + str(gamma_up) + \"\\n\\n\\n\\n\")\n\n\n\tf.write(\"# ----- Variables ----- #\\n\")\n\tf.write(\"@variables(m, begin \\n\")\n\tf.write(\"\t0 <= w[(i,l,j) in arcs_ilj] <= min(cap_i[i],cap_l[l],cap_j[j]) \\n\")\n\tf.write(\"\t0 <= x_il[(i,l) in arcs_il] <= min(cap_i[i],cap_l[l]) \\n\")\n\tf.write(\"\t0 <= x_lj[(l,j) in arcs_lj] <= min(cap_l[l],cap_j[j]) \\n\")\n\tf.write(\"\t0 <= x_ij[(i,j) in arcs_ij] <= min(cap_i[i],cap_j[j]) \\n\")\n\tf.write(\"\t0 <= q[arcs_il] <= 1 \\n\")\n\tf.write(\"end) \\n\\n\\n\")\n\n\n\tf.write(\"# ----- Constraints ----- #\\n\")\n\tf.write(\"@constraints(m, begin \\n\")\n\tf.write(\"\tcapi[i=1:num_i], sum(x_ij[(i,j)] for j in outputs_from_input[i]) + sum(x_il[(i,l)] for l in pools_from_input[i]) <= cap_i[i] \\n\\n\")\n\tf.write(\"\tcapl[l=1:num_l], sum(x_lj[(l,j)] for j in outputs_from_pool[l]) <= cap_l[l] \\n\\n\")\n\tf.write(\"\tcapj[j=1:num_j], sum(x_ij[(i,j)] for i in inputs_to_output[j]) + sum(x_lj[(l,j)] for l in pools_to_output[j]) <= cap_j[j] \\n\\n\")\n\tf.write(\"\tsumfrac[l=1:num_l], sum(q[(i,l)] for i in inputs_to_pool[l]) == 1 \\n\\n\")\n\tf.write(\"\teq1[(i,l) in arcs_il], x_il[(i,l)] == sum(w[(i,l,j)] for j in outputs_from_pool[l]) \\n\\n\")\n\tf.write(\"    specdown[k=1:num_k, j=1:num_j], sum(gamma_low[i][j][k]*w[(i,l,j)] for (i,l) in inputs_pools_to_output[j]) + sum(gamma_low[i][j][k]*x_ij[(i,j)] for i in inputs_to_output[j]) >= 0 \\n\\n\")\n\tf.write(\"\tspecup[k=1:num_k, j=1:num_j], sum(gamma_up[i][j][k]*w[(i,l,j)] for (i,l) in inputs_pools_to_output[j]) + sum(gamma_up[i][j][k]*x_ij[(i,j)] for i in inputs_to_output[j]) <= 0 \\n\\n\")\n\tf.write(\"\trlt1[(l,j) in arcs_lj], sum(w[(i,l,j)] for i in inputs_to_pool[l]) == x_lj[(l,j)] \\n\\n\")\n\tf.write(\"\trlt2[(i,l) in arcs_il], sum(w[(i,l,j)] for j in outputs_from_pool[l]) <= cap_l[l]*q[(i,l)] \\n\\n\")\n\tf.write(\"end) \\n\\n\\n\")\n\n\tf.write(\"@NLconstraint(m, blin[(i,l,j) in arcs_ilj], w[(i,l,j)] == q[(i,l)]*x_lj[(l,j)]) \\n\\n\\n\")\n\n\n\tf.write(\"# ----- Objective ----- #\\n\")\n\tf.write(\"@objective(m, Min, sum(cost_ij[i,j]*x_ij[(i,j)] for (i,j) in arcs_ij) + sum(cost_il[i,l]*x_il[(i,l)] for (i,l) in arcs_il) + sum(cost_lj[l,j]*x_lj[(l,j)] for (l,j) in arcs_lj) ) \\n\")\n\t\n\t\t\n\tf.close()\n\n\n\tjson_dict = {}\n\tjson_dict[\"num_inputs\"] = num_i\n\tjson_dict[\"num_pools\"] = num_l\n\tjson_dict[\"num_outputs\"] = num_j\n\tjson_dict[\"num_qualities\"] = num_k\n\n\tjson_dict[\"num_copies\"] = num_copies\n\tjson_dict[\"num_added_edges\"] = num_added_edges\n\tjson_dict[\"pert_frac\"] = pert_frac\n\tjson_dict[\"capacities_scaling\"] = capacities_scaling\n\tjson_dict[\"costs_scaling\"] = costs_scaling\n\n\tjson_dict[\"arcs_inputs_outputs\"] = [(i+1,j+1) for (i,j) in arcs_ij]\n\tjson_dict[\"arcs_inputs_pools\"] = [(i+1,l+1) for (i,l) in arcs_il]\n\tjson_dict[\"arcs_pools_outputs\"] = [(l+1,j+1) for (l,j) in arcs_lj]\n\tjson_dict[\"arcs_inputs_pools_outputs\"] = [(i+1,l+1,j+1) for (i,l,j) in arcs_ilj]\n\n\tjson_dict[\"capacities_inputs\"] = cap_i\n\tjson_dict[\"capacities_pools\"] = cap_l\n\tjson_dict[\"capacities_outputs\"] = cap_j\n\n\tjson_dict[\"cost_ij_rows\"] = [i+1 for i in cost_ij_rows]\n\tjson_dict[\"cost_ij_cols\"] = [i+1 for i in cost_ij_rows]\n\tjson_dict[\"cost_ij_vals\"] = cost_ij_vals\n\tjson_dict[\"cost_il_rows\"] = [i+1 for i in cost_il_rows]\n\tjson_dict[\"cost_il_cols\"] = [i+1 for i in cost_il_rows]\n\tjson_dict[\"cost_il_vals\"] = cost_il_vals\n\tjson_dict[\"cost_lj_rows\"] = [i+1 for i in cost_lj_rows]\n\tjson_dict[\"cost_lj_cols\"] = [i+1 for i in cost_lj_rows]\n\tjson_dict[\"cost_lj_vals\"] = cost_lj_vals\n\n\tjson_dict[\"specs_inputs_nominal\"] = specs_in_nominal\n\tjson_dict[\"theta_specs_inputs\"] = theta_specs.tolist()\n\tjson_dict[\"specs_inputs\"] = specs_in\n\tjson_dict[\"specs_outputs_min\"] = spec_out_min\n\tjson_dict[\"specs_outputs_max\"] = spec_out_max\n\tjson_dict[\"gamma_low\"] = gamma_low\n\tjson_dict[\"gamma_up\"] = gamma_up\n\n\n\twith open(json_file, 'w', encoding='utf-8') as outF:\n\t\tjson.dump(json_dict, outF, ensure_ascii=False, indent=4)\n"
  },
  {
    "path": "examples/random_QCQPs/pooling/haverly_15_addedges_150_attr_0_1.json",
    "content": "{\n    \"out\": \"test_instances/haverly_15_addedges_150_attr_0_1\",\n    \"seed\": 0,\n    \"haverly\": 15,\n    \"scalehaverlys\": \"random\",\n    \"scalequalities\": null,\n    \"density\": null,\n    \"addedges\": 150,\n    \"attributes\": 0,\n    \"nodes\": 90,\n    \"edges\": 240,\n    \"inputs\": 45,\n    \"pools\": 15,\n    \"outputs\": 30,\n    \"components\": 1,\n    \"density_real\": 0.09696969696969697,\n    \"input->pool\": 71,\n    \"pool->output\": 53,\n    \"input->output\": 116,\n    \"min_cost\": -15,\n    \"max_cost\": 16,\n    \"graph\": {\n        \"directed\": true,\n        \"multigraph\": false,\n        \"graph\": {\n            \"name\": \"compose( ,  )\",\n            \"attributes\": [\n                \"k1\"\n            ]\n        },\n        \"nodes\": [\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 0.8407370060109167\n                },\n                \"id\": \"h14_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 1.6814740120218334\n                },\n                \"id\": \"h14_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 0.5604913373406112\n                },\n                \"id\": \"h14_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 1.1209826746812224\n                },\n                \"id\": \"h14_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 600,\n                \"overbeta\": {\n                    \"k1\": 1.401228343351528\n                },\n                \"id\": \"h14_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 800,\n                \"id\": \"h14_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 1.1611932187032805\n                },\n                \"id\": \"h13_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 2.322386437406561\n                },\n                \"id\": \"h13_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 0.7741288124688537\n                },\n                \"id\": \"h13_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.5482576249377074\n                },\n                \"id\": \"h13_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 100,\n                \"overbeta\": {\n                    \"k1\": 1.9353220311721342\n                },\n                \"id\": \"h13_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 300,\n                \"id\": \"h13_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 2.635994117851846\n                },\n                \"id\": \"h12_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 5.271988235703692\n                },\n                \"id\": \"h12_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.7573294119012304\n                },\n                \"id\": \"h12_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 3.5146588238024608\n                },\n                \"id\": \"h12_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 100,\n                \"overbeta\": {\n                    \"k1\": 4.393323529753076\n                },\n                \"id\": \"h12_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 300,\n                \"id\": \"h12_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 0.8387038058667531\n                },\n                \"id\": \"h11_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.6774076117335062\n                },\n                \"id\": \"h11_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 0.5591358705778354\n                },\n                \"id\": \"h11_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.1182717411556709\n                },\n                \"id\": \"h11_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 100,\n                \"overbeta\": {\n                    \"k1\": 1.3978396764445886\n                },\n                \"id\": \"h11_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 300,\n                \"id\": \"h11_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 2.64747956602852\n                },\n                \"id\": \"h10_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 5.29495913205704\n                },\n                \"id\": \"h10_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 1.7649863773523469\n                },\n                \"id\": \"h10_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 3.5299727547046937\n                },\n                \"id\": \"h10_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 600,\n                \"overbeta\": {\n                    \"k1\": 4.412465943380867\n                },\n                \"id\": \"h10_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 800,\n                \"id\": \"h10_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 2.9358900448940743\n                },\n                \"id\": \"h09_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 5.871780089788149\n                },\n                \"id\": \"h09_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.957260029929383\n                },\n                \"id\": \"h09_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 3.914520059858766\n                },\n                \"id\": \"h09_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 100,\n                \"overbeta\": {\n                    \"k1\": 4.893150074823457\n                },\n                \"id\": \"h09_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 300,\n                \"id\": \"h09_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 2.9524654958112744\n                },\n                \"id\": \"h08_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 5.904930991622549\n                },\n                \"id\": \"h08_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.9683103305408496\n                },\n                \"id\": \"h08_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 3.936620661081699\n                },\n                \"id\": \"h08_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 100,\n                \"overbeta\": {\n                    \"k1\": 4.9207758263521235\n                },\n                \"id\": \"h08_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 300,\n                \"id\": \"h08_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 1.7873470715803832\n                },\n                \"id\": \"h07_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 3.5746941431607664\n                },\n                \"id\": \"h07_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 1.1915647143869221\n                },\n                \"id\": \"h07_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 2.3831294287738443\n                },\n                \"id\": \"h07_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 600,\n                \"overbeta\": {\n                    \"k1\": 2.9789117859673055\n                },\n                \"id\": \"h07_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 800,\n                \"id\": \"h07_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 0.8841026653489391\n                },\n                \"id\": \"h06_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.7682053306978782\n                },\n                \"id\": \"h06_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 0.5894017768992927\n                },\n                \"id\": \"h06_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.1788035537985855\n                },\n                \"id\": \"h06_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 100,\n                \"overbeta\": {\n                    \"k1\": 1.473504442248232\n                },\n                \"id\": \"h06_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 300,\n                \"id\": \"h06_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 1.5105783755153075\n                },\n                \"id\": \"h05_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 3.021156751030615\n                },\n                \"id\": \"h05_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 1.0070522503435384\n                },\n                \"id\": \"h05_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 2.014104500687077\n                },\n                \"id\": \"h05_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 600,\n                \"overbeta\": {\n                    \"k1\": 2.517630625858846\n                },\n                \"id\": \"h05_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 800,\n                \"id\": \"h05_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 1.6980384355293408\n                },\n                \"id\": \"h04_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 3.3960768710586815\n                },\n                \"id\": \"h04_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.1320256236862272\n                },\n                \"id\": \"h04_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 2.2640512473724543\n                },\n                \"id\": \"h04_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 100,\n                \"overbeta\": {\n                    \"k1\": 2.8300640592155677\n                },\n                \"id\": \"h04_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 300,\n                \"id\": \"h04_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 2.8808052414413545\n                },\n                \"id\": \"h03_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 5.761610482882709\n                },\n                \"id\": \"h03_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 1.9205368276275696\n                },\n                \"id\": \"h03_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 3.841073655255139\n                },\n                \"id\": \"h03_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 600,\n                \"overbeta\": {\n                    \"k1\": 4.801342069068924\n                },\n                \"id\": \"h03_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 800,\n                \"id\": \"h03_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 1.468634361852371\n                },\n                \"id\": \"h02_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 2.937268723704742\n                },\n                \"id\": \"h02_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 0.9790895745682473\n                },\n                \"id\": \"h02_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 1.9581791491364946\n                },\n                \"id\": \"h02_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 600,\n                \"overbeta\": {\n                    \"k1\": 2.4477239364206183\n                },\n                \"id\": \"h02_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 800,\n                \"id\": \"h02_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 0.7828217609506095\n                },\n                \"id\": \"h01_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.565643521901219\n                },\n                \"id\": \"h01_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 0.521881173967073\n                },\n                \"id\": \"h01_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 300,\n                \"lambda\": {\n                    \"k1\": 1.043762347934146\n                },\n                \"id\": \"h01_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 100,\n                \"overbeta\": {\n                    \"k1\": 1.3047029349176826\n                },\n                \"id\": \"h01_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 300,\n                \"id\": \"h01_l1\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 200,\n                \"overbeta\": {\n                    \"k1\": 2.452888783643272\n                },\n                \"id\": \"h00_j2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 4.905777567286544\n                },\n                \"id\": \"h00_i1\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 1.6352591890955144\n                },\n                \"id\": \"h00_i2\"\n            },\n            {\n                \"type\": \"input\",\n                \"C\": 800,\n                \"lambda\": {\n                    \"k1\": 3.2705183781910288\n                },\n                \"id\": \"h00_i3\"\n            },\n            {\n                \"type\": \"output\",\n                \"C\": 600,\n                \"overbeta\": {\n                    \"k1\": 4.088147972738786\n                },\n                \"id\": \"h00_j1\"\n            },\n            {\n                \"type\": \"pool\",\n                \"C\": 800,\n                \"id\": \"h00_l1\"\n            }\n        ],\n        \"links\": [\n            {\n                \"cost\": 6,\n                \"source\": 1,\n                \"target\": 5\n            },\n            {\n                \"cost\": 7.017856132762091,\n                \"source\": 1,\n                \"target\": 11\n            },\n            {\n                \"cost\": 13.14923557194734,\n                \"source\": 1,\n                \"target\": 0\n            },\n            {\n                \"cost\": -14.556969260893403,\n                \"source\": 1,\n                \"target\": 24\n            },\n            {\n                \"cost\": -13.104159147075052,\n                \"source\": 1,\n                \"target\": 72\n            },\n            {\n                \"cost\": 16,\n                \"source\": 2,\n                \"target\": 5\n            },\n            {\n                \"cost\": 5.633780482555956,\n                \"source\": 2,\n                \"target\": 24\n            },\n            {\n                \"cost\": -10.244204101125849,\n                \"source\": 2,\n                \"target\": 17\n            },\n            {\n                \"cost\": -6.369295728292823,\n                \"source\": 2,\n                \"target\": 77\n            },\n            {\n                \"cost\": -5,\n                \"source\": 3,\n                \"target\": 0\n            },\n            {\n                \"cost\": 1,\n                \"source\": 3,\n                \"target\": 4\n            },\n            {\n                \"cost\": -13.87184683404394,\n                \"source\": 3,\n                \"target\": 6\n            },\n            {\n                \"cost\": 14.046043917982004,\n                \"source\": 3,\n                \"target\": 18\n            },\n            {\n                \"cost\": 4.456812117410507,\n                \"source\": 3,\n                \"target\": 22\n            },\n            {\n                \"cost\": -15,\n                \"source\": 5,\n                \"target\": 0\n            },\n            {\n                \"cost\": -9,\n                \"source\": 5,\n                \"target\": 4\n            },\n            {\n                \"cost\": 10.465483656440789,\n                \"source\": 5,\n                \"target\": 22\n            },\n            {\n                \"cost\": -4.514064929172962,\n                \"source\": 5,\n                \"target\": 82\n            },\n            {\n                \"cost\": 6,\n                \"source\": 7,\n                \"target\": 11\n            },\n            {\n                \"cost\": 12.179881495506017,\n                \"source\": 7,\n                \"target\": 4\n            },\n            {\n                \"cost\": -4.5865868113227215,\n                \"source\": 7,\n                \"target\": 72\n            },\n            {\n                \"cost\": 8.937757257581296,\n                \"source\": 7,\n                \"target\": 83\n            },\n            {\n                \"cost\": 14.341579179269875,\n                \"source\": 7,\n                \"target\": 52\n            },\n            {\n                \"cost\": 13,\n                \"source\": 8,\n                \"target\": 11\n            },\n            {\n                \"cost\": 14.96301599433868,\n                \"source\": 8,\n                \"target\": 82\n            },\n            {\n                \"cost\": -5,\n                \"source\": 9,\n                \"target\": 6\n            },\n            {\n                \"cost\": 1,\n                \"source\": 9,\n                \"target\": 10\n            },\n            {\n                \"cost\": 6.812918931131126,\n                \"source\": 9,\n                \"target\": 28\n            },\n            {\n                \"cost\": -4.6913793741906815,\n                \"source\": 9,\n                \"target\": 24\n            },\n            {\n                \"cost\": -8.47212819351396,\n                \"source\": 9,\n                \"target\": 18\n            },\n            {\n                \"cost\": -9.864075840965526,\n                \"source\": 9,\n                \"target\": 59\n            },\n            {\n                \"cost\": -15,\n                \"source\": 11,\n                \"target\": 6\n            },\n            {\n                \"cost\": -9,\n                \"source\": 11,\n                \"target\": 10\n            },\n            {\n                \"cost\": 3.667285107808283,\n                \"source\": 11,\n                \"target\": 60\n            },\n            {\n                \"cost\": 10.912982322704167,\n                \"source\": 11,\n                \"target\": 18\n            },\n            {\n                \"cost\": 6,\n                \"source\": 13,\n                \"target\": 17\n            },\n            {\n                \"cost\": -0.8034196869372892,\n                \"source\": 13,\n                \"target\": 40\n            },\n            {\n                \"cost\": 8.20306231712518,\n                \"source\": 13,\n                \"target\": 58\n            },\n            {\n                \"cost\": -9.171959884424332,\n                \"source\": 13,\n                \"target\": 88\n            },\n            {\n                \"cost\": 13,\n                \"source\": 14,\n                \"target\": 17\n            },\n            {\n                \"cost\": 13.395828891063424,\n                \"source\": 14,\n                \"target\": 42\n            },\n            {\n                \"cost\": -0.22753924770919554,\n                \"source\": 14,\n                \"target\": 18\n            },\n            {\n                \"cost\": 9.989673362757085,\n                \"source\": 14,\n                \"target\": 46\n            },\n            {\n                \"cost\": -12.95912500440367,\n                \"source\": 14,\n                \"target\": 23\n            },\n            {\n                \"cost\": -5,\n                \"source\": 15,\n                \"target\": 12\n            },\n            {\n                \"cost\": 1,\n                \"source\": 15,\n                \"target\": 16\n            },\n            {\n                \"cost\": 1.8712977557941066,\n                \"source\": 15,\n                \"target\": 46\n            },\n            {\n                \"cost\": -13.779260080374536,\n                \"source\": 15,\n                \"target\": 42\n            },\n            {\n                \"cost\": 9.478317926699262,\n                \"source\": 15,\n                \"target\": 6\n            },\n            {\n                \"cost\": -15,\n                \"source\": 17,\n                \"target\": 12\n            },\n            {\n                \"cost\": -9,\n                \"source\": 17,\n                \"target\": 16\n            },\n            {\n                \"cost\": -5.724009351012334,\n                \"source\": 17,\n                \"target\": 84\n            },\n            {\n                \"cost\": 6,\n                \"source\": 19,\n                \"target\": 23\n            },\n            {\n                \"cost\": -12.44643736590393,\n                \"source\": 19,\n                \"target\": 4\n            },\n            {\n                \"cost\": 3.796490950380786,\n                \"source\": 19,\n                \"target\": 47\n            },\n            {\n                \"cost\": 10.849177348584057,\n                \"source\": 19,\n                \"target\": 16\n            },\n            {\n                \"cost\": 1.4137009141691586,\n                \"source\": 19,\n                \"target\": 42\n            },\n            {\n                \"cost\": 9.79456125618955,\n                \"source\": 19,\n                \"target\": 58\n            },\n            {\n                \"cost\": -10.981130889835828,\n                \"source\": 19,\n                \"target\": 59\n            },\n            {\n                \"cost\": -11.14593113324283,\n                \"source\": 19,\n                \"target\": 72\n            },\n            {\n                \"cost\": 16,\n                \"source\": 20,\n                \"target\": 23\n            },\n            {\n                \"cost\": 6.040442738575646,\n                \"source\": 20,\n                \"target\": 36\n            },\n            {\n                \"cost\": 10.960900206060593,\n                \"source\": 20,\n                \"target\": 88\n            },\n            {\n                \"cost\": -5,\n                \"source\": 21,\n                \"target\": 18\n            },\n            {\n                \"cost\": 1,\n                \"source\": 21,\n                \"target\": 22\n            },\n            {\n                \"cost\": -7.602906212928175,\n                \"source\": 21,\n                \"target\": 47\n            },\n            {\n                \"cost\": 1.8739044271959209,\n                \"source\": 21,\n                \"target\": 28\n            },\n            {\n                \"cost\": 5.875507243985211,\n                \"source\": 21,\n                \"target\": 4\n            },\n            {\n                \"cost\": 11.70215701275432,\n                \"source\": 21,\n                \"target\": 36\n            },\n            {\n                \"cost\": -15,\n                \"source\": 23,\n                \"target\": 18\n            },\n            {\n                \"cost\": -9,\n                \"source\": 23,\n                \"target\": 22\n            },\n            {\n                \"cost\": -11.881166873301018,\n                \"source\": 23,\n                \"target\": 4\n            },\n            {\n                \"cost\": 6,\n                \"source\": 25,\n                \"target\": 29\n            },\n            {\n                \"cost\": 9.448096990304105,\n                \"source\": 25,\n                \"target\": 70\n            },\n            {\n                \"cost\": -6.963965373136094,\n                \"source\": 25,\n                \"target\": 84\n            },\n            {\n                \"cost\": -11.431610278578262,\n                \"source\": 25,\n                \"target\": 72\n            },\n            {\n                \"cost\": -14.724190456478556,\n                \"source\": 25,\n                \"target\": 47\n            },\n            {\n                \"cost\": 16,\n                \"source\": 26,\n                \"target\": 29\n            },\n            {\n                \"cost\": -3.4661340144867303,\n                \"source\": 26,\n                \"target\": 58\n            },\n            {\n                \"cost\": 10.988123520995906,\n                \"source\": 26,\n                \"target\": 71\n            },\n            {\n                \"cost\": 6.656063358235748,\n                \"source\": 26,\n                \"target\": 11\n            },\n            {\n                \"cost\": -13.722708565307512,\n                \"source\": 26,\n                \"target\": 83\n            },\n            {\n                \"cost\": 7.777280727777072,\n                \"source\": 26,\n                \"target\": 16\n            },\n            {\n                \"cost\": -5,\n                \"source\": 27,\n                \"target\": 24\n            },\n            {\n                \"cost\": 1,\n                \"source\": 27,\n                \"target\": 28\n            },\n            {\n                \"cost\": -4.140887010707498,\n                \"source\": 27,\n                \"target\": 72\n            },\n            {\n                \"cost\": -15,\n                \"source\": 29,\n                \"target\": 24\n            },\n            {\n                \"cost\": -9,\n                \"source\": 29,\n                \"target\": 28\n            },\n            {\n                \"cost\": -5.999785425514501,\n                \"source\": 29,\n                \"target\": 42\n            },\n            {\n                \"cost\": -14.17239936547164,\n                \"source\": 29,\n                \"target\": 64\n            },\n            {\n                \"cost\": -8.967680373847713,\n                \"source\": 29,\n                \"target\": 18\n            },\n            {\n                \"cost\": 6.344740125044961,\n                \"source\": 29,\n                \"target\": 76\n            },\n            {\n                \"cost\": 12.013732676772715,\n                \"source\": 29,\n                \"target\": 40\n            },\n            {\n                \"cost\": 6,\n                \"source\": 31,\n                \"target\": 35\n            },\n            {\n                \"cost\": -5.197902314830603,\n                \"source\": 31,\n                \"target\": 88\n            },\n            {\n                \"cost\": -14.952749122441674,\n                \"source\": 31,\n                \"target\": 59\n            },\n            {\n                \"cost\": 3.973920859629768,\n                \"source\": 31,\n                \"target\": 64\n            },\n            {\n                \"cost\": 13,\n                \"source\": 32,\n                \"target\": 35\n            },\n            {\n                \"cost\": 6.628609194247851,\n                \"source\": 32,\n                \"target\": 46\n            },\n            {\n                \"cost\": -11.313979261672879,\n                \"source\": 32,\n                \"target\": 47\n            },\n            {\n                \"cost\": -5,\n                \"source\": 33,\n                \"target\": 30\n            },\n            {\n                \"cost\": 1,\n                \"source\": 33,\n                \"target\": 34\n            },\n            {\n                \"cost\": -9.076920163425893,\n                \"source\": 33,\n                \"target\": 64\n            },\n            {\n                \"cost\": -11.368836910535943,\n                \"source\": 33,\n                \"target\": 70\n            },\n            {\n                \"cost\": 11.515001204816922,\n                \"source\": 33,\n                \"target\": 59\n            },\n            {\n                \"cost\": -5.198508746138387,\n                \"source\": 33,\n                \"target\": 84\n            },\n            {\n                \"cost\": -13.688774337913383,\n                \"source\": 33,\n                \"target\": 29\n            },\n            {\n                \"cost\": -15,\n                \"source\": 35,\n                \"target\": 30\n            },\n            {\n                \"cost\": -9,\n                \"source\": 35,\n                \"target\": 34\n            },\n            {\n                \"cost\": 6,\n                \"source\": 37,\n                \"target\": 41\n            },\n            {\n                \"cost\": -5.171547719499609,\n                \"source\": 37,\n                \"target\": 89\n            },\n            {\n                \"cost\": -6.455342239324057,\n                \"source\": 37,\n                \"target\": 46\n            },\n            {\n                \"cost\": -8.860751247063602,\n                \"source\": 37,\n                \"target\": 52\n            },\n            {\n                \"cost\": 9.436951839413865,\n                \"source\": 37,\n                \"target\": 17\n            },\n            {\n                \"cost\": 13,\n                \"source\": 38,\n                \"target\": 41\n            },\n            {\n                \"cost\": 11.197404845816973,\n                \"source\": 38,\n                \"target\": 23\n            },\n            {\n                \"cost\": -5,\n                \"source\": 39,\n                \"target\": 36\n            },\n            {\n                \"cost\": 1,\n                \"source\": 39,\n                \"target\": 40\n            },\n            {\n                \"cost\": 3.995968575926806,\n                \"source\": 39,\n                \"target\": 70\n            },\n            {\n                \"cost\": -2.95209047222513,\n                \"source\": 39,\n                \"target\": 52\n            },\n            {\n                \"cost\": -0.17999525631834956,\n                \"source\": 39,\n                \"target\": 18\n            },\n            {\n                \"cost\": -15,\n                \"source\": 41,\n                \"target\": 36\n            },\n            {\n                \"cost\": -9,\n                \"source\": 41,\n                \"target\": 40\n            },\n            {\n                \"cost\": 6,\n                \"source\": 43,\n                \"target\": 47\n            },\n            {\n                \"cost\": -14.497520173518616,\n                \"source\": 43,\n                \"target\": 28\n            },\n            {\n                \"cost\": 16,\n                \"source\": 44,\n                \"target\": 47\n            },\n            {\n                \"cost\": -5,\n                \"source\": 45,\n                \"target\": 42\n            },\n            {\n                \"cost\": 1,\n                \"source\": 45,\n                \"target\": 46\n            },\n            {\n                \"cost\": -4.081007593019269,\n                \"source\": 45,\n                \"target\": 52\n            },\n            {\n                \"cost\": 12.083268540910613,\n                \"source\": 45,\n                \"target\": 10\n            },\n            {\n                \"cost\": -15,\n                \"source\": 47,\n                \"target\": 42\n            },\n            {\n                \"cost\": -9,\n                \"source\": 47,\n                \"target\": 46\n            },\n            {\n                \"cost\": -8.154292589194162,\n                \"source\": 47,\n                \"target\": 70\n            },\n            {\n                \"cost\": -8.556832785584433,\n                \"source\": 47,\n                \"target\": 60\n            },\n            {\n                \"cost\": -10.36810286015767,\n                \"source\": 47,\n                \"target\": 52\n            },\n            {\n                \"cost\": 6,\n                \"source\": 49,\n                \"target\": 53\n            },\n            {\n                \"cost\": 16,\n                \"source\": 50,\n                \"target\": 53\n            },\n            {\n                \"cost\": -7.438762816498909,\n                \"source\": 50,\n                \"target\": 40\n            },\n            {\n                \"cost\": 6.110899873448542,\n                \"source\": 50,\n                \"target\": 89\n            },\n            {\n                \"cost\": 13.946376461505494,\n                \"source\": 50,\n                \"target\": 52\n            },\n            {\n                \"cost\": 7.58848318604193,\n                \"source\": 50,\n                \"target\": 5\n            },\n            {\n                \"cost\": -5,\n                \"source\": 51,\n                \"target\": 48\n            },\n            {\n                \"cost\": 1,\n                \"source\": 51,\n                \"target\": 52\n            },\n            {\n                \"cost\": 3.9688096292384962,\n                \"source\": 51,\n                \"target\": 16\n            },\n            {\n                \"cost\": 0.07977026104417106,\n                \"source\": 51,\n                \"target\": 65\n            },\n            {\n                \"cost\": -15,\n                \"source\": 53,\n                \"target\": 48\n            },\n            {\n                \"cost\": -9,\n                \"source\": 53,\n                \"target\": 52\n            },\n            {\n                \"cost\": -2.5017564602021025,\n                \"source\": 53,\n                \"target\": 88\n            },\n            {\n                \"cost\": 6,\n                \"source\": 55,\n                \"target\": 59\n            },\n            {\n                \"cost\": 11.208162404750109,\n                \"source\": 55,\n                \"target\": 28\n            },\n            {\n                \"cost\": -6.587423642459065,\n                \"source\": 55,\n                \"target\": 60\n            },\n            {\n                \"cost\": -13.827444230325547,\n                \"source\": 55,\n                \"target\": 65\n            },\n            {\n                \"cost\": 16,\n                \"source\": 56,\n                \"target\": 59\n            },\n            {\n                \"cost\": 0.2723169808656465,\n                \"source\": 56,\n                \"target\": 10\n            },\n            {\n                \"cost\": -8.819970495521048,\n                \"source\": 56,\n                \"target\": 66\n            },\n            {\n                \"cost\": 13.442844805529905,\n                \"source\": 56,\n                \"target\": 71\n            },\n            {\n                \"cost\": 5.260576696297758,\n                \"source\": 56,\n                \"target\": 35\n            },\n            {\n                \"cost\": -0.3058558147438113,\n                \"source\": 56,\n                \"target\": 47\n            },\n            {\n                \"cost\": -5,\n                \"source\": 57,\n                \"target\": 54\n            },\n            {\n                \"cost\": 1,\n                \"source\": 57,\n                \"target\": 58\n            },\n            {\n                \"cost\": -2.872508310992366,\n                \"source\": 57,\n                \"target\": 53\n            },\n            {\n                \"cost\": -15,\n                \"source\": 59,\n                \"target\": 54\n            },\n            {\n                \"cost\": -9,\n                \"source\": 59,\n                \"target\": 58\n            },\n            {\n                \"cost\": -12.159405056499747,\n                \"source\": 59,\n                \"target\": 72\n            },\n            {\n                \"cost\": 6,\n                \"source\": 61,\n                \"target\": 65\n            },\n            {\n                \"cost\": 4.844377193589949,\n                \"source\": 61,\n                \"target\": 34\n            },\n            {\n                \"cost\": -1.8858197212699022,\n                \"source\": 61,\n                \"target\": 47\n            },\n            {\n                \"cost\": 16,\n                \"source\": 62,\n                \"target\": 65\n            },\n            {\n                \"cost\": 7.310845278522578,\n                \"source\": 62,\n                \"target\": 4\n            },\n            {\n                \"cost\": 6.679016877973748,\n                \"source\": 62,\n                \"target\": 22\n            },\n            {\n                \"cost\": 7.184199859345146,\n                \"source\": 62,\n                \"target\": 29\n            },\n            {\n                \"cost\": 13.510354177379913,\n                \"source\": 62,\n                \"target\": 11\n            },\n            {\n                \"cost\": -5,\n                \"source\": 63,\n                \"target\": 60\n            },\n            {\n                \"cost\": 1,\n                \"source\": 63,\n                \"target\": 64\n            },\n            {\n                \"cost\": 15.591465886358971,\n                \"source\": 63,\n                \"target\": 77\n            },\n            {\n                \"cost\": -11.89439863902502,\n                \"source\": 63,\n                \"target\": 42\n            },\n            {\n                \"cost\": -15,\n                \"source\": 65,\n                \"target\": 60\n            },\n            {\n                \"cost\": -9,\n                \"source\": 65,\n                \"target\": 64\n            },\n            {\n                \"cost\": 11.33406492077738,\n                \"source\": 65,\n                \"target\": 42\n            },\n            {\n                \"cost\": -0.3796121320150725,\n                \"source\": 65,\n                \"target\": 24\n            },\n            {\n                \"cost\": 6,\n                \"source\": 67,\n                \"target\": 71\n            },\n            {\n                \"cost\": -3.261909819984073,\n                \"source\": 67,\n                \"target\": 28\n            },\n            {\n                \"cost\": -14.022090178204483,\n                \"source\": 67,\n                \"target\": 60\n            },\n            {\n                \"cost\": -13.454433105286796,\n                \"source\": 67,\n                \"target\": 42\n            },\n            {\n                \"cost\": 14.435973562553265,\n                \"source\": 67,\n                \"target\": 76\n            },\n            {\n                \"cost\": 16,\n                \"source\": 68,\n                \"target\": 71\n            },\n            {\n                \"cost\": 3.216128989438527,\n                \"source\": 68,\n                \"target\": 78\n            },\n            {\n                \"cost\": -5,\n                \"source\": 69,\n                \"target\": 66\n            },\n            {\n                \"cost\": 1,\n                \"source\": 69,\n                \"target\": 70\n            },\n            {\n                \"cost\": 9.898563547675973,\n                \"source\": 69,\n                \"target\": 12\n            },\n            {\n                \"cost\": 2.970545333113783,\n                \"source\": 69,\n                \"target\": 59\n            },\n            {\n                \"cost\": 3.500533197551743,\n                \"source\": 69,\n                \"target\": 54\n            },\n            {\n                \"cost\": 6.687454025669172,\n                \"source\": 69,\n                \"target\": 42\n            },\n            {\n                \"cost\": -15,\n                \"source\": 71,\n                \"target\": 66\n            },\n            {\n                \"cost\": -9,\n                \"source\": 71,\n                \"target\": 70\n            },\n            {\n                \"cost\": -7.578105234235284,\n                \"source\": 71,\n                \"target\": 78\n            },\n            {\n                \"cost\": 6,\n                \"source\": 73,\n                \"target\": 77\n            },\n            {\n                \"cost\": -6.483870854002875,\n                \"source\": 73,\n                \"target\": 72\n            },\n            {\n                \"cost\": 16,\n                \"source\": 74,\n                \"target\": 77\n            },\n            {\n                \"cost\": 14.964797400893524,\n                \"source\": 74,\n                \"target\": 5\n            },\n            {\n                \"cost\": -13.107684384191547,\n                \"source\": 74,\n                \"target\": 16\n            },\n            {\n                \"cost\": 13.036357623931373,\n                \"source\": 74,\n                \"target\": 48\n            },\n            {\n                \"cost\": -4.895738961742778,\n                \"source\": 74,\n                \"target\": 82\n            },\n            {\n                \"cost\": 7.083087228003492,\n                \"source\": 74,\n                \"target\": 54\n            },\n            {\n                \"cost\": -5,\n                \"source\": 75,\n                \"target\": 72\n            },\n            {\n                \"cost\": 1,\n                \"source\": 75,\n                \"target\": 76\n            },\n            {\n                \"cost\": 7.261513120239599,\n                \"source\": 75,\n                \"target\": 12\n            },\n            {\n                \"cost\": -15,\n                \"source\": 77,\n                \"target\": 72\n            },\n            {\n                \"cost\": -9,\n                \"source\": 77,\n                \"target\": 76\n            },\n            {\n                \"cost\": -7.5559573573830265,\n                \"source\": 77,\n                \"target\": 4\n            },\n            {\n                \"cost\": 6,\n                \"source\": 79,\n                \"target\": 83\n            },\n            {\n                \"cost\": -1.1626939225586739,\n                \"source\": 79,\n                \"target\": 17\n            },\n            {\n                \"cost\": 12.400129781709726,\n                \"source\": 79,\n                \"target\": 82\n            },\n            {\n                \"cost\": -11.918589514600267,\n                \"source\": 79,\n                \"target\": 48\n            },\n            {\n                \"cost\": 13,\n                \"source\": 80,\n                \"target\": 83\n            },\n            {\n                \"cost\": -1.2765058664634257,\n                \"source\": 80,\n                \"target\": 53\n            },\n            {\n                \"cost\": 12.90303962411355,\n                \"source\": 80,\n                \"target\": 70\n            },\n            {\n                \"cost\": 11.237157569998345,\n                \"source\": 80,\n                \"target\": 41\n            },\n            {\n                \"cost\": -6.0155549354488205,\n                \"source\": 80,\n                \"target\": 48\n            },\n            {\n                \"cost\": -5,\n                \"source\": 81,\n                \"target\": 78\n            },\n            {\n                \"cost\": 1,\n                \"source\": 81,\n                \"target\": 82\n            },\n            {\n                \"cost\": 6.188449949996006,\n                \"source\": 81,\n                \"target\": 29\n            },\n            {\n                \"cost\": -15,\n                \"source\": 83,\n                \"target\": 78\n            },\n            {\n                \"cost\": -9,\n                \"source\": 83,\n                \"target\": 82\n            },\n            {\n                \"cost\": -4.6847341042125805,\n                \"source\": 83,\n                \"target\": 88\n            },\n            {\n                \"cost\": -13.597743896166017,\n                \"source\": 83,\n                \"target\": 76\n            },\n            {\n                \"cost\": 6,\n                \"source\": 85,\n                \"target\": 89\n            },\n            {\n                \"cost\": -6.924738377849259,\n                \"source\": 85,\n                \"target\": 48\n            },\n            {\n                \"cost\": -12.172305431262998,\n                \"source\": 85,\n                \"target\": 59\n            },\n            {\n                \"cost\": -8.700742573447567,\n                \"source\": 85,\n                \"target\": 60\n            },\n            {\n                \"cost\": 11.116266917345655,\n                \"source\": 85,\n                \"target\": 22\n            },\n            {\n                \"cost\": 15.387583922629606,\n                \"source\": 85,\n                \"target\": 77\n            },\n            {\n                \"cost\": -11.959628178119313,\n                \"source\": 85,\n                \"target\": 88\n            },\n            {\n                \"cost\": 16,\n                \"source\": 86,\n                \"target\": 89\n            },\n            {\n                \"cost\": -9.432807679711775,\n                \"source\": 86,\n                \"target\": 5\n            },\n            {\n                \"cost\": -5,\n                \"source\": 87,\n                \"target\": 84\n            },\n            {\n                \"cost\": 1,\n                \"source\": 87,\n                \"target\": 88\n            },\n            {\n                \"cost\": -15,\n                \"source\": 89,\n                \"target\": 84\n            },\n            {\n                \"cost\": -9,\n                \"source\": 89,\n                \"target\": 88\n            },\n            {\n                \"cost\": -3.8118950483310883,\n                \"source\": 89,\n                \"target\": 48\n            }\n        ]\n    }\n}"
  },
  {
    "path": "examples/random_QCQPs/qcqp/generate_qcqp_instances.py",
    "content": "\"\"\"\n// @brief  Script to generate the nonconvex QCQP instances with both bilinear and univariate quadratics\n//\t\t   Input arguments: numVariables, numInstances\n// Reference: \"Learning to Accelerate the Global Optimization of Quadratically-Constrained \n\t\t\t   Quadratic Programs\" by R. Kannan, H. Nagarajan, and D. Deka \n\t\t\t   (Link: https://arxiv.org/abs/2301.00306)\n// Contributor: @rohitkannan \n\"\"\"\n\nimport random\nimport json\nimport numpy as np\nimport argparse\nimport os\n\nparser = argparse.ArgumentParser()\nparser.add_argument('--numVariables', type=int, required=True)\nparser.add_argument('--numInstances', type=int, required=True)\nargs = parser.parse_args()\n\nnumVariables = int(args.numVariables)\nnumInstances = int(args.numInstances)\n\ninstances_path = \"./N_\" + str(numVariables) + \"/\"\nos.makedirs(instances_path)\n\n# random seed for instances\nif numVariables == 10:\n\trandom.seed(3090)\nelif numVariables == 20:\n\trandom.seed(1168) \nelif numVariables == 50:\n\trandom.seed(9119) \n\nnp.random.seed(round(random.random()*10000)) \n\n\nstart = 1  # starting instance number\n\nnumQuadraticConstraints = numVariables  # number of constraints with bilinear, quadratic and linear terms\nnumLinearConstraints = round(numVariables/5)  # number of linear equality constraints\n\nconstraint_sparsity = 1.0  # (actually opposite of sparsity) fraction of possible bilinear, quadratic and linear terms occurring in each constraint\nmaxNumBilinearTerms = round(numVariables*(numVariables-1)/2)\nnumBilinearTerms = min(5*numVariables,maxNumBilinearTerms)  # number of bilinear terms in the formulation\n\nfrac_quad_terms = 0.25  # anticipated fraction of possible quadratic terms in the formulation\nnumQuadraticTerms = round(frac_quad_terms*numVariables)\n\nfrac_quad_con_pert = 0.2  # fraction of quadratic constraints perturbed\nnumPertFactors = 3  # number of perturbation factors per perturbed quadratic constraint\npert_frac = 0.5  # perturbation fraction around nominal instance\n\n\n# to sort list of lists\ndef Sort(sub_li):\n    return(sorted(sub_li, key = lambda x: (x[0],x[1])))    \n\n\n# GENERATE COMMON BILINEAR TERMS FOR ALL INSTANCES\npossible_bilinear_terms = [[i,j] for i in range(numVariables) for j in range(i+1,numVariables)]\nrandom.shuffle(possible_bilinear_terms)\nbilinear_terms = Sort(possible_bilinear_terms[:numBilinearTerms])\n\n\n# GENERATE COMMON QUADRATIC TERMS FOR ALL INSTANCES\npossible_quadratic_terms = list(range(numVariables))\nrandom.shuffle(possible_quadratic_terms)\nquadratic_terms = possible_quadratic_terms[:numQuadraticTerms]\n\n\n# GENERATE BASE COEFFICIENTS\nq_bilinear = []  # bilinear coefficients\nq_bilinear_ind = []  # bilinear coefficient indices\nq_quadratic = []  # quadratic coefficients\nq_quadratic_ind = []  # quadratic coefficient indices\n\n# OBJECTIVE COEFFICIENTS\nq_bilinear.append([2*random.random()-1 for j in range(numBilinearTerms)])  # all bilinear terms participate in the objective (sparsity not applied here)\nq_bilinear_ind.append(list(np.arange(numBilinearTerms)))\nq_quadratic.append([2*random.random()-1 for j in range(numQuadraticTerms)])  # all quadratic terms participate in the objective (sparsity not applied here)\nq_quadratic_ind.append(list(np.arange(numQuadraticTerms)))\n\n# CONSTRAINT COEFFICIENTS\nnumQuadNonZero = round(numBilinearTerms*constraint_sparsity)\nfor i in range(numQuadraticConstraints):\n\tq_bilinear.append([2*random.random()-1 for j in range(numQuadNonZero)])\n\ttmp_ind = list(np.random.choice(numBilinearTerms, numQuadNonZero, replace=False))\n\ttmp_ind.sort()\n\tq_bilinear_ind.append(tmp_ind)\n\nnumQuadNonZero2 = round(numQuadraticTerms*constraint_sparsity)\nfor i in range(numQuadraticConstraints):\n\tq_quadratic.append([2*random.random()-1 for j in range(numQuadNonZero2)])\n\ttmp_ind = list(np.random.choice(numQuadraticTerms, numQuadNonZero2, replace=False))\n\ttmp_ind.sort()\n\tq_quadratic_ind.append(tmp_ind)\n\n\nq_linear = []  # linear coefficients\nq_linear_ind = []  # linear coefficient indices\n\n# OBJECTIVE COEFFICIENTS\nq_linear.append([2*random.random()-1 for j in range(numVariables)])  # all linear terms participate in the objective (sparsity not applied here)\nq_linear_ind.append(list(np.arange(numVariables)))\n\n# CONSTRAINT COEFFICIENTS\nnumLinNonZero = round(numVariables*constraint_sparsity)\nfor i in range(numQuadraticConstraints+numLinearConstraints):\n\tif i < numQuadraticConstraints:  # only a fraction of linear terms appear in quadratic constraints\n\t\tq_linear.append([2*random.random()-1 for j in range(numLinNonZero)])\n\t\ttmp_ind = list(np.random.choice(numVariables, numLinNonZero, replace=False))\n\telse:  # all linear terms appear in linear equality constraints\n\t\tq_linear.append([2*random.random()-1 for j in range(numVariables)])\n\t\ttmp_ind = list(np.arange(numVariables))\n\ttmp_ind.sort()\n\tq_linear_ind.append(tmp_ind)\n\n\n# GENERATE BASE RHS COEFFICIENTS\nquadratic_scaling = 100\nrhs_quadratic = [quadratic_scaling*random.random() for i in range(numQuadraticConstraints)]\n\nlinear_scaling = 1\nrhs_linear = [linear_scaling*(2*random.random()-1) for i in range(numLinearConstraints)]\n\n\n# RE-SCALE PROBLEM SO THAT CONSTRAINTS RHS ARE EQUAL TO ONE\nfor i in range(numQuadraticConstraints):\n\tfor j in range(numQuadNonZero):\n\t\tq_bilinear[i+1][j] /= rhs_quadratic[i]\n\tfor j in range(numQuadNonZero2):\n\t\tq_quadratic[i+1][j] /= rhs_quadratic[i]\n\tfor j in range(numLinNonZero):\n\t\tq_linear[i+1][j] /= rhs_quadratic[i]\n\n\nfor i in range(numLinearConstraints):\n\tfor j in range(numVariables):\n\t\tq_linear[i+1+numQuadraticConstraints][j] /= rhs_linear[i]\n\n\n# CONSTRUCT PERTURBATION FACTORS FOR THE OBJECTIVE AND QUADRATIC CONSTRAINT COEFFICIENTS\nq_bilinear_obj_factors = np.zeros((numPertFactors,numBilinearTerms))\nq_quadratic_obj_factors = np.zeros((numPertFactors,numQuadraticTerms))\nq_linear_obj_factors = np.zeros((numPertFactors,numVariables))\nfor j in range(numBilinearTerms):\n\tfor k in range(numPertFactors):\n\t\tq_bilinear_obj_factors[k,j] = pert_frac*random.random()*q_bilinear[0][j]\nfor j in range(numQuadraticTerms):\n\tfor k in range(numPertFactors):\n\t\tq_quadratic_obj_factors[k,j] = pert_frac*random.random()*q_quadratic[0][j]\nfor j in range(numVariables):\n\tfor k in range(numPertFactors):\n\t\tq_linear_obj_factors[k,j] = pert_frac*random.random()*q_linear[0][j]\n\nnumQuadConPert = round(numQuadraticConstraints*frac_quad_con_pert)\nq_bilinear_con_factors = np.zeros((numPertFactors,numQuadConPert,numQuadNonZero))\nq_quadratic_con_factors = np.zeros((numPertFactors,numQuadConPert,numQuadNonZero2))\nq_linear_con_factors = np.zeros((numPertFactors,numQuadConPert,numLinNonZero))\nfor i in range(numQuadConPert):\n\tfor j in range(numQuadNonZero):\n\t\tfor k in range(numPertFactors):\n\t\t\tq_bilinear_con_factors[k,i,j] = pert_frac*random.random()*q_bilinear[i+1][j]\n\tfor j in range(numQuadNonZero2):\n\t\tfor k in range(numPertFactors):\n\t\t\tq_quadratic_con_factors[k,i,j] = pert_frac*random.random()*q_quadratic[i+1][j]\n\tfor j in range(numLinNonZero):\n\t\tfor k in range(numPertFactors):\n\t\t\tq_linear_con_factors[k,i,j] = pert_frac*random.random()*q_linear[i+1][j]\n\n\n\n# GENERATE PERTURBED INSTANCES\nfor inst in range(start,numInstances+start):\n\toutput_file = instances_path + \"qcqp_v\" + str(numVariables) + \"_b\" + str(numBilinearTerms) + \"_q\" + str(numQuadraticTerms) + \"_s\" + str(round(constraint_sparsity*100)) + \"_\" + str(inst) + \".jl\"\n\tjson_file = instances_path + \"qcqp_v\" + str(numVariables) + \"_b\" + str(numBilinearTerms) + \"_q\" + str(numQuadraticTerms) + \"_s\" + str(round(constraint_sparsity*100)) + \"_\" + str(inst) + \".json\"\n\n\tjson_dict = {}\n\tjson_dict[\"numVariables\"] = numVariables\n\tjson_dict[\"numQuadraticConstraints\"] = numQuadraticConstraints\n\tjson_dict[\"numLinearConstraints\"] = numLinearConstraints\n\tjson_dict[\"constraint_sparsity\"] = constraint_sparsity\n\n\tjson_dict[\"numBilinearTerms\"] = numBilinearTerms\n\tjson_dict[\"bilinear_terms\"] = bilinear_terms\n\n\tjson_dict[\"numQuadraticTerms\"] = numQuadraticTerms\n\tjson_dict[\"quadratic_terms\"] = quadratic_terms\n\n\tjson_dict[\"pert_frac\"] = pert_frac\n\tjson_dict[\"numPertFactors\"] = numPertFactors\n\tjson_dict[\"numQuadConPert\"] = numQuadConPert\n\tjson_dict[\"bilinear_obj_factors\"] = q_bilinear_obj_factors.tolist()\n\tjson_dict[\"quadratic_obj_factors\"] = q_quadratic_obj_factors.tolist()\n\tjson_dict[\"linear_obj_factors\"] = q_linear_obj_factors.tolist()\n\tjson_dict[\"bilinear_con_factors\"] = q_bilinear_con_factors.tolist()\n\tjson_dict[\"quadratic_con_factors\"] = q_quadratic_con_factors.tolist()\n\tjson_dict[\"linear_con_factors\"] = q_linear_con_factors.tolist()\n\n\n# GENERATE PERTURBATION FACTORS\n\ttheta = 2*(np.random.rand(numPertFactors,numQuadConPert+1) - 0.5)\n\n\tjson_dict[\"theta\"] = theta.tolist()\n\n# STORE SPARSITY PATTERN AND INITIALIZE DATA\n\tf = open(output_file, \"w\")\n\n\tf.write(\"# ----- Bilinear Terms ----- #\\n\")\n\tf.write(\"numBilinearTerms = \" + str(numBilinearTerms) + \"\\n\")\n\tf.write(\"bilinear_terms = [\")\n\tcount_bilinear = 0\n\tfor term in bilinear_terms:\n\t\tf.write(\"[\" + str(term[0]+1) + \",\" + str(term[1]+1) + \"]\")\n\t\tcount_bilinear += 1\n\t\tif count_bilinear < numBilinearTerms:\n\t\t\tf.write(\", \")\n\t\telse:\n\t\t\tf.write(\"] \\n\\n\")\n\n\t\n\tf.write(\"# ----- Quadratic Terms ----- #\\n\")\n\tf.write(\"numQuadraticTerms = \" + str(numQuadraticTerms) + \"\\n\")\n\tf.write(\"quadratic_terms = \" + str([term+1 for term in quadratic_terms]) + \"\\n\\n\")\n\t\n\tf.write(\"numQuadNonZero = \" + str(numQuadNonZero) + \"\\n\")\n\tf.write(\"numQuadNonZero2 = \" + str(numQuadNonZero2) + \"\\n\")\n\tf.write(\"numLinNonZero = \" + str(numLinNonZero) + \"\\n\\n\")\n\n\tf.write(\"# ----- Data Matrices ----- #\\n\")\n\tf.write(\"bilinear_obj_coeffs = zeros(Float64,\" + str(numBilinearTerms) + \") \\n\")\n\tf.write(\"bilinear_con_coeffs = zeros(Float64,\" + str(numQuadraticConstraints) + \",\" + str(numQuadNonZero) + \") \\n\")\n\tf.write(\"bilinear_con_coeff_indices = zeros(Int64,\" + str(numQuadraticConstraints) + \",\" + str(numQuadNonZero) + \") \\n\")\n\tf.write(\"quadratic_obj_coeffs = zeros(Float64,\" + str(numQuadraticTerms) + \") \\n\")\n\tf.write(\"quadratic_con_coeffs = zeros(Float64,\" + str(numQuadraticConstraints) + \",\" + str(numQuadNonZero2) + \") \\n\")\n\tf.write(\"quadratic_con_coeff_indices = zeros(Int64,\" + str(numQuadraticConstraints) + \",\" + str(numQuadNonZero2) + \") \\n\")\n\tf.write(\"linear_obj_coeffs = zeros(Float64,\" + str(numVariables) + \") \\n\")\n\tf.write(\"linear_con_coeffs_1 = zeros(Float64,\" + str(numQuadraticConstraints) + \",\" + str(numLinNonZero) + \") \\n\")\n\tf.write(\"linear_con_coeff_indices_1 = zeros(Int64,\" + str(numQuadraticConstraints) + \",\" + str(numLinNonZero) + \") \\n\")\n\tf.write(\"linear_con_coeffs_2 = zeros(Float64,\" + str(numLinearConstraints) + \",\" + str(numVariables) + \") \\n\")\n\tf.write(\"linear_con_coeff_indices_2 = zeros(Int64,\" + str(numLinearConstraints) + \",\" + str(numVariables) + \") \\n\\n\")\n\n\tf.write(\"# ----- Variables ----- #\\n\")\n\tf.write(\"@variable(m, 0 <= x[1:\" + str(numVariables) + \"] <= 1)\\n\")\n\tf.write(\"@variable(m, 0 <= w[1:\" + str(numBilinearTerms) + \"] <= 1)\\n\")\n\tf.write(\"@variable(m, 0 <= v[1:\" + str(numQuadraticTerms) + \"] <= 1)\\n\\n\")\n\n\tf.write(\"# ----- Bilinear Equations ----- #\\n\")\n\tf.write(\"@NLconstraint(m, [i=1:\" + str(numBilinearTerms) + \"], w[i] == x[bilinear_terms[i][1]]*x[bilinear_terms[i][2]])\\n\\n\\n\")\n\n\tf.write(\"# ----- Quadratic Equations ----- #\\n\")\n\tf.write(\"@NLconstraint(m, [i=1:\" + str(numQuadraticTerms) + \"], v[i] == (x[quadratic_terms[i]])^2)\\n\\n\\n\")\n\n\tjson_dict[\"x_lower\"] = [0 for i in range(numVariables)]\n\tjson_dict[\"x_upper\"] = [1 for i in range(numVariables)]\n\n\n# OBJECTIVE\n\t# tmp variables for storing generated data\n\tQ = [0.]*numBilinearTerms\n\tR = [0.]*numQuadraticTerms\n\tq = [0.]*numVariables\n\n\tcount_quad_con = 0\n\tcount_lin_con = 0\n\tfor i in range(numVariables):\n\t\tq[i] = q_linear[0][i]\n\t\tfor k in range(numPertFactors):\n\t\t\tq[i] += q_linear_obj_factors[k,i]*theta[k,0]\n\tfor i in range(numBilinearTerms):\n\t\tQ[i] = q_bilinear[0][i]\n\t\tfor k in range(numPertFactors):\n\t\t\tQ[i] += q_bilinear_obj_factors[k,i]*theta[k,0]\n\tfor i in range(numQuadraticTerms):\n\t\tR[i] = q_quadratic[0][i]\n\t\tfor k in range(numPertFactors):\n\t\t\tR[i] += q_quadratic_obj_factors[k,i]*theta[k,0]\n\n\tjson_dict[\"obj_bilinear_coeffs\"] = Q\n\tjson_dict[\"obj_quadratic_coeffs\"] = R\n\tjson_dict[\"obj_linear_coeffs\"] = q\n\n\tf.write(\"# ----- Objective ----- #\\n\")\n\tf.write(\"bilinear_obj_coeffs = \" + str(Q) + \"\\n\")\n\tf.write(\"quadratic_obj_coeffs = \" + str(R) + \"\\n\")\n\tf.write(\"linear_obj_coeffs = \" + str(q) + \"\\n\")\n\n\tf.write(\"\\n\")\n\tf.write(\"@objective(m, Min, sum(bilinear_obj_coeffs[i]*w[i] for i = 1:\" + str(numBilinearTerms) + \") + sum(quadratic_obj_coeffs[i]*v[i] for i = 1:\" + str(numQuadraticTerms) + \") + sum(linear_obj_coeffs[i]*x[i] for i = 1:\" + str(numVariables) + \")) \\n\\n\\n\")\n\n\n\tbilinear_obj_matrix = np.zeros((numVariables, numVariables))\n\tfor i in range(numBilinearTerms):\n\t\tbilinear_obj_matrix[bilinear_terms[i][0]][bilinear_terms[i][1]] = Q[i]/2.0\n\t\tbilinear_obj_matrix[bilinear_terms[i][1]][bilinear_terms[i][0]] = Q[i]/2.0\n\tfor i in range(numQuadraticTerms):\n\t\tbilinear_obj_matrix[quadratic_terms[i]][quadratic_terms[i]] = R[i]\n\n\tjson_dict[\"obj_bilinear_eigvals\"] = np.linalg.eigvals(bilinear_obj_matrix).tolist()\n\n\n# QUADRATIC CONSTRAINTS\n\tf.write(\"# ----- Constraints ----- #\\n\")\n\n\tjson_dict[\"quadratic_con_rhs\"] = [1.0 for i in range(numQuadraticConstraints)]\n\n\tbilinear_con_coeffs = []\n\tbilinear_con_coeff_indices = []\n\tquadratic_con_coeffs = []\n\tquadratic_con_coeff_indices = []\n\tlinear_con_coeffs = []\n\tlinear_con_coeff_indices = []\n\tcon_bilinear_eigvals = np.empty([numQuadraticConstraints, numVariables], dtype=float)\n\n\tfor k in range(numQuadraticConstraints):\n\t\tQ = [0.]*numQuadNonZero\n\t\tQ_ind = [i+1 for i in q_bilinear_ind[count_quad_con+1]]\n\t\tR = [0.]*numQuadNonZero2\n\t\tR_ind = [i+1 for i in q_quadratic_ind[count_quad_con+1]]\n\t\tq = [0.]*numLinNonZero\n\t\tq_ind = [i+1 for i in q_linear_ind[count_lin_con+1]]\n\n\t\tcount_quad_con += 1\n\t\tcount_lin_con += 1\n\t\tfor i in range(numLinNonZero):\n\t\t\tq[i] = q_linear[count_lin_con][i]\n\t\t\tif k < numQuadConPert:\n\t\t\t\tfor j in range(numPertFactors):\n\t\t\t\t\tq[i] += q_linear_con_factors[j,count_lin_con-1,i]*theta[j,count_lin_con]\n\t\tfor i in range(numQuadNonZero):\n\t\t\tQ[i] = q_bilinear[count_quad_con][i]\n\t\t\tif k < numQuadConPert:\n\t\t\t\tfor j in range(numPertFactors):\n\t\t\t\t\tQ[i] += q_bilinear_con_factors[j,count_quad_con-1,i]*theta[j,count_quad_con]\n\t\tfor i in range(numQuadNonZero2):\n\t\t\tR[i] = q_quadratic[count_quad_con][i]\n\t\t\tif k < numQuadConPert:\n\t\t\t\tfor j in range(numPertFactors):\n\t\t\t\t\tR[i] += q_quadratic_con_factors[j,count_quad_con-1,i]*theta[j,count_quad_con]\n\n\t\tbilinear_con_coeffs.append(Q)\n\t\tbilinear_con_coeff_indices.append([float(i) for i in q_bilinear_ind[count_quad_con]])\n\t\tquadratic_con_coeffs.append(R)\n\t\tquadratic_con_coeff_indices.append([float(i) for i in q_quadratic_ind[count_quad_con]])\n\t\tlinear_con_coeffs.append(q)\n\t\tlinear_con_coeff_indices.append([float(i) for i in q_linear_ind[count_lin_con]])\n\n\t\tf.write(\"bilinear_con_coeffs[\" + str(count_quad_con) + \",:] = \" + str(Q) + \"\\n\")\n\t\tf.write(\"bilinear_con_coeff_indices[\" + str(count_quad_con) + \",:] = \" + str(Q_ind) + \"\\n\")\n\t\tf.write(\"quadratic_con_coeffs[\" + str(count_quad_con) + \",:] = \" + str(R) + \"\\n\")\n\t\tf.write(\"quadratic_con_coeff_indices[\" + str(count_quad_con) + \",:] = \" + str(R_ind) + \"\\n\")\n\t\tf.write(\"linear_con_coeffs_1[\" + str(count_lin_con) + \",:] = \" + str(q) + \"\\n\")\n\t\tf.write(\"linear_con_coeff_indices_1[\" + str(count_lin_con) + \",:] = \" + str(q_ind) + \"\\n\")\n\t\tf.write(\"\\n\")\n\n\t\tf.write(\"@constraint(m, sum(bilinear_con_coeffs[\" + str(count_quad_con) + \",i]*w[bilinear_con_coeff_indices[\" + str(count_quad_con) + \",i]] for i = 1:\" + str(numQuadNonZero) + \") + sum(quadratic_con_coeffs[\" + str(count_quad_con) + \",i]*v[quadratic_con_coeff_indices[\" + str(count_quad_con) + \",i]] for i = 1:\" + str(numQuadNonZero2) + \") + sum(linear_con_coeffs_1[\" + str(count_lin_con) + \",i]*x[linear_con_coeff_indices_1[\" + str(count_lin_con) + \",i]] for i = 1:\" + str(numLinNonZero) + \") <= 1) \\n\\n\\n\")\n\n\n\t\tbilinear_con_matrix = np.zeros((numVariables, numVariables))\n\t\tfor i in range(numQuadNonZero):\n\t\t\tind = q_bilinear_ind[count_quad_con][i]\n\t\t\tind1 = bilinear_terms[ind][0]\n\t\t\tind2 = bilinear_terms[ind][1]\n\t\t\tbilinear_con_matrix[ind1][ind2] = Q[i]/2.0\n\t\t\tbilinear_con_matrix[ind2][ind1] = Q[i]/2.0\n\t\tfor i in range(numQuadNonZero2):\n\t\t\tbilinear_con_matrix[quadratic_terms[i]][quadratic_terms[i]] = R[i]\n\n\t\tcon_bilinear_eigvals[k] = np.linalg.eigvals(bilinear_con_matrix)\n\n\t\n\tjson_dict[\"con_bilinear_eigvals\"] = con_bilinear_eigvals.tolist()\n\n\n# LINEAR CONSTRAINTS\n\tjson_dict[\"linear_con_rhs\"] = [1.0 for i in range(numLinearConstraints)]\n\n\tfor k in range(numLinearConstraints):\n\t\tq = [0.]*numVariables\n\t\tq_ind = [i+1 for i in q_linear_ind[count_lin_con+1]]\n\n\t\tcount_lin_con += 1\n\t\tfor i in range(numVariables):\n\t\t\tq[i] = q_linear[count_lin_con][i]\n\n\t\tlinear_con_coeffs.append(q)\n\t\tlinear_con_coeff_indices.append([float(i) for i in q_linear_ind[count_lin_con]])\n\n\t\tf.write(\"linear_con_coeffs_2[\" + str(count_lin_con - numQuadraticConstraints) + \",:] = \" + str(q) + \"\\n\")\n\t\tf.write(\"linear_con_coeff_indices_2[\" + str(count_lin_con - numQuadraticConstraints) + \",:] = \" + str(q_ind) + \"\\n\")\n\t\tf.write(\"\\n\")\n\n\t\tf.write(\"@constraint(m, sum(linear_con_coeffs_2[\" + str(count_lin_con - numQuadraticConstraints) + \",i]*x[linear_con_coeff_indices_2[\" + str(count_lin_con - numQuadraticConstraints) + \",i]] for i = 1:\" + str(numVariables) + \") == 1) \\n\\n\\n\")\n\t\t\n\tf.close()\n\n\n\tjson_dict[\"con_bilinear_coeffs\"] = bilinear_con_coeffs\n\tjson_dict[\"con_bilinear_coeff_indices\"] = bilinear_con_coeff_indices\n\tjson_dict[\"con_quadratic_coeffs\"] = quadratic_con_coeffs\n\tjson_dict[\"con_quadratic_coeff_indices\"] = quadratic_con_coeff_indices\n\tjson_dict[\"con_linear_coeffs\"] = linear_con_coeffs\n\tjson_dict[\"con_linear_coeff_indices\"] = linear_con_coeff_indices\n\n\twith open(json_file, 'w', encoding='utf-8') as outF:\n\t\tjson.dump(json_dict, outF, ensure_ascii=False, indent=4)\n"
  },
  {
    "path": "examples/run_examples.jl",
    "content": "# - Necessary - #\nusing Alpine\nusing JuMP\nusing Gurobi\nusing Ipopt\nusing Juniper\n\n# - Additional - #\n# using CPLEX\n# using HiGHS\n# using Pavito\n\ninclude(\"JuMP_models.jl\")\ninclude(\"optimizers.jl\")\n\n# Choose underlying solvers for Alpine\nnlp_solver = get_ipopt() # local continuous solver\nmip_solver = get_gurobi() # convex mip solver\nminlp_solver = get_juniper(mip_solver, nlp_solver) # local mixed-intger solver\n\n#= Global solver\n Hints: \n => Try different integer values (>=4) for `partition_scaling_factor` to potentially observe \n    better Alpine run times (can be instance specific).\n => Choose `presolve_bt` to `false` if you prefer the bound tightening (OBBT) presolve to be turned off. \n => If you prefer to use Alpine for only OBBT presolve, without any paritioning applied to the \n    nonlinear terms, include option \"apply_partitioning\" below and set it to false. \n=#\n\nconst alpine = JuMP.optimizer_with_attributes(\n    Alpine.Optimizer,\n    # \"minlp_solver\" => minlp_solver,\n    \"nlp_solver\" => nlp_solver,\n    \"mip_solver\" => mip_solver,\n    \"presolve_bt\" => true,\n    \"apply_partitioning\" => true,\n    \"partition_scaling_factor\" => 10,\n)\n\nm = nlp3(solver = alpine)\n\nJuMP.optimize!(m)\n# Alpine.variable_values(m)\n"
  },
  {
    "path": "src/Alpine.jl",
    "content": "module Alpine\n\nusing JuMP\n\nimport Combinatorics\nimport Statistics\n\nconst ALPINE_DEBUG = false\n\ninclude(\"const.jl\")\n\n# Engine for high-level algorithmic control and user-interface\n\ninclude(\"solver_options.jl\")\ninclude(\"MOI_wrapper/MOI_wrapper.jl\")\ninclude(\"MOI_wrapper/MOI_function2expr.jl\")\n\n# Engine for expression handling\ninclude(\"nlexpr.jl\")\ninclude(\"operators.jl\")\n\n# Main algorithm\ninclude(\"main_algorithm.jl\")\ninclude(\"presolve.jl\")\ninclude(\"bounding_model.jl\")\ninclude(\"embedding.jl\")\ninclude(\"heuristics.jl\")\n\n# Convexification\ninclude(\"relaxations.jl\")\ninclude(\"multilinear.jl\")\n\n# Model manipulation and utilities\ninclude(\"variable_bounds.jl\")\ninclude(\"utility.jl\")\n\n# Logging\ninclude(\"log.jl\")\n\nend # module\n"
  },
  {
    "path": "src/MOI_wrapper/MOI_function2expr.jl",
    "content": "function _constraint_expr(expr, set::MOI.Interval)\n    return Expr(:comparison, set.lower, :(<=), expr, :(<=), set.upper)\nend\n\n_sense(::MOI.EqualTo) = :(==)\n_sense(::MOI.LessThan) = :(<=)\n_sense(::MOI.GreaterThan) = :(>=)\nfunction _constraint_expr(expr, set)\n    return Expr(:call, _sense(set), expr, MOI.constant(set))\nend\n\n_moi_function_to_expr(f::Number) = f\n\n_moi_function_to_expr(v::MOI.VariableIndex) = Expr(:ref, :x, v.value)\n\nfunction _moi_function_to_expr(t::MOI.ScalarAffineTerm)\n    return Expr(:call, :*, t.coefficient, _moi_function_to_expr(t.variable))\nend\n\nfunction _moi_function_to_expr(t::MOI.ScalarQuadraticTerm)\n    coef = t.coefficient\n    if t.variable_1 == t.variable_2\n        coef /= 2\n    end\n    return Expr(\n        :call,\n        :*,\n        coef,\n        _moi_function_to_expr(t.variable_1),\n        _moi_function_to_expr(t.variable_2),\n    )\nend\n\nfunction _add_constant(expr::Expr, constant)\n    if !iszero(constant)\n        push!(expr.args, constant)\n    end\n    return\nend\n\nfunction _add_terms(expr::Expr, terms::Vector)\n    for term in terms\n        push!(expr.args, _moi_function_to_expr(term))\n    end\n    return\nend\n\nfunction _moi_function_to_expr(f::MOI.ScalarAffineFunction)\n    if iszero(f)\n        return 0 # Similar to `JuMP.affToExpr` in JuMP v0.18 and earlier\n    end\n    expr = Expr(:call, :+)\n    _add_terms(expr, f.terms)\n    _add_constant(expr, f.constant)\n    return expr\nend\n\nfunction _moi_function_to_expr(f::MOI.ScalarQuadraticFunction)\n    if iszero(f)\n        return 0 # Similar to `JuMP.quadToExpr` in JuMP v0.18 and earlier\n    end\n    expr = Expr(:call, :+)\n    _add_terms(expr, f.quadratic_terms)\n    _add_terms(expr, f.affine_terms)\n    _add_constant(expr, f.constant)\n    return expr\nend\n\nfunction _moi_function_to_expr(f::MOI.ScalarNonlinearFunction)\n    return Expr(:call, f.head, _moi_function_to_expr.(f.args)...)\nend\n"
  },
  {
    "path": "src/MOI_wrapper/MOI_wrapper.jl",
    "content": "\"\"\"\n MOI_wrapper.jl defines the Alpine.Optimizer struct\n with all mandatory MOI functions overloaded\n\"\"\"\n\n\"\"\"\n Alpine.Optimizer struct\n\"\"\"\nmutable struct Optimizer <: MOI.AbstractOptimizer\n    options::OptimizerOptions                                # Options set by user\n\n    # Sub-solver identifier for customized solver option\n    nlp_solver_id::String                                     # NLP Solver identifier string\n    minlp_solver_id::String                                   # MINLP local solver identifier string\n    mip_solver_id::String                                     # MIP solver identifier string\n\n    # User inputs\n    num_var_orig::Int                                        # Initial number of variables\n    num_cont_var_orig::Int                                   # Initial number of continuous variables\n    num_int_var_orig::Int                                    # Initial number of binary/integer variables\n    num_constr_orig::Int                                     # Initial number of constraints\n    num_lconstr_orig::Int                                    # Initial number of linear constraints\n    num_nlconstr_orig::Int                                   # Initial number of non-linear constraints\n    var_type_orig::Vector{Symbol}                            # Variable type vector on original variables (only :Bin, :Cont, :Int)\n    var_start_orig::Vector{Float64}                          # Variable warm start vector on original variables\n    constr_type_orig::Vector{Symbol}                         # Constraint type vector on original variables (only :(==), :(>=), :(<=))\n    scalar_constraints::Vector{Any}                        # Constraint `func`-in-`set` values\n    constr_expr_orig::Vector{Expr}                           # Constraint expressions\n    obj_expr_orig::Union{Expr,Number}                        # Objective expression\n\n    # Additional user inputs concerning local solves\n    l_var_orig::Vector{Float64}                              # Variable lower bounds\n    u_var_orig::Vector{Float64}                              # Variable upper bounds\n    constraint_bounds_orig::Vector{MOI.NLPBoundsPair}        # Constraint lower bounds\n    nl_constraint_bounds_orig::Vector{MOI.NLPBoundsPair}     # Constraint lower bounds\n    sense_orig::MOI.OptimizationSense                        # Problem type (:Min, :Max)\n    d_orig::Union{Nothing,MOI.AbstractNLPEvaluator}          # Instance of AbstractNLPEvaluator for evaluating gradient, Hessian-vector products, and Hessians of the Lagrangian\n    disable_hessian::Bool                                    # Check if there are any user-defined operators, and disable hessians if necessary.\n    has_nl_objective::Bool\n    objective_function::Union{\n        Nothing,\n        MOI.ScalarAffineFunction{Float64},\n        MOI.ScalarQuadraticFunction{Float64},\n        MOI.ScalarNonlinearFunction,\n    }\n\n    # Additional initial data\n    is_obj_linear_orig::Bool                             # Boolean parameter for type of objective\n\n    # Local solution model (extra data for each iteration)\n    l_var::Vector{Float64}                               # Updated variable lower bounds for local solve\n    u_var::Vector{Float64}                               # Updated variable upper bounds for local solve\n\n    # MIP bounding model\n    model_mip::JuMP.Model                                # JuMP's convex-MIP model for bounding\n\n    num_var_linear_mip::Int                              # Number of linear lifted variables required\n    num_var_nonlinear_mip::Int                           # Number of lifted variables\n    num_var_disc_mip::Int                                # Number of variables which are discretized\n    num_constr_convex::Int                               # Number of convex constraints\n\n    # Expression-related and structural property placeholder\n    linear_terms::Dict{Any,Any}                          # Dictionary containing details of lifted linear terms\n    nonconvex_terms::Dict{Any,Any}                       # Dictionary containing details of lifted non-linear terms\n    term_seq::Dict{Int,Any}                              # Vector-Dictionary for NL terms detection\n    nonlinear_constrs::Dict{Any,Any}                     # Dictionary containing details of special constraints\n    obj_structure::Symbol                                # A symbolic indicator of the expression type of objective function\n    constr_structure::Vector{Symbol}                     # A vector indicating whether a constraint is with the special structure\n    bounding_obj_expr_mip::Union{Expr,Number}            # Lifted objective expression; if linear, same as obj_expr_orig\n    bounding_constr_expr_mip::Vector{Expr}               # Lifted constraints; if linear, same as corresponding constr_expr_orig\n    bounding_obj_mip::Dict{Any,Any}                      # Lifted objective expression in affine form\n    bounding_constr_mip::Vector{Dict{Any,Any}}           # Lifted constraint expressions in affine form\n\n    # Discretization Related options\n    candidate_disc_vars::Vector{Int}                  # A vector of all original variable indices that is involved in the nonlinear terms\n    discretization::Dict{Any,Any}                     # Discretization points with variable keys\n    disc_vars::Vector{Int}                            # Variables chosen for discretization\n    int_vars::Vector{Int}                             # Index vector of integer variables\n    bin_vars::Vector{Int}                             # Index vector of binary variables\n\n    # Reformulated problem options\n    l_var_tight::Vector{Float64}                        # Post-presolve variable upper bounds\n    u_var_tight::Vector{Float64}                        # Post-presolve variable lower bounds\n    var_type::Vector{Symbol}                            # Updated variable type for local solve\n\n    # Solution information\n    presolve_infeasible::Bool                            # Presolve infeasibility detection flag\n    best_bound::Float64                                  # Best bound from MIP\n    best_obj::Float64                                    # Best feasible objective value\n    warm_start_value::Vector{Float64}                    # Warmstart values set to Alpine\n    best_sol::Vector{Float64}                            # Best feasible solution\n    best_bound_sol::Vector{Float64}                      # Best bound solution (arg-min)\n    presolve_best_rel_gap::Float64                       # Post-OBBT relative optimality gap = |best_obj - best_bound|/|best_obj|*100\n    best_rel_gap::Float64                                # Relative optimality gap = |best_obj - best_bound|/|best_obj|*100\n    best_abs_gap::Float64                                # Absolute gap = |best_obj - best_bound|\n    bound_sol_history::Vector{Vector{Float64}}           # History of bounding solutions limited by \"parameter disc_consecutive_forbid\"\n    bound_sol_pool::Dict{Any,Any}                        # A pool of solutions from solving model_mip\n\n    # Linking constraints info for Multilinear terms\n    linking_constraints_info::Union{Nothing,Dict{Any,Any}}     # Stored multilinear linking constraints info\n\n    # Logging information and status\n    logs::Dict{Symbol,Any}                          # Logging information\n    detected_incumbent::Bool\n    detected_bound::Bool\n    status::Dict{Symbol,MOI.TerminationStatusCode}   # Detailed status of every iteration in the algorithm\n    alpine_status::MOI.TerminationStatusCode         # Current Alpine's status\n\n    # Constructor for Alpine.Optimizer\n    function Optimizer()\n        m = new()\n        m.options = get_default_options()\n        MOI.empty!(m)\n        return m\n    end\nend\n\nstruct NumberOfIterations <: MOI.AbstractModelAttribute end\nMOI.is_set_by_optimize(::NumberOfIterations) = true\nMOI.get(m::Optimizer, ::NumberOfIterations) = m.logs[:n_iter]\n\nstruct NumberOfPresolveIterations <: MOI.AbstractModelAttribute end\nMOI.is_set_by_optimize(::NumberOfPresolveIterations) = true\nMOI.get(m::Optimizer, ::NumberOfPresolveIterations) = m.logs[:bt_iter]\n\nstruct TightenedLowerBound <: MOI.AbstractVariableAttribute end\nMOI.is_set_by_optimize(::TightenedLowerBound) = true\nfunction MOI.get(m::Optimizer, ::TightenedLowerBound, vi::MOI.VariableIndex)\n    return m.l_var_tight[vi.value]\nend\n\nstruct TightenedUpperBound <: MOI.AbstractVariableAttribute end\nMOI.is_set_by_optimize(::TightenedUpperBound) = true\nfunction MOI.get(m::Optimizer, ::TightenedUpperBound, vi::MOI.VariableIndex)\n    return m.u_var_tight[vi.value]\nend\n\nfunction MOI.get(m::Optimizer, ::MOI.RawStatusString)\n    return \"Alpine ended with status $(m.alpine_status)\"\nend\n\nMOI.get(m::Optimizer, ::MOI.TerminationStatus) = m.alpine_status\n\nfunction MOI.get(m::Optimizer, attr::MOI.PrimalStatus)\n    if attr.result_index != 1\n        return MOI.NO_SOLUTION\n    end\n\n    status = m.alpine_status\n    if status == MOI.OPTIMAL\n        return MOI.FEASIBLE_POINT\n    elseif status == MOI.NEARLY_FEASIBLE_POINT\n        return MOI.NEARLY_FEASIBLE_POINT\n    elseif status == MOI.INFEASIBLE_POINT\n        return MOI.INFEASIBLE_POINT\n    elseif status == MOI.LOCALLY_SOLVED\n        return MOI.FEASIBLE_POINT\n    end\n\n    return MOI.NO_SOLUTION\nend\n\nMOI.get(::Optimizer, ::MOI.DualStatus) = MOI.NO_SOLUTION\n\nMOI.get(m::Optimizer, ::MOI.ObjectiveValue) = m.best_obj\nMOI.get(m::Optimizer, ::MOI.ObjectiveBound) = m.best_bound\nMOI.get(m::Optimizer, ::MOI.SolveTimeSec) = m.logs[:total_time]\n\nfunction get_option(m::Optimizer, s::Symbol)\n    return getproperty(m.options, s)\nend\n\nfunction set_option(m::Optimizer, s::Symbol, val)\n    return setproperty!(m.options, s, val)\nend\n\nfunction MOI.is_empty(model::Optimizer)\n    return iszero(model.num_var_orig)\nend\n\nfunction MOI.empty!(m::Optimizer)\n    m.nlp_solver_id = \"\"\n    m.minlp_solver_id = \"\"\n    m.mip_solver_id = \"\"\n\n    m.num_var_orig = 0\n    m.num_cont_var_orig = 0\n    m.num_int_var_orig = 0\n    m.num_constr_orig = 0\n    m.num_lconstr_orig = 0\n    m.num_nlconstr_orig = 0\n    m.var_type_orig = Symbol[]\n    m.var_start_orig = Float64[]\n    m.constr_type_orig = Symbol[]\n    m.scalar_constraints = Any[]\n    m.constr_expr_orig = Expr[]\n    # m.num_lconstr_updated = 0\n    # m.num_nlconstr_updated = 0\n    # m.indices_lconstr_updated = Int[]\n\n    m.l_var_orig = Float64[]\n    m.u_var_orig = Float64[]\n    m.constraint_bounds_orig = MOI.NLPBoundsPair[]\n    m.nl_constraint_bounds_orig = MOI.NLPBoundsPair[]\n    m.sense_orig = MOI.FEASIBILITY_SENSE\n\n    m.d_orig = nothing\n    m.has_nl_objective = false\n    m.objective_function = nothing\n\n    m.linear_terms = Dict()\n    m.nonconvex_terms = Dict()\n    m.term_seq = Dict()\n    m.nonlinear_constrs = Dict()\n    m.candidate_disc_vars = Int[]\n    m.bounding_constr_expr_mip = []\n    m.bounding_constr_mip = []\n    m.disc_vars = []\n    m.int_vars = []\n    m.bin_vars = []\n    m.discretization = Dict()\n    m.num_var_linear_mip = 0\n    m.num_var_nonlinear_mip = 0\n    m.num_var_disc_mip = 0\n    m.num_constr_convex = 0\n    m.constr_structure = Symbol[]\n    m.best_bound_sol = []\n    m.bound_sol_history = []\n    m.presolve_infeasible = false\n    m.bound_sol_history =\n        Vector{Vector{Float64}}(undef, m.options.disc_consecutive_forbid)\n\n    m.best_obj = Inf\n    m.warm_start_value = Float64[]\n    m.best_sol = Float64[]\n    m.best_bound = -Inf\n    m.presolve_best_rel_gap = Inf\n    m.best_rel_gap = Inf\n    m.best_abs_gap = Inf\n    m.alpine_status = MOI.OPTIMIZE_NOT_CALLED\n\n    m.linking_constraints_info = nothing\n\n    create_status!(m)\n    return create_logs!(m)\nend\n\nMOI.supports_incremental_interface(::Optimizer) = true\n\nfunction MOI.copy_to(model::Optimizer, src::MOI.ModelLike)\n    return MOIU.default_copy_to(model, src)\nend\n\nMOI.get(::Optimizer, ::MOI.SolverName) = \"Alpine\"\nMOI.get(::Optimizer, ::MOI.SolverVersion) = _ALPINE_VERSION\n\nfunction MOI.set(model::Optimizer, param::MOI.RawOptimizerAttribute, value)\n    return set_option(model, Symbol(param.name), value)\nend\nfunction MOI.get(model::Optimizer, param::MOI.RawOptimizerAttribute)\n    return get_option(model, Symbol(param.name))\nend\n\nfunction MOI.add_variables(model::Optimizer, n::Int)\n    return [MOI.add_variable(model) for i in 1:n]\nend\nfunction MOI.add_variable(model::Optimizer)\n    model.num_var_orig += 1\n    push!(model.l_var_orig, -Inf)\n    push!(model.u_var_orig, Inf)\n    push!(model.var_type_orig, :Cont)\n    push!(model.warm_start_value, 0.0)\n    push!(model.best_sol, 0.0)\n    return MOI.VariableIndex(model.num_var_orig)\nend\n\nfunction MOI.supports(::Optimizer, ::MOI.VariablePrimalStart, ::Type{MOI.VariableIndex})\n    return true\nend\nfunction MOI.set(\n    model::Optimizer,\n    ::MOI.VariablePrimalStart,\n    vi::MOI.VariableIndex,\n    value::Union{Real,Nothing},\n)\n    model.best_sol[vi.value] = model.warm_start_value[vi.value] = something(value, 0.0)\n    return\nend\n\nconst SCALAR_SET = Union{\n    MOI.EqualTo{Float64},\n    MOI.LessThan{Float64},\n    MOI.GreaterThan{Float64},\n    MOI.Interval{Float64},\n}\n\nfunction MOI.supports_constraint(\n    ::Optimizer,\n    ::Type{MOI.VariableIndex},\n    ::Type{<:SCALAR_SET},\n)\n    return true\nend\n\n_lower(set::MOI.EqualTo) = set.value\n_upper(set::MOI.EqualTo) = set.value\n_lower(set::MOI.LessThan) = nothing\n_upper(set::MOI.LessThan) = set.upper\n_lower(set::MOI.GreaterThan) = set.lower\n_upper(set::MOI.GreaterThan) = nothing\n_lower(set::MOI.Interval) = set.lower\n_upper(set::MOI.Interval) = set.upper\n\nfunction MOI.add_constraint(model::Optimizer, vi::MOI.VariableIndex, set::SCALAR_SET)\n    l = _lower(set)\n    if l !== nothing\n        model.l_var_orig[vi.value] = l\n    end\n    u = _upper(set)\n    if u !== nothing\n        model.u_var_orig[vi.value] = u\n    end\n    return MOI.ConstraintIndex{typeof(vi),typeof(set)}(vi.value)\nend\n\nfunction MOI.supports_constraint(\n    ::Optimizer,\n    ::Type{MOI.VariableIndex},\n    ::Type{MOI.ZeroOne},\n)\n    return true\nend\n\nfunction MOI.add_constraint(model::Optimizer, f::MOI.VariableIndex, set::MOI.ZeroOne)\n    model.var_type_orig[f.value] = :Bin\n    return MOI.ConstraintIndex{typeof(f),typeof(set)}(f.value)\nend\n\nfunction MOI.supports_constraint(\n    model::Optimizer,\n    ::Type{\n        <:Union{MOI.ScalarAffineFunction{Float64},MOI.ScalarQuadraticFunction{Float64}},\n    },\n    ::Type{<:SCALAR_SET},\n)\n    return true\nend\n\nfunction MOI.add_constraint(\n    model::Optimizer,\n    f::Union{MOI.ScalarAffineFunction{Float64},MOI.ScalarQuadraticFunction{Float64}},\n    set::SCALAR_SET,\n)\n    model.num_constr_orig += 1\n    push!(\n        model.constraint_bounds_orig,\n        MOI.NLPBoundsPair(something(_lower(set), -Inf), something(_upper(set), Inf)),\n    )\n    iszero(f.constant) || throw(\n        MOI.ScalarFunctionConstantNotZero{Float64,typeof(f),typeof(set)}(f.constant),\n    )\n    push!(model.scalar_constraints, (copy(f), copy(set)))\n    push!(model.constr_expr_orig, _constraint_expr(_moi_function_to_expr(f), set))\n    if f isa MOI.ScalarAffineFunction\n        model.num_lconstr_orig += 1\n        push!(model.constr_structure, :generic_linear)\n    else\n        model.num_nlconstr_orig += 1\n        push!(model.constr_structure, :generic_nonlinear)\n    end\n\n    return MOI.ConstraintIndex{typeof(f),typeof(set)}(model.num_constr_orig)\nend\n\nfunction MOI.supports_constraint(\n    ::Optimizer,\n    ::Type{<:MOI.ScalarNonlinearFunction},\n    ::Type{<:SCALAR_SET},\n)\n    return true\nend\n\nfunction MOI.add_constraint(\n    model::Optimizer,\n    f::MOI.ScalarNonlinearFunction,\n    set::SCALAR_SET,\n)\n    model.num_constr_orig += 1\n    push!(\n        model.constraint_bounds_orig,\n        MOI.NLPBoundsPair(something(_lower(set), -Inf), something(_upper(set), Inf)),\n    )\n    push!(model.scalar_constraints, (copy(f), copy(set)))\n    push!(model.constr_expr_orig, _constraint_expr(_moi_function_to_expr(f), set))\n    model.num_nlconstr_orig += 1\n    push!(model.constr_structure, :generic_nonlinear)\n    return MOI.ConstraintIndex{typeof(f),typeof(set)}(model.num_constr_orig)\nend\n\nfunction MOI.supports(\n    model::Optimizer,\n    ::Union{MOI.ObjectiveSense,MOI.ObjectiveFunction{F}},\n) where {\n    F<:Union{\n        MOI.ScalarAffineFunction{Float64},\n        MOI.ScalarQuadraticFunction{Float64},\n        MOI.ScalarNonlinearFunction,\n    },\n}\n    return true\nend\n\nis_min_sense(model::Optimizer) = model.sense_orig == MOI.MIN_SENSE\nis_max_sense(model::Optimizer) = model.sense_orig == MOI.MAX_SENSE\n\nfunction MOI.set(model::Optimizer, ::MOI.ObjectiveSense, sense)\n    model.sense_orig = sense\n    if is_max_sense(model)\n        model.best_obj = -Inf\n        model.best_bound = Inf\n    elseif is_min_sense(model)\n        model.best_obj = Inf\n        model.best_bound = -Inf\n    else\n        error(\"Feasibility sense is not supported by Alpine.\")\n    end\nend\n\nfunction MOI.set(model::Optimizer, ::MOI.ObjectiveFunction{F}, func::F) where {F}\n    model.objective_function = func\n    return\nend\n\nfunction MOI.set(m::Optimizer, ::MOI.NLPBlock, block)\n    m.d_orig = block.evaluator\n    m.disable_hessian = !(\n        (:Hess in MOI.features_available(block.evaluator)) &&\n        (:HessVec in MOI.features_available(block.evaluator))\n    )\n    m.has_nl_objective = block.has_objective\n\n    # We cache it to add it in `load!` as we cannot call `MOI.constraint_expr` yet\n    # so we will add the nonlinear `constr_expr_orig` at the end so we need\n    # to add the bounds at the end too.\n    # So we can consider that the nonlinear constraints are the\n    # `length(m.nl_constraint_bounds_orig)` last ones.\n    m.nl_constraint_bounds_orig = block.constraint_bounds\n    return\nend\n\n# In JuMP v0.18/MathProgBase, the 5th decision variable would be `:(x[5])`.\n# In JuMP v0.19/MathOptInterface, it is now `:(x[MOI.VariableIndex(5)])`.\n# To ease the transition, we simply transform it back to what it used to be.\n_variable_index_to_index(expr::Union{Number,Symbol}) = expr\n_variable_index_to_index(expr::MOI.VariableIndex) = expr.value\nfunction _variable_index_to_index(expr::Expr)\n    for i in eachindex(expr.args)\n        expr.args[i] = _variable_index_to_index(expr.args[i])\n    end\n    return expr\nend\n\nfunction _index_to_variable_ref(m::JuMP.Model, idx::Int64)\n    return JuMP.VariableRef(m, MOI.VariableIndex(idx))\nend\n\nfunction MOI.get(model::Optimizer, attr::MOI.VariablePrimal, vi::MOI.VariableIndex)\n    MOI.check_result_index_bounds(model, attr)\n    MOI.throw_if_not_valid(model, vi)\n\n    return model.best_sol[vi.value]\nend\n\nfunction MOI.get(model::Optimizer, ::MOI.ResultCount)\n    return model.alpine_status == MOI.OPTIMIZE_NOT_CALLED ? 0 : 1\nend\n\nfunction MOI.is_valid(model::Alpine.Optimizer, vi::MOI.VariableIndex)\n    return 1 <= vi.value <= model.num_var_orig\nend\n\nfunction _get_bound_set(model::Alpine.Optimizer, vi::MOI.VariableIndex)\n    if !MOI.is_valid(model, vi)\n        throw(MOI.InvalidIndex(vi))\n    end\n    return _bound_set(model.l_var_orig[vi.value], model.u_var_orig[vi.value])\nend\n\nfunction MOI.is_valid(\n    model::Alpine.Optimizer,\n    ci::MOI.ConstraintIndex{MOI.VariableIndex,S},\n) where {S<:SCALAR_SET}\n    set = _get_bound_set(model, MOI.VariableIndex(ci.value))\n    return set isa S\nend\n\nfunction MOI.get(\n    model::Alpine.Optimizer,\n    ::MOI.ConstraintSet,\n    ci::MOI.ConstraintIndex{MOI.VariableIndex,S},\n) where {S<:SCALAR_SET}\n    if !MOI.is_valid(model, ci)\n        throw(MOI.InvalidIndex(ci))\n    end\n    return _get_bound_set(model, MOI.VariableIndex(ci.value))\nend\n\n# Taken from MatrixOptInterface.jl\n@enum ConstraintSense EQUAL_TO GREATER_THAN LESS_THAN INTERVAL\n_sense(::Type{<:MOI.EqualTo}) = EQUAL_TO\n_sense(::Type{<:MOI.LessThan}) = LESS_THAN\n_sense(::Type{<:MOI.GreaterThan}) = GREATER_THAN\n_sense(::Type{<:MOI.Interval}) = INTERVAL\n\n_no_upper(bound) = bound != typemax(bound)\n_no_lower(bound) = bound != typemin(bound)\n\nfunction _bound_set(lb::T, ub::T) where {T}\n    if _no_upper(ub)\n        if _no_lower(lb)\n            if ub == lb\n                return MOI.EqualTo(lb)\n            else\n                return MOI.Interval(lb, ub)\n            end\n        else\n            return MOI.LessThan(ub)\n        end\n    else\n        if _no_lower(lb)\n            return MOI.GreaterThan(lb)\n        else\n            return\n        end\n    end\nend\n\n#=\nfunction _bound_sense(lb::T, ub::T) where T\n    if _no_upper(ub)\n        if _no_lower(lb)\n            if lb == ub\n                return EQUAL_TO\n            else\n                return INTERVAL\n            end\n        else\n            return LESS_THAN\n        end\n    else\n        if _no_lower(lb)\n            return GREATER_THAN\n        else\n            return\n        end\n    end\nend\n=#\n"
  },
  {
    "path": "src/bounding_model.jl",
    "content": "\"\"\"\n    create_bounding_mip(m::Optimizer; use_disc = nothing)\n\nSet up a MILP bounding model base on variable domain partitioning information stored in `use_disc`.\nBy default, if `use_disc` is not provided, it will use `m.discretizations` store in the Alpine model.\nThe basic idea of this MILP bounding model is to use piecewise polyhedral/convex relaxations to tighten the\nbasic relaxations of the original non-convex region. Among all presented partitions, the bounding model\nwill choose one specific partition as the lower bound solution. The more partitions there are, the\nbetter or finer bounding model relax the original MINLP while the more efforts required to solve\nthis MILP is required.\n\"\"\"\nfunction create_bounding_mip(m::Optimizer; use_disc = nothing)\n    if (use_disc === nothing)\n        if (m.logs[:n_iter] == 1) &&\n           (m.status[:local_solve] in union(STATUS_OPT, STATUS_LIMIT, STATUS_WARM_START))\n            # Setting up an initial partition\n            add_partition(m, use_solution = m.best_sol)\n        elseif m.logs[:n_iter] >= 2\n            # Add subsequent iteration partitions\n            add_partition(m)\n        end\n        discretization = m.discretization\n    else\n        discretization = use_disc\n    end\n\n    m.model_mip = JuMP.Model(get_option(m, :mip_solver)) # Construct JuMP Model\n    start_build = time()\n    # ------- Model Construction ------ #\n    amp_post_vars(m)                                                # Post original and lifted variables\n    amp_post_lifted_constraints(m)                                  # Post original and lifted constraints\n    amp_post_lifted_objective(m)                                    # Post original and/or objective\n    amp_post_convexification(m, use_disc = discretization)          # Post convexification constraints\n    # --------------------------------- #\n    cputime_build = time() - start_build\n    m.logs[:total_time] += cputime_build\n    m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time])\n\n    return\nend\n\n\"\"\"\n    amp_post_convexification(m::Optimizer; use_disc = nothing)\n\nWrapper function to apply piecewise convexification of the problem for the bounding MIP model. This function talks to nonconvex_terms and convexification methods\nto finish the last step required during the construction of bounding model.\n\"\"\"\nfunction amp_post_convexification(m::Optimizer; use_disc = nothing)\n    use_disc === nothing ? discretization = m.discretization : discretization = use_disc\n\n    amp_post_convhull(m, use_disc = discretization)  # convex hull representation\n    _is_fully_convexified(m) # Ensure if all the non-linear terms are convexified\n\n    return\nend\n\nfunction amp_post_vars(m::Optimizer; kwargs...)\n    options = Dict(kwargs)\n\n    if haskey(options, :use_disc)\n        l_var = [\n            options[:use_disc][i][1] for\n            i in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip)\n        ]\n        u_var = [\n            options[:use_disc][i][end] for\n            i in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip)\n        ]\n    else\n        l_var = m.l_var_tight\n        u_var = m.u_var_tight\n    end\n\n    JuMP.@variable(\n        m.model_mip,\n        x[i = 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip)]\n    )\n\n    for i in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip)\n        # Interestingly, not enforcing category of lifted variables is able to improve performance\n        if i <= m.num_var_orig\n            if m.var_type_orig[i] == :Bin\n                set_binary(x[i])\n            elseif m.var_type_orig[i] == :Int\n                set_integer(x[i])\n            end\n        end\n        # Changed to tight bound, if no bound tightening is performed, will be just .l_var_orig\n        l_var[i] > -Inf && JuMP.set_lower_bound(x[i], l_var[i])\n        # Changed to tight bound, if no bound tightening is performed, will be just .u_var_orig\n        u_var[i] < Inf && JuMP.set_upper_bound(x[i], u_var[i])\n\n        m.var_type[i] == :Int && error(\n            \"Alpine does not support MINLPs with generic integer (non-binary) variables yet! Try Juniper.jl for finding a local feasible solution\",\n        )\n    end\n\n    return\nend\n\nfunction amp_post_lifted_constraints(m::Optimizer)\n    for i in 1:m.num_constr_orig\n        if m.constr_structure[i] == :affine\n            amp_post_affine_constraint(m.model_mip, m.bounding_constr_mip[i])\n        elseif m.constr_structure[i] == :convex\n            amp_post_convex_constraint(m.model_mip, m.bounding_constr_mip[i])\n        else\n            error(\"Unknown constr_structure type $(m.constr_structure[i])\")\n        end\n    end\n\n    for i in keys(m.linear_terms)\n        amp_post_linear_lift_constraints(m.model_mip, m.linear_terms[i])\n    end\n\n    return\nend\n\nfunction amp_post_affine_constraint(model_mip::JuMP.Model, affine::Dict)\n    if affine[:sense] == :(>=)\n        JuMP.@constraint(\n            model_mip,\n            sum(\n                affine[:coefs][j] *\n                _index_to_variable_ref(model_mip, affine[:vars][j].args[2]) for\n                j in 1:affine[:cnt]\n            ) >= affine[:rhs]\n        )\n    elseif affine[:sense] == :(<=)\n        JuMP.@constraint(\n            model_mip,\n            sum(\n                affine[:coefs][j] *\n                _index_to_variable_ref(model_mip, affine[:vars][j].args[2]) for\n                j in 1:affine[:cnt]\n            ) <= affine[:rhs]\n        )\n    elseif affine[:sense] == :(==)\n        JuMP.@constraint(\n            model_mip,\n            sum(\n                affine[:coefs][j] *\n                _index_to_variable_ref(model_mip, affine[:vars][j].args[2]) for\n                j in 1:affine[:cnt]\n            ) == affine[:rhs]\n        )\n    else\n        error(\"Unkown sense.\")\n    end\n\n    return\nend\n\nfunction amp_post_convex_constraint(model_mip::JuMP.Model, convex::Dict)\n    !prod([i == 2 for i in convex[:powers]]) && error(\"No relaxation implementation for convex constraints $(convex[:expr])\")\n\n    if convex[:sense] == :(<=)\n        JuMP.@constraint(\n            model_mip,\n            sum(\n                convex[:coefs][j] *\n                _index_to_variable_ref(model_mip, convex[:vars][j].args[2])^2 for\n                j in 1:convex[:cnt]\n            ) <= convex[:rhs]\n        )\n    elseif convex[:sense] == :(>=)\n        JuMP.@constraint(\n            model_mip,\n            sum(\n                convex[:coefs][j] *\n                _index_to_variable_ref(model_mip, convex[:vars][j].args[2])^2 for\n                j in 1:convex[:cnt]\n            ) >= convex[:rhs]\n        )\n    else\n        error(\n            \"No equality constraints should be recognized as supported convex constriants\",\n        )\n    end\n\n    return\nend\n\nfunction amp_post_linear_lift_constraints(model_mip::JuMP.Model, l::Dict)\n    @assert l[:ref][:sign] == :+\n    JuMP.@constraint(\n        model_mip,\n        _index_to_variable_ref(model_mip, l[:y_idx]) ==\n        sum(i[1] * _index_to_variable_ref(model_mip, i[2]) for i in l[:ref][:coef_var]) +\n        l[:ref][:scalar]\n    )\n    return\nend\n\nfunction amp_post_lifted_objective(m::Optimizer)\n\n    #if isa(m.obj_expr_orig, Number)\n    if m.obj_expr_orig == :(+())\n        JuMP.@objective(m.model_mip, m.sense_orig, 0.0)\n    elseif expr_isconst(m.obj_expr_orig)\n        # This eval is okay because expr_isconst is true\n        JuMP.@objective(m.model_mip, m.sense_orig, eval(m.obj_expr_orig))\n    elseif m.obj_structure == :affine\n        JuMP.@objective(\n            m.model_mip,\n            m.sense_orig,\n            m.bounding_obj_mip[:rhs] + sum(\n                m.bounding_obj_mip[:coefs][i] *\n                _index_to_variable_ref(m.model_mip, m.bounding_obj_mip[:vars][i].args[2])\n                for i in 1:m.bounding_obj_mip[:cnt]\n            )\n        )\n    elseif m.obj_structure == :convex\n        # This works only when the original objective is convex quadratic.\n        # Higher-order convex monomials need implementation of outer-approximation (check resolve_convex_constr in operators.jl)\n        JuMP.@objective(\n            m.model_mip,\n            m.sense_orig,\n            m.bounding_obj_mip[:rhs] + sum(\n                m.bounding_obj_mip[:coefs][i] *\n                _index_to_variable_ref(\n                    m.model_mip,\n                    m.bounding_obj_mip[:vars][i].args[2],\n                )^2 for i in 1:m.bounding_obj_mip[:cnt]\n            )\n        )\n    else\n        error(\"Unknown structural obj type $(m.obj_structure)\")\n    end\n    return\nend\n\nfunction add_partition(m::Optimizer; kwargs...)\n    options = Dict(kwargs)\n    haskey(options, :use_disc) ? discretization = options[:use_disc] :\n    discretization = m.discretization\n    haskey(options, :use_solution) ? point_vec = options[:use_solution] :\n    point_vec = m.best_bound_sol\n\n    if isa(get_option(m, :disc_add_partition_method), Function)\n        m.discretization = get_option(m, :disc_add_partition_method)(\n            m,\n            use_disc = discretization,\n            use_solution = point_vec,\n        )\n    elseif get_option(m, :disc_add_partition_method) == \"adaptive\"\n        m.discretization =\n            add_adaptive_partition(m, use_disc = discretization, use_solution = point_vec)\n    elseif get_option(m, :disc_add_partition_method) == \"uniform\"\n        m.discretization = add_uniform_partition(m, use_disc = discretization)\n    else\n        error(\"Unknown input on how to add partitions.\")\n    end\n\n    return\nend\n\n# TODO: also need to document the special diverted cases when new partition touches both corners\n\"\"\"\n\n    add_adaptive_partition(m::Optimizer; use_disc::Dict, use_solution::Vector)\n\nA built-in method used to add a new partition on feasible domains of variables chosen for partitioning.\n\nThis can be illustrated by the following example. Let the previous iteration's partition vector on\nvariable \"x\" be given by [0, 3, 7, 9]. And say, the lower bounding solution has a value of 4 for variable \"x\".\nIn the case when `partition_scaling_factor = 4`, this function creates the new partition vector as follows: [0, 3, 3.5, 4, 4.5, 7, 9]\n\nThere are two options for this function,\n\n    * `use_disc(default=m.discretization)`:: to regulate which is the base to add new partitions on\n    * `use_solution(default=m.best_bound_sol)`:: to regulate which solution to use when adding new partitions on\n\nThis function can be accordingly modified by the user to change the behavior of the solver, and thus the convergence.\n\n\"\"\"\nfunction add_adaptive_partition(m::Optimizer; kwargs...)\n    options = Dict(kwargs)\n\n    haskey(options, :use_disc) ? discretization = options[:use_disc] :\n    discretization = m.discretization\n    haskey(options, :use_solution) ? point_vec = copy(options[:use_solution]) :\n    point_vec = copy(m.best_bound_sol)\n    haskey(options, :use_ratio) ? ratio = options[:use_ratio] :\n    ratio = get_option(m, :partition_scaling_factor)\n    haskey(options, :branching) ? branching = options[:branching] : branching = false\n\n    if length(point_vec) < m.num_var_orig + m.num_var_linear_mip + m.num_var_nonlinear_mip\n        point_vec = resolve_lifted_var_value(m, point_vec)  # Update the solution vector for lifted variable\n    end\n\n    if branching\n        discretization = deepcopy(discretization)\n    end\n\n    processed = Set{Int}()\n\n    # Perform discretization based on type of nonlinear terms #\n    for i in m.disc_vars\n        point = point_vec[i]                # Original Variable\n        λCnt = length(discretization[i])\n\n        # Built-in method based-on variable type\n        if m.var_type[i] == :Cont\n            i in processed && continue\n            point = correct_point(m, discretization[i], point, i)\n            for j in 1:λCnt\n                if point >= discretization[i][j] && point <= discretization[i][j+1]  # Locating the right location\n                    radius = calculate_radius(discretization[i], j, ratio)\n                    insert_partition_helper(m, i, j, point, radius, discretization[i])\n                    push!(processed, i)\n                    break\n                end\n            end\n        elseif m.var_type[i] == :Bin # This should never happen\n            @warn \"  Warning: Binary variable in m.disc_vars. Check out what is wrong...\"\n            continue  # No partition should be added to binary variable unless user specified\n        elseif m.var_type[i] == :Int\n            error(\n                \"Alpine does not support MINLPs with generic integer (non-binary) variables yet!\",\n            )\n        else\n            error(\"Unexpected variable types while inserting partitions\")\n        end\n    end\n\n    return discretization\nend\n\n\"\"\"\n    This function targets to address unexpected numerical issues when adding partitions in tight regions.\n\"\"\"\nfunction correct_point(m::Optimizer, partvec::Vector, point::Float64, var::Int)\n    tol = get_option(m, :tol)\n\n    if point < partvec[1] - tol || point > partvec[end] + tol\n        @warn \"  Warning: VAR$(var) SOL=$(point) out of discretization [$(partvec[1]),$(partvec[end])]. Hence, taking the middle point.\"\n        return 0.5 * (partvec[1] + partvec[end]) # Should choose the longest range\n    end\n\n    isapprox(point, partvec[1]; atol = tol) && return partvec[1]\n    isapprox(point, partvec[end]; atol = tol) && return partvec[end]\n\n    return point\nend\n\nfunction calculate_radius(partvec::Vector, part::Int, ratio::Any)\n    lb_local = partvec[part]\n    ub_local = partvec[part+1]\n\n    distance = ub_local - lb_local\n    if isa(ratio, Float64) || isa(ratio, Int)\n        radius = distance / ratio\n    elseif isa(ratio, Function)\n        radius = distance / ratio(m)\n    else\n        error(\"Undetermined partition scaling factor\")\n    end\n\n    return radius\nend\n\nfunction insert_partition_helper(\n    m::Optimizer,\n    var::Int,\n    partidx::Int,\n    point::Number,\n    radius::Float64,\n    partvec::Vector,\n)\n    abstol, reltol =\n        get_option(m, :disc_abs_width_tol), get_option(m, :disc_rel_width_tol)\n\n    lb_local, ub_local = partvec[partidx], partvec[partidx+1]\n    ub_touch, lb_touch = true, true\n    lb_new, ub_new = max(point - radius, lb_local), min(point + radius, ub_local)\n\n    if ub_new < ub_local &&\n       !isapprox(ub_new, ub_local; atol = abstol) &&\n       abs(ub_new - ub_local) / (1e-8 + abs(ub_local)) > reltol # Insert new UB-based partition\n        insert!(partvec, partidx + 1, ub_new)\n        ub_touch = false\n    end\n\n    if lb_new > lb_local &&\n       !isapprox(lb_new, lb_local; atol = abstol) &&\n       abs(lb_new - lb_local) / (1e-8 + abs(lb_local)) > reltol # Insert new LB-based partition\n        insert!(partvec, partidx + 1, lb_new)\n        lb_touch = false\n    end\n\n    if (ub_touch && lb_touch) || check_solution_history(m, var)\n        distvec = [(j, partvec[j+1] - partvec[j]) for j in 1:length(partvec)-1]\n        sort!(distvec, by = x -> x[2])\n        point_orig = point\n        pos = distvec[end][1]\n        lb_local = partvec[pos]\n        ub_local = partvec[pos+1]\n        isapprox(lb_local, ub_local; atol = get_option(m, :tol)) && return\n        chunk = (ub_local - lb_local) / get_option(m, :disc_divert_chunks)\n        point = lb_local + (ub_local - lb_local) / get_option(m, :disc_divert_chunks)\n        for i in 2:get_option(m, :disc_divert_chunks)\n            insert!(\n                partvec,\n                pos + 1,\n                lb_local + chunk * (get_option(m, :disc_divert_chunks) - (i - 1)),\n            )\n        end\n        (get_option(m, :log_level) > 199) && println(\n            \"[DEBUG] !D! VAR$(var): SOL=$(round(point_orig; digits = 4))=>$(point) |$(round(lb_local; digits = 4)) | $(get_option(m, :disc_divert_chunks)) SEGMENTS | $(round(ub_local; digits = 4))|\",\n        )\n    else\n        (get_option(m, :log_level) > 199) && println(\n            \"[DEBUG] VAR$(var): SOL=$(round(point; digits = 4)) RADIUS=$(radius), PARTITIONS=$(length(partvec)-1) |$(round(lb_local; digits = 4)) |$(round(lb_new; digits = 6)) <- * -> $(round(ub_new; digits = 6))| $(round(ub_local; digits = 4))|\",\n        )\n    end\n\n    return\nend\n\nfunction add_uniform_partition(m::Optimizer; kwargs...)\n    options = Dict(kwargs)\n    haskey(options, :use_disc) ? discretization = options[:use_disc] :\n    discretization = m.discretization\n\n    for i in m.disc_vars  # Only construct when discretized\n        lb_local = discretization[i][1]\n        ub_local = discretization[i][end]\n        distance = ub_local - lb_local\n        # chunk = distance / ((m.logs[:n_iter] + 1) * get_option(m, :disc_uniform_rate))\n        chunk = distance / (m.logs[:n_iter] * get_option(m, :disc_uniform_rate))\n        discretization[i] = [\n            lb_local + chunk * (j - 1) for\n            j in 1:(m.logs[:n_iter])*get_option(m, :disc_uniform_rate)\n        ]\n        push!(discretization[i], ub_local)   # Safety Scheme\n    end\n\n    return discretization\nend\n\nfunction update_partition_scaling_factor(m::Optimizer, presolve = false)\n    m.logs[:n_iter] > 2 && return get_option(m, :partition_scaling_factor) # Stop branching after the second iterations\n\n    ratio_pool = [8:2:20;]  # Built-in try range\n    incumb_ratio = ratio_pool[1]\n    is_min_sense(m) ? incumb_res = -Inf : incumb_res = Inf\n    res_collector = Float64[]\n\n    for r in ratio_pool\n        st = time()\n        if !isempty(m.best_sol)\n            branch_disc = add_adaptive_partition(\n                m,\n                use_disc = m.discretization,\n                branching = true,\n                use_ratio = r,\n                use_solution = m.best_sol,\n            )\n        else\n            branch_disc = add_adaptive_partition(\n                m,\n                use_disc = m.discretization,\n                branching = true,\n                use_ratio = r,\n            )\n        end\n        create_bounding_mip(m, use_disc = branch_disc)\n        res = disc_branch_solve(m)\n        push!(res_collector, res)\n        if m.sense_orig == MOI.MAX_SENSE ? res < incumb_res : res > incumb_res\n            incumb_res = res\n            incumb_ratio = r\n        end\n        et = time() - st\n        if et > 300  # 5 minutes limitation\n            println(\"Expensive disc branching pass... Fixed at 8\")\n            return 8\n        end\n        get_option(m, :log_level) > 0 &&\n            println(\"BRANCH RATIO = $(r), METRIC = $(res) || TIME = $(time()-st)\")\n    end\n\n    if Statistics.std(res_collector) >= 1e-2    # Detect if all solutions are similar to each other\n        get_option(m, :log_level) > 0 &&\n            println(\"RATIO BRANCHING OFF due to solution variance test passed.\")\n        set_option(m, :partition_scaling_factor_branch, false) # If an incumbent ratio is selected, then stop the branching scheme\n    end\n\n    if !isempty(m.best_sol)\n        m.discretization = add_adaptive_partition(\n            m,\n            use_disc = m.discretization,\n            branching = true,\n            use_ratio = incumb_ratio,\n            use_solution = m.best_sol,\n        )\n    else\n        m.discretization = add_adaptive_partition(\n            m,\n            use_disc = m.discretization,\n            branching = true,\n            use_ratio = incumb_ratio,\n        )\n    end\n\n    get_option(m, :log_level) > 0 && println(\"INCUMB_RATIO = $(incumb_ratio)\")\n\n    return incumb_ratio\nend\n\nfunction disc_branch_solve(m::Optimizer)\n\n    # ================= Solve Start ================ #\n    set_mip_time_limit(m)\n    start_bounding_solve = time()\n    JuMP.optimize!(m.model_mip)\n    status = MOI.get(m.model_mip, MOI.TerminationStatus())\n    cputime_branch_bounding_solve = time() - start_bounding_solve\n    m.logs[:total_time] += cputime_branch_bounding_solve\n    m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time])\n    # ================= Solve End ================ #\n\n    if status in STATUS_OPT || status in STATUS_LIMIT\n        return MOI.get(m.model_mip, MOI.ObjectiveBound())\n    else\n        @warn \"  Warning: Unexpected solving condition $(status) during disc branching.\"\n    end\n\n    # Safety scheme\n    if is_min_sense(m)\n        return -Inf\n    elseif is_max_sense(m)\n        return Inf\n    end\nend\n"
  },
  {
    "path": "src/const.jl",
    "content": "const ALPINE_C_NLTERMS = [\n    :BILINEAR,\n    :MONOMIAL,\n    :MULTILINEAR,\n    :BININT,\n    :BINLIN,\n    :INTLIN,\n    :BINPROD,\n    :INTPROD,\n    :cos,\n    :sin,\n]\nconst ALPINE_C_MONOMIAL = [:BILINEAR, :MONOMIAL, :MULTILINEAR]\nconst ALPINE_C_TRIGONOMETRIC = [:sin, :cos]\n"
  },
  {
    "path": "src/embedding.jl",
    "content": "\"\"\"\n\tThis function creates a mapping dictionary to link the right λ to the right bineary variables\n\tbased on how many partitions are required and a given encoding method.\n\"\"\"\nfunction embedding_map(λCnt::Int, encoding::Any = ebd_gray, ibs::Bool = false)\n    map = Dict()\n\n    encoding = resolve_encoding_key(encoding)\n    L = Int(ceil(log(2, λCnt - 1)))\n    for i in 1:L*2\n        map[i] = Set()\n    end\n    H = [encoding(i, L) for i in 0:max(1, (2^L - 1))]\n    map[:H_orig] = H\n    map[:H] = [ebd_support_binary_vec(H[i]) for i in 1:length(H)] # Store the map\n    map[:L] = L\n\n    !is_compatible_encoding(H) && error(\"Encodign method is not SOS-2 compatible...\")\n\n    # Mapping SOS-2 :: Aλ <= x  &&  A'λ <=  1-x\n    # |x| = L : Flip  1 -> bCnt : bCnt + 1 -> bCnt + bCnt\n    J = Set(collect(1:(2^L+1)))\n    J_s = Set(collect(1:λCnt))\n    for l in 1:L\n        if ibs\n            L_constr = Set()\n            R_constr = Set()\n            for j in 0:2^L\n                prod([(l in ebd_σ(H[i])) for i in ebd_I(j, 2^L + 1)]) && push!(L_constr, j + 1)\n                prod([!(l in ebd_σ(H[i])) for i in ebd_I(j, 2^L + 1)]) && push!(R_constr, j + 1)\n            end\n            L_branch = intersect(J_s, setdiff(J, L_constr))\n            R_branch = intersect(J_s, setdiff(J, R_constr))\n            map[l] = setdiff(J_s, L_branch)\n            map[l+L] = setdiff(J_s, R_branch)\n        else\n            for j in 0:(λCnt-1)\n                prod([(l in ebd_σ(H[i])) for i in ebd_I(j, λCnt)]) && push!(map[l], j + 1)\n                prod([!(l in ebd_σ(H[i])) for i in ebd_I(j, λCnt)]) && push!(map[l+L], j + 1)\n            end\n        end\n    end\n\n    return map\nend\n\n\"\"\"\n\tThis function parse the encoding key string and return the built-in encoding function.\n\"\"\"\nfunction resolve_encoding_key(encoding::Any)\n    isa(encoding, Function) && return encoding\n    encoding == \"default\" && return ebd_gray\n    return error(\"Must specify a encoding method when using convhull_ebd formulation\")\nend\n\n\"\"\"\n\tThis function is the same σ() function described in Vielma and Nemhauser 2011.\n\"\"\"\nfunction ebd_σ(b::String)\n    sv = ebd_support_bool_vec(b)\n    return [i for i in 1:length(sv) if sv[i]]\nend\n\n\"\"\"\n\tThis function is the same I() function described in Vielma and Nemhauser 2011.\n\"\"\"\nfunction ebd_I(j, λCnt)\n    return [i for i in collect(1:Int((λCnt - 1))) if j in [i - 1, i]] #Page 52\nend\n\n\"\"\"\n\tThis function is the same S() function described in Vielma and Nemhauser 2011.\n\"\"\"\nfunction ebd_S(i)\n    (i <= 0) && error(\"Embedding utility S_[i] doesn't take i<=0\")\n    return [i, i - 1]\nend\n\n\"\"\"\n\tThis function checks whether the encoding method is compatible or not to obtain a valid mapping.\n\"\"\"\nfunction is_compatible_encoding(code_seq::Vector)\n    for i in 1:(length(code_seq)-1)\n        sum(\n            abs.(ebd_support_bool_vec(code_seq[i]) - ebd_support_bool_vec(code_seq[i+1])),\n        ) != 1 && return false\n    end\n    return true\nend\n\n\"\"\"\n\tThis is a utility function that convert the binary string into bool vector\n\"\"\"\nfunction ebd_support_bool_vec(s::String)\n    v = Vector{Bool}(undef, length(s))\n    for i in 1:length(s)\n        s[i] == '1' ? v[i] = true : v[i] = false\n    end\n    return v\nend\n\n\"\"\"\n\tThis is a utility function that convert the binary string into 0/1 vector\n\"\"\"\nfunction ebd_support_binary_vec(s::String)\n    v = Vector{Int}(undef, length(s))\n    for i in 1:length(s)\n        s[i] == '1' ? v[i] = 1 : v[i] = 0\n    end\n    return v\nend\n\n\"\"\"\n\tThis is the function that translate the bounding constraints (α¹b⁰+α²b¹ <= x <= α¹b¹+α²b²)\n\twith log # of binary variables, i.e., generate these constraints using log # of binary variables.\n\"\"\"\nfunction ebd_link_xα(\n    m::Optimizer,\n    α::Vector,\n    λCnt::Int,\n    disc_vec::Vector,\n    code_seq::Vector,\n    var_idx::Int,\n)\n    lifters = Dict()\n    exprs = Dict()\n    L = Int(ceil(log(2, λCnt - 1)))\n    P = length(disc_vec) - 1\n\n    # Expression expansion\n    for i in 1:P\n        code_vec = ebd_support_bool_vec(code_seq[i])\n        lifters, exprs = ebd_link_expression(code_vec, lifters, exprs, i)\n    end\n\n    # Construct Variable Vector\n    α_A = JuMP.@variable(\n        m.model_mip,\n        [1:length(keys(lifters))],\n        lower_bound = 0.0,\n        upper_bound = 1.0,\n        base_name = \"αA$(var_idx)\"\n    )\n    for i in keys(lifters) # Build first-level evaluation\n        relaxation_multilinear_binary(m.model_mip, α_A[lifters[i]-L], [α[j] for j in i])\n    end\n\n    α_R = [α; α_A] # Initialize/re-arrgange the variable sequence\n\n    for i in 1:P # Start populating sub-expressions\n        exprs[i][:expr] = JuMP.@expression(\n            m.model_mip,\n            sum(\n                exprs[i][:coefs][j] * α_R[exprs[i][:vars][j]] for\n                j in 1:exprs[i][:length] if exprs[i][:vars][j] != 0\n            ) + exprs[i][:vals]\n        )\n    end\n\n    # Contructing final constraints\n    JuMP.@constraint(\n        m.model_mip,\n        _index_to_variable_ref(m.model_mip, var_idx) >=\n        sum(exprs[j][:expr] * disc_vec[j] for j in 1:P)\n    )\n    JuMP.@constraint(\n        m.model_mip,\n        _index_to_variable_ref(m.model_mip, var_idx) <=\n        sum(exprs[j-1][:expr] * disc_vec[j] for j in 2:(P+1))\n    )\n\n    return\nend\n\n\"\"\"\n\tThis is a utility function used in ebd_link_xα() that constructing the mapping that links partitions with\n\tcombinations of binary variables.\n\"\"\"\nfunction ebd_link_expression(code::Vector, lift_dict::Dict, link_dict::Dict, p_idx::Int)\n    L = length(code)\n\n    # Strickly mapping p_idx -> x\n    code[1] ? coefs = Any[1] : coefs = Any[1, -1]\n    code[1] ? vars = Any[1] : vars = Any[0, 1]\n    prod(.!code) ? vals = 1.0 : vals = 0.0  # Marks the eventual expression is going have 1 or not\n\n    for i in 2:L\n        if code[i]\n            for j in 1:length(coefs)\n                (vars[j] == 0) ? vars[j] = i : vars[j] = [vars[j]; i] # Update vars\n                @assert length(vars) == length(coefs)\n            end\n        else\n            for j in 1:length(coefs)\n                (vars[j] == 0) ? push!(vars, i) : push!(vars, [vars[j]; i]) # Update vars with variable multiplier (ADDING)\n                (vars[j] == 0) ? push!(coefs, -1) : push!(coefs, coefs[j] * -1) # Update the coeffs with -1 (ADDING)\n            end\n        end\n    end\n    @assert length(coefs) == length(vars)\n\n    # Maintaining the dictionary of lifted variables and swp\n    for i in 1:length(vars)\n        if isa(vars[i], Vector)\n            !haskey(lift_dict, vars[i]) &&\n                (lift_dict[vars[i]] = L + length(keys(lift_dict)) + 1)\n            vars[i] = lift_dict[vars[i]]\n        end\n    end\n\n    # Maintain the expression dictionary\n    link_dict[p_idx] = Dict(\n        :p_idx => p_idx,\n        :coefs => coefs,\n        :vars => vars,\n        :vals => vals,\n        :length => length(coefs),\n    )\n\n    return lift_dict, link_dict\nend\n\n\"\"\"\n\tBuilt-in Encoding methods: binary encoding\n\tThis is a compatible encoding\n\"\"\"\nebd_binary(n, idx) = string(n, base = 2, pad = idx)\n\n\"\"\"\n\tBuilt-in Encoding methods: gray encoding\n\tThis is a compatible encoding\n\"\"\"\nfunction ebd_gray(n, idx)\n    code_decimal = xor(n, n >> 1)\n    return string(code_decimal, base = 2, pad = idx)\nend\n"
  },
  {
    "path": "src/heuristics.jl",
    "content": "\"\"\"\n    Ranking of variables involved in nonlinear terms for piecewise adaptive partitioning:\n    Ranked based on the absolute gap between each variable's solution from the lower-bounding MIP and the best feasible solution to the MINLP.\n    Currently doesn't support recursive convexification\n\"\"\"\nfunction update_disc_cont_var(m::Optimizer)\n    length(m.candidate_disc_vars) <= 15 && return   # Algorithm Separation Point\n\n    var_idxs = copy(m.candidate_disc_vars)\n    var_diffs = Vector{Float64}(\n        undef,\n        m.num_var_orig + length(keys(m.linear_terms)) + length(keys(m.nonconvex_terms)),\n    )\n\n    for i in 1:m.num_var_orig       # Original Variables\n        var_diffs[i] = abs(m.best_sol[i] - m.best_bound_sol[i])\n    end\n\n    !isempty(m.linear_terms) && (var_diffs = _eval_var_diffs!(m.linear_terms, var_diffs))\n    !isempty(m.nonconvex_terms) &&\n        (var_diffs = _eval_var_diffs!(m.nonconvex_terms, var_diffs))\n\n    distance = Dict(zip(var_idxs, var_diffs))\n    weighted_min_vertex_cover(m, distance)\n\n    (get_option(m, :log_level) > 100) &&\n        println(\"updated partition var selection => $(m.disc_vars)\")\n    return\nend\n\n# Helper function for sequential evaluation to avoid dependency issue\nfunction _eval_var_diffs!(terms::Dict{Any,Any}, var_diffs::Vector{Float64})\n    for i in 1:length(keys(terms))\n        for j in keys(terms)\n            if terms[j][:id] == i\n                var_diffs[terms[j][:lifted_var_ref].args[2]] =\n                    terms[j][:evaluator](terms[j], var_diffs)\n            end\n        end\n    end\n\n    return var_diffs\nend\n"
  },
  {
    "path": "src/log.jl",
    "content": "# Create dictionary of logs for timing and iteration counts\nfunction create_logs!(m)\n    logs = Dict{Symbol,Any}()\n\n    # Timers\n    logs[:presolve_time] = 0.0                           # Total presolve-time of the algorithm\n    logs[:total_time] = 0.0                              # Total run-time of the algorithm\n    logs[:time_left] = get_option(m, :time_limit)    # Total remaining time of the algorithm if time-out is specified\n\n    # Values\n    logs[:obj] = []                 # Iteration-based objective\n    logs[:bound] = []               # Iteration-based objective bound\n\n    # Counters\n    logs[:n_iter] = 0               # Number of iterations\n    logs[:n_feas] = 0               # Number of times a new feasible solution is obtained\n    logs[:ub_incumb_cnt] = 0        # Number of incumbents detected in the upper bound\n    logs[:lb_incumb_cnt] = 0        # Number of incumebnts detected in the lower bound\n    logs[:bt_iter] = 0\n\n    return m.logs = logs\nend\n\nfunction reset_timer(m::Optimizer)\n    m.logs[:total_time] = 0.0\n    m.logs[:time_left] = get_option(m, :time_limit)\n    return m\nend\n\nfunction logging_summary(m::Optimizer)\n    if get_option(m, :log_level) > 0\n        printstyled(\"\\nPROBLEM STATISTICS\\n\", color = :cyan, bold = true)\n        is_min_sense(m) && (println(\"  Objective sense = Min\"))\n        is_max_sense(m) && (println(\"  Objective sense = Max\"))\n        println(\n            \"  # Variables = \",\n            length([i for i in 1:m.num_var_orig if m.var_type[i] == :Cont]) +\n            length([i for i in 1:m.num_var_orig if m.var_type[i] == :Bin]) +\n            length([i for i in 1:m.num_var_orig if m.var_type[i] == :Int]),\n        )\n        println(\n            \"  # Bin-Int Variables = \",\n            length([i for i in 1:m.num_var_orig if m.var_type[i] == :Bin]) + length([i for i in 1:m.num_var_orig if m.var_type[i] == :Int]),\n        )\n        println(\"  # Constraints = \", m.num_constr_orig)\n        println(\"  # NL Constraints = \", m.num_nlconstr_orig)\n        println(\"  # Linear Constraints = \", m.num_lconstr_orig)\n        get_option(m, :recognize_convex) && println(\n            \"  # Detected convex constraints = $(length([i for i in m.constr_structure if i == :convex]))\",\n        )\n        println(\"  # Detected nonlinear terms = \", length(m.nonconvex_terms))\n        println(\n            \"  # Variables involved in nonlinear terms = \",\n            length(m.candidate_disc_vars),\n        )\n        println(\"  # Potential variables for partitioning = \", length(m.disc_vars))\n\n        printstyled(\"SUB-SOLVERS USED BY ALPINE\\n\", color = :cyan, bold = true)\n        if get_option(m, :minlp_solver) === nothing\n            println(\"  NLP local solver = \", m.nlp_solver_id)\n        else\n            println(\"  MINLP local solver = \", m.minlp_solver_id)\n        end\n        println(\"  MIP solver = \", m.mip_solver_id)\n\n        printstyled(\"ALPINE CONFIGURATION\\n\", color = :cyan, bold = true)\n        project = read(joinpath(dirname(@__DIR__), \"Project.toml\"), String)\n        m_version = match(r\"version \\= \\\"(.+?)\\\"\", project)\n        println(\"  Alpine version = \", m_version[1])\n        if is_min_sense(m)\n            println(\n                \"  Maximum iterations (lower-bounding MIPs) = \",\n                get_option(m, :max_iter),\n            )\n        elseif is_max_sense(m)\n            println(\n                \"  Maximum iterations (upper-bounding MIPs) = \",\n                get_option(m, :max_iter),\n            )\n        else\n            println(\"  Maximum iterations (bounding MIPs) =  \", get_option(m, :max_iter))\n        end\n\n        println(\"  Relative global optimality gap = \", get_option(m, :rel_gap) * 100, \"%\")\n\n        if get_option(m, :disc_var_pick) == 0\n            println(\"  Potential variables chosen for partitioning = All\")\n        elseif get_option(m, :disc_var_pick) == 1\n            println(\n                \"  Potential variables chosen for partitioning = Minimum vertex cover\",\n            )\n        end\n\n        if get_option(m, :partition_scaling_factor_branch)\n            println(\"  Partition scaling factor branch activated\")\n        else\n            println(\n                \"  Partition scaling factor = \",\n                get_option(m, :partition_scaling_factor),\n            )\n        end\n        (get_option(m, :convhull_ebd)) && println(\"  Using convhull_ebd formulation\")\n        (get_option(m, :convhull_ebd)) &&\n            println(\"  Encoding method = $(get_option(m, :convhull_ebd_encode))\")\n        (get_option(m, :convhull_ebd)) && println(\n            \"  Independent branching scheme = $(get_option(m, :convhull_ebd_ibs))\",\n        )\n        println(\"  Bound-tightening presolve = \", get_option(m, :presolve_bt))\n        get_option(m, :presolve_bt) && println(\n            \"  Maximum iterations (OBBT) = \",\n            get_option(m, :presolve_bt_max_iter),\n        )\n    end\nend\n\nfunction logging_head(m::Optimizer)\n    if !is_max_sense(m)\n        printstyled(\"LOWER-BOUNDING ITERATIONS\", color = :cyan, bold = true)\n        UB_iter = \"Incumbent\"\n        UB = \"Best Incumbent\"\n        LB = \"Lower Bound\"\n    else\n        printstyled(\"UPPER-BOUNDING ITERATIONS\", color = :cyan, bold = true)\n        UB_iter = \"Incumbent\"\n        UB = \"Best Incumbent\"\n        LB = \"Upper Bound\"\n    end\n    println(\n        \"\\n====================================================================================================\",\n    )\n    if m.logs[:time_left] < Inf\n        printstyled(\n            bold = true,\n            \"| Iter   | $UB_iter       | $UB      | $LB        | Gap (%)         | Time      \\n\",\n        )\n    end\nend\n\nfunction logging_row_entry(m::Optimizer; kwargs...)\n    options = Dict(kwargs)\n\n    b_len = 16\n    if !isempty(m.logs[:obj]) && isa(m.logs[:obj][end], Float64)\n        objstr = string(round(m.logs[:obj][end]; digits = 4))\n        spc = max(0, b_len - length(objstr))\n    else\n        objstr = string(\"-\")\n        spc = max(0, b_len - length(objstr))\n    end\n    UB_block = string(\" \", objstr, \" \"^spc)\n    if m.obj_expr_orig == :(+())\n        bdstr = 0.0\n        spc = b_len - 1\n    elseif expr_isconst(m.obj_expr_orig)\n        # This eval is okay because expr_isconst is true\n        bdstr = eval(m.obj_expr_orig)\n        spc = b_len - length(bdstr)\n    elseif isa(m.logs[:bound][end], Float64)\n        bdstr = string(round(m.logs[:bound][end]; digits = 4))\n        spc = max(0, b_len - length(bdstr))\n    else\n        bdstr = string(m.logs[:bound][end])\n        spc = b_len - length(bdstr)\n    end\n    LB_block = string(\" \", bdstr, \" \"^spc)\n\n    bobjstr = string(round(m.best_obj; digits = 4))\n    spc = max(0, b_len + 4 - length(bobjstr))\n    incumb_UB_block = string(\" \", bobjstr, \" \"^spc)\n\n    bbdstr = string(round(m.best_bound; digits = 4))\n    spc = max(0, b_len + 3 - length(bbdstr))\n    incumb_LB_block = string(\" \", bbdstr, \" \"^spc)\n\n    rel_gap = round(m.best_rel_gap * 100, digits = 3)\n    rel_gap > 999 ? rel_gap = \"LARGE\" : rel_gap = string(rel_gap)\n    GAP_block = string(\" \", rel_gap, \" \"^(b_len - length(rel_gap)))\n\n    UTIME_block = string(\n        \" \",\n        round(m.logs[:total_time]; digits = 2),\n        \"s\",\n        \" \"^(b_len - 1 - length(string(round(m.logs[:total_time]; digits = 2)))),\n    )\n\n    if m.logs[:time_left] < Inf\n        LTIME_block = \" \"\n    end\n\n    haskey(options, :finish_entry) ? (ITER_block = string(\" \", \"finish \")) :\n    (ITER_block = string(\" \", m.logs[:n_iter], \" \"^(7 - length(string(m.logs[:n_iter])))))\n\n    println(\n        \"|\",\n        ITER_block,\n        \"|\",\n        UB_block,\n        \"|\",\n        incumb_UB_block,\n        \"|\",\n        incumb_LB_block,\n        \"|\",\n        GAP_block,\n        \"|\",\n        UTIME_block,\n        LTIME_block,\n    )\n    return\nend\n\n#Logging and printing functions\n\n# Create dictionary of statuses for Alpine algorithm\nfunction create_status!(m)\n    status = Dict{Symbol,MOI.TerminationStatusCode}()\n\n    status[:local_solve] = MOI.OPTIMIZE_NOT_CALLED # Status of local solve\n    status[:bounding_solve] = MOI.OPTIMIZE_NOT_CALLED # Status of bounding solve\n    m.detected_incumbent = false\n    m.detected_bound = false\n\n    return m.status = status\nend\n\n\"\"\"\nThis function summarizes the eventual solver status based on all available information\nrecorded in the solver. The output status is self-defined which requires users to\nread our documentation to understand the details behind every status symbols.\n\"\"\"\nfunction summary_status(m::Optimizer)\n\n    # Alpine Solver Status Definition\n    # :Optimal : normal termination with optimality gap closed within time limits\n    # :UserLimits : any non-optimal termination related to user-defined parameters\n    # :Infeasible : termination with relaxation proven infeasible or detection of\n    #               variable bound conflicts\n    # :Heuristic : termination with feasible solution found but not bounds detected\n    #               happens when lower bound problem is extremely hard to solve\n    # :Unknown : termination with no exception recorded\n\n    if m.detected_bound && m.detected_incumbent\n        m.alpine_status =\n            m.best_rel_gap > get_option(m, :rel_gap) ? MOI.OTHER_LIMIT : MOI.OPTIMAL\n    elseif m.status[:bounding_solve] == MOI.INFEASIBLE\n        m.alpine_status = MOI.INFEASIBLE\n    elseif m.detected_bound && !m.detected_incumbent\n        m.alpine_status = MOI.OTHER_LIMIT\n    elseif !m.detected_bound && m.detected_incumbent\n        m.alpine_status = MOI.LOCALLY_SOLVED\n    else\n        @warn \"  [EXCEPTION] Indefinite Alpine status. Please report your instance (& solver configuration) as an issue (https://github.com/lanl-ansi/Alpine.jl/issues) to help us make Alpine better.\"\n    end\n\n    raw = MOI.get(m, MOI.RawStatusString())\n    printstyled(\"\\n*** $raw ***\\n\")\n\n    return\nend\n\n# Some useful logging details:\n\n# for i in ALPINE_C_NLTERMS\n#     cnt = length([1 for j in keys(m.nonconvex_terms) if m.nonconvex_terms[j][:nonlinear_type] == i])\n#     cnt > 0 && println(\"\\tTerm $(i) Count = $(cnt) \")\n# end\n# println(\"  Maximum solution time = \", get_option(m, :time_limit))\n# println(\"  Basic bound propagation = \", get_option(m, :presolve_bp))\n# println(\"  Conseuctive solution rejection = after \", get_option(m, :disc_consecutive_forbid), \" times\")\n# get_option(m, :presolve_bt) && println(\"bound tightening presolve algorithm = \", get_option(m, :presolve_bt)_algo)\n# get_option(m, :presolve_bt) && println(\"bound tightening presolve width tolerance = \", get_option(m, :presolve_bt)_width_tol)\n# get_option(m, :presolve_bt) && println(\"bound tightening presolve output tolerance = \", get_option(m, :presolve_bt)_output_tol)\n# get_option(m, :presolve_bt) && println(\"bound tightening presolve relaxation = \", get_option(m, :presolve_bt)_relax)\n# get_option(m, :presolve_bt) && println(\"bound tightening presolve mip regulation time = \", get_option(m, :presolve_bt)_mip_time_limit)\n"
  },
  {
    "path": "src/main_algorithm.jl",
    "content": "const STATUS_LIMIT = [\n    MOI.ITERATION_LIMIT,\n    MOI.TIME_LIMIT,\n    MOI.NODE_LIMIT,\n    MOI.SOLUTION_LIMIT,\n    MOI.MEMORY_LIMIT,\n    MOI.OBJECTIVE_LIMIT,\n    MOI.NORM_LIMIT,\n    MOI.OTHER_LIMIT,\n]\nconst STATUS_OPT =\n    [MOI.OPTIMAL, MOI.LOCALLY_SOLVED, MOI.ALMOST_OPTIMAL, MOI.ALMOST_LOCALLY_SOLVED]\n\nconst STATUS_WARM_START = [MOI.OPTIMIZE_NOT_CALLED]\n\nconst STATUS_INF = [MOI.INFEASIBLE, MOI.LOCALLY_INFEASIBLE]\n\nfunction features_available(m::Optimizer)\n    features = [:Grad, :Jac, :JacVec, :ExprGraph]\n    if !m.disable_hessian\n        push!(features, :Hess)\n        push!(features, :HessVec)\n    end\n\n    return features\nend\n\nfunction load!(m::Optimizer)\n\n    # Initialize NLP interface\n    requested_features = features_available(m)\n    if m.d_orig !== nothing\n        MOI.initialize(m.d_orig, requested_features::Vector{Symbol})\n    end\n    for feat in requested_features\n        if !(feat in features_available(m))\n            error(\"Unsupported feature $feat\")\n        end\n    end\n\n    # Collect objective & constraint expressions\n    if m.has_nl_objective\n        m.obj_expr_orig =\n            expr_isolate_const(_variable_index_to_index(MOI.objective_expr(m.d_orig))) # see in nlexpr.jl if this expr isolation has any issue\n    elseif m.objective_function isa Nothing\n        m.obj_expr_orig = Expr(:call, :+)\n    else\n        m.obj_expr_orig = _moi_function_to_expr(m.objective_function)\n    end\n\n    # Collect original variable type and build dynamic variable type space\n    m.var_type = copy(m.var_type_orig)\n    m.int_vars = [i for i in 1:m.num_var_orig if m.var_type[i] == :Int]\n    m.bin_vars = [i for i in 1:m.num_var_orig if m.var_type[i] == :Bin]\n\n    if !isempty(m.int_vars) || !isempty(m.bin_vars)\n        (get_option(m, :minlp_solver) === nothing) && (error(\n            \"No MINLP local solver specified; use option 'minlp_solver' to specify a MINLP local solver\",\n        ))\n    end\n\n    m.num_constr_orig += length(m.nl_constraint_bounds_orig)\n    m.num_nlconstr_orig += length(m.nl_constraint_bounds_orig)\n    append!(m.constraint_bounds_orig, m.nl_constraint_bounds_orig)\n    for i in eachindex(m.nl_constraint_bounds_orig)\n        push!(\n            m.constr_expr_orig,\n            _variable_index_to_index(MOI.constraint_expr(m.d_orig, i)),\n        )\n        push!(m.constr_structure, :generic_nonlinear)\n    end\n\n    # Summarize constraints information in original model\n    m.constr_type_orig = Array{Symbol}(undef, m.num_constr_orig)\n\n    for i in 1:m.num_constr_orig\n        if m.constraint_bounds_orig[i].lower > -Inf &&\n           m.constraint_bounds_orig[i].upper < Inf\n            m.constr_type_orig[i] = :(==)\n        elseif m.constraint_bounds_orig[i].lower > -Inf\n            m.constr_type_orig[i] = :(>=)\n        else\n            m.constr_type_orig[i] = :(<=)\n        end\n    end\n\n    # Initialize recognizable structure properties with :none\n    m.obj_structure = :none\n\n    @assert m.num_constr_orig == m.num_nlconstr_orig + m.num_lconstr_orig\n    m.is_obj_linear_orig =\n        !m.has_nl_objective && m.objective_function isa MOI.ScalarAffineFunction{Float64}\n    m.is_obj_linear_orig ? (m.obj_structure = :generic_linear) :\n    (m.obj_structure = :generic_nonlinear)\n    isa(m.obj_expr_orig, Number) && (m.obj_structure = :constant)\n\n    # Populate data to create the bounding MIP model\n    recategorize_var(m)             # Initial round of variable re-categorization\n\n    # Solver-dependent detection\n    _fetch_mip_solver_identifier(m)\n    _fetch_nlp_solver_identifier(m)\n    _fetch_minlp_solver_identifier(m)\n\n    # Main Algorithmic Initialization\n    process_expr(m)                         # Compact process of every expression\n    init_tight_bound(m)                     # Initialize bounds for algorithmic processes\n    resolve_var_bounds(m)                   # resolve lifted var bounds\n    pick_disc_vars(m)                       # Picking variables to be discretized\n    init_disc(m)                            # Initialize discretization dictionaries\n\n    # Turn-on bt presolve if variables are not discrete\n    if isempty(m.int_vars) &&\n       length(m.bin_vars) <= 50 &&\n       m.num_var_orig <= 10000 &&\n       length(m.candidate_disc_vars) <= 300 &&\n       get_option(m, :presolve_bt) == nothing\n        set_option(m, :presolve_bt, true)\n        println(\"Automatically turning on bound-tightening presolve\")\n    elseif get_option(m, :presolve_bt) == nothing  # If no use indication\n        set_option(m, :presolve_bt, false)\n    end\n\n    if length(m.bin_vars) > 200 || m.num_var_orig > 2000\n        println(\n            \"Automatically turning OFF 'partition_scaling_factor_branch' due to the size of the problem\",\n        )\n        set_option(m, :partition_scaling_factor_branch, false)\n    end\n\n    # Initialize the solution pool\n    m.bound_sol_pool = initialize_solution_pool(m, 0)  # Initialize the solution pool\n\n    # Check if any illegal term exist in the warm-solution\n    any(isnan, m.best_sol) && (m.best_sol = zeros(length(m.best_sol)))\n\n    # Initialize log\n    logging_summary(m)\n\n    return\nend\n\n\"\"\"\n   High-level Function\n\"\"\"\nfunction MOI.optimize!(m::Optimizer)\n    load!(m)\n    if getproperty(m, :presolve_infeasible)\n        summary_status(m)\n        return\n    end\n\n    presolve(m)\n\n    if !check_exit(m) && get_option(m, :apply_partitioning)\n        global_solve(m)\n        get_option(m, :log_level) > 0 && logging_row_entry(m, finish_entry = true)\n        println(\n            \"====================================================================================================\",\n        )\n    end\n\n    summary_status(m)\n\n    return\nend\n\n\"\"\"\n   global_solve(m::Optimizer)\n\nPerform global optimization algorithm that is based on the adaptive piecewise convexification.\nThis iterative algorithm loops over [`bounding_solve`](@ref) and [`local_solve`](@ref) until the optimality gap between the lower bound (relaxed problem with min. objective) and the upper bound (feasible problem) is within the user prescribed limits.\nEach [`bounding_solve`](@ref) provides a lower bound that serves as the partitioning point for the next iteration (this feature can be modified given a different `add_adaptive_partition`).\nEach [`local_solve`](@ref) provides an incumbent feasible solution. The algorithm terminates when atleast one of these conditions are satisfied: time limit, optimality condition, or iteration limit.\n\n\"\"\"\nfunction global_solve(m::Optimizer)\n    get_option(m, :log_level) > 0 && logging_head(m)\n    get_option(m, :presolve_track_time) || reset_timer(m)\n    while !check_exit(m)\n        m.logs[:n_iter] += 1\n        create_bounding_mip(m)                  # Build the relaxation model\n        bounding_solve(m)                       # Solve the relaxation model\n        update_opt_gap(m)                       # Update optimality gap\n        check_exit(m) && break                  # Feasibility check\n        get_option(m, :log_level) > 0 && logging_row_entry(m)  # Logging\n        local_solve(m)                          # Solve local model for feasible solution\n        update_opt_gap(m)                       # Update optimality gap\n        check_exit(m) && break                  # Detect optimality termination\n        algorithm_automation(m)                 # Automated adjustments\n    end\n\n    return\nend\n\n\"\"\"\n   presolve(m::Optimizer)\n\"\"\"\nfunction presolve(m::Optimizer)\n    start_presolve = time()\n    get_option(m, :log_level) > 0 &&\n        printstyled(\"PRESOLVE \\n\", color = :cyan, bold = true)\n    get_option(m, :log_level) > 0 && println(\"  Doing local search\")\n\n    if get_option(m, :use_start_as_incumbent)\n        # Check for bound feasibility of the warm start value\n        if !(m.l_var_orig <= m.warm_start_value <= m.u_var_orig)\n            error(\n                \"Provide a valid, feasible, warm starting point. Else, set use_start_as_incumbent to false\",\n            )\n        end\n\n        obj_warmval = if m.has_nl_objective\n            MOI.eval_objective(m.d_orig, m.warm_start_value)\n        else\n            MOI.Utilities.eval_variables(\n                vi -> m.warm_start_value[vi.value],\n                m.objective_function,\n            )\n        end\n        update_incumbent(m, obj_warmval, m.warm_start_value)\n        m.status[:local_solve] = MOI.OPTIMIZE_NOT_CALLED\n        get_option(m, :log_level) > 0 && println(\n            \"  Using warm starting point as a local incumbent solution with value $(round(m.best_obj, digits=4))\",\n        )\n    else\n        local_solve(m, presolve = true)\n    end\n\n    # Solver status\n    if m.status[:local_solve] in union(STATUS_OPT, STATUS_LIMIT, STATUS_WARM_START)\n        if !get_option(m, :use_start_as_incumbent)\n            get_option(m, :log_level) > 0 && println(\n                \"  Local solver returns a feasible point with value $(round(m.best_obj, digits=4))\",\n            )\n        end\n        bound_tightening_wrapper(m, use_bound = true)    # performs bound-tightening with the local solve objective value\n        get_option(m, :presolve_bt) && init_disc(m)            # Re-initialize discretization dictionary on tight bounds\n        get_option(m, :partition_scaling_factor_branch) && (set_option(\n            m,\n            :partition_scaling_factor,\n            update_partition_scaling_factor(m, true),\n        ))\n\n    elseif m.status[:local_solve] in STATUS_INF\n        (get_option(m, :log_level) > 0) &&\n            println(\"  Bound tightening without objective bounds (OBBT)\")\n        bound_tightening_wrapper(m, use_bound = false)                      # do bound tightening without objective value\n        (get_option(m, :partition_scaling_factor_branch)) && (set_option(\n            m,\n            :partition_scaling_factor,\n            update_partition_scaling_factor(m, true),\n        ))\n        get_option(m, :presolve_bt) && init_disc(m)\n\n    elseif m.status[:local_solve] == MOI.INVALID_MODEL\n        @warn \" Warning: Presolve ends with local solver yielding $(m.status[:local_solve]). \\n This may come from Ipopt's `:Not_Enough_Degrees_Of_Freedom`.\"\n    elseif !get_option(m, :use_start_as_incumbent)\n        @warn \" Warning: Presolve ends with local solver yielding $(m.status[:local_solve]).\"\n    end\n\n    cputime_presolve = time() - start_presolve\n    m.logs[:presolve_time] += cputime_presolve\n    m.logs[:total_time] = m.logs[:presolve_time]\n    m.logs[:time_left] -= m.logs[:presolve_time]\n\n    if get_option(m, :presolve_bt)\n        (get_option(m, :log_level) > 0) && println(\n            \"  Post-presolve optimality gap: $(round(m.presolve_best_rel_gap; digits = 3))%\",\n        )\n    end\n    (get_option(m, :log_level) > 0) &&\n        println(\"  Completed presolve in $(round.(m.logs[:total_time]; digits = 2))s\")\n\n    return\nend\n\n\"\"\"\n   A wrapper function that collects automated solver adjustments within the main while loop.\n\"\"\"\nfunction algorithm_automation(m::Optimizer)\n\n    # Only if a feasible solution is detected\n    if (get_option(m, :disc_var_pick) == 3) && m.detected_incumbent\n        update_disc_cont_var(m)\n    end\n\n    if get_option(m, :partition_scaling_factor_branch)\n        set_option(m, :partition_scaling_factor, update_partition_scaling_factor(m, true))    # Only perform for a maximum three times\n    end\n\n    return\nend\n\n\"\"\"\n   Summarized function to determine whether to interrupt the main while loop.\n\"\"\"\nfunction check_exit(m::Optimizer)\n\n    # constant objective with feasible local solve check\n    if expr_isconst(m.obj_expr_orig) &&\n       (m.status[:local_solve] == MOI.OPTIMAL || m.status == MOI.LOCALLY_SOLVED)\n        m.best_bound = m.obj_expr_orig\n        m.best_rel_gap = 0.0\n        m.best_abs_gap = 0.0\n        m.status[:bounding_solve] = MOI.OPTIMAL\n        m.alpine_status = :Optimal\n        m.detected_bound = true\n        return true\n    end\n\n    # Infeasibility check\n    m.status[:bounding_solve] == MOI.INFEASIBLE && return true\n\n    # Unbounded check\n    m.status[:bounding_solve] == MOI.DUAL_INFEASIBLE && return true\n\n    # Optimality check\n    if m.best_rel_gap <= get_option(m, :rel_gap)\n        m.detected_bound = true\n        return true\n    end\n    m.logs[:n_iter] >= get_option(m, :max_iter) && return true\n    m.best_abs_gap <= get_option(m, :abs_gap) && return true\n\n    # User-limits check\n    m.logs[:time_left] < get_option(m, :tol) && return true\n\n    return false\nend\n\nfunction load_nonlinear_model(m::Optimizer, model::MOI.ModelLike, l_var, u_var)\n    x = MOI.add_variables(model, m.num_var_orig)\n    for i in eachindex(x)\n        set = _bound_set(l_var[i], u_var[i])\n        if set !== nothing\n            MOI.add_constraint(model, x[i], set)\n        end\n    end\n    for (func, set) in m.scalar_constraints\n        MOI.add_constraint(model, func, set)\n    end\n    MOI.set(model, MOI.ObjectiveSense(), m.sense_orig)\n    if m.objective_function !== nothing\n        MOI.set(\n            model,\n            MOI.ObjectiveFunction{typeof(m.objective_function)}(),\n            m.objective_function,\n        )\n    end\n\n    if m.d_orig !== nothing\n        block =\n            MOI.NLPBlockData(m.nl_constraint_bounds_orig, m.d_orig, m.has_nl_objective)\n        MOI.set(model, MOI.NLPBlock(), block)\n    end\n\n    return x\nend\n\nfunction set_variable_type(model::MOI.ModelLike, xs, variable_types)\n    for (x, variable_type) in zip(xs, variable_types)\n        if variable_type == :Int\n            MOI.add_constraint(model, x, MOI.Integer())\n        elseif variable_type == :Bin\n            MOI.add_constraint(model, x, MOI.ZeroOne())\n        else\n            @assert variable_type == :Cont\n        end\n    end\nend\n\n\"\"\"\n   local_solve(m::Optimizer, presolve::Bool=false)\n\nPerform a local NLP or MINLP solve to obtain a feasible solution.\nThe `presolve` option is set to `true` when the function is invoked in [`presolve`](@ref).\nOtherwise, the function is invoked from [`bounding_solve`](@ref).\n\n\"\"\"\nfunction local_solve(m::Optimizer; presolve = false)\n    local_nlp_status = :Unknown\n\n    var_type_screener = [i for i in m.var_type_orig if i in [:Bin, :Int]]\n\n    if presolve\n        if !isempty(var_type_screener) && get_option(m, :minlp_solver) !== nothing\n            local_solve_model =\n                MOI.instantiate(get_option(m, :minlp_solver), with_bridge_type = Float64)\n        elseif !isempty(var_type_screener)\n            local_solve_model =\n                MOI.instantiate(get_option(m, :nlp_solver), with_bridge_type = Float64)\n        else\n            local_solve_model =\n                MOI.instantiate(get_option(m, :nlp_solver), with_bridge_type = Float64)\n        end\n    else\n        local_solve_model =\n            MOI.instantiate(get_option(m, :nlp_solver), with_bridge_type = Float64)\n    end\n\n    if presolve == false\n        l_var, u_var = fix_domains(m)\n    else\n        l_var, u_var = m.l_var_tight[1:m.num_var_orig], m.u_var_tight[1:m.num_var_orig]\n    end\n\n    x = load_nonlinear_model(m, local_solve_model, l_var, u_var)\n    if m.d_orig !== nothing\n        MOI.initialize(m.d_orig, [:Grad, :Jac, :Hess, :HessVec, :ExprGraph]) # Safety scheme for sub-solvers re-initializing the NLPEvaluator\n    end\n\n    if !presolve\n        warmval = m.best_sol[1:m.num_var_orig]\n    else\n        warmval = m.warm_start_value[1:m.num_var_orig]\n    end\n    MOI.set(local_solve_model, MOI.VariablePrimalStart(), x, warmval)\n\n    # do_heuristic = false\n\n    # The only case when MINLP solver is actually used\n    if presolve && !isempty(var_type_screener)\n        if get_option(m, :minlp_solver) === nothing\n            error(\"Provide a valid MINLP solver\")\n            # do_heuristic = true\n        else\n            set_variable_type(local_solve_model, x, m.var_type_orig)\n        end\n    end\n\n    start_local_solve = time()\n    MOI.optimize!(local_solve_model)\n    local_nlp_status = MOI.get(local_solve_model, MOI.TerminationStatus())\n\n    # if !do_heuristic\n    #     local_nlp_status = MOI.get(local_solve_model, MOI.TerminationStatus())\n    # end\n\n    cputime_local_solve = time() - start_local_solve\n    m.logs[:total_time] += cputime_local_solve\n    m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time])\n\n    # if do_heuristic\n    # m.status[:local_solve] = heu_basic_rounding(m, MOI.get(local_solve_model, MOI.VariablePrimal(), x))\n    # return\n\n    if local_nlp_status in STATUS_OPT || local_nlp_status in STATUS_LIMIT\n        candidate_obj = MOI.get(local_solve_model, MOI.ObjectiveValue())\n        sol_temp = MOI.get(local_solve_model, MOI.VariablePrimal(), x)\n        candidate_sol = Vector{Float64}()\n\n        feas_tol = 1E-5\n\n        for i in 1:length(sol_temp)\n            if (sol_temp[i] >= m.l_var_orig[i] - feas_tol) &&\n               (sol_temp[i] <= m.l_var_orig[i] + feas_tol)\n                push!(candidate_sol, m.l_var_orig[i])\n            elseif (sol_temp[i] >= m.u_var_orig[i] - feas_tol) &&\n                   (sol_temp[i] <= m.u_var_orig[i] + feas_tol)\n                push!(candidate_sol, m.u_var_orig[i])\n            else\n                push!(candidate_sol, round(sol_temp[i], digits = 7))\n            end\n        end\n\n        @assert length(candidate_sol) == length(sol_temp)\n        update_incumbent(m, candidate_obj, candidate_sol)\n        m.status[:local_solve] = local_nlp_status\n        return\n\n        # elseif local_nlp_status in STATUS_INF\n        #     heu_pool_multistart(m) == MOI.LOCALLY_SOLVED && return\n        #     push!(m.logs[:obj], \"INF\")\n        #     m.status[:local_solve] = MOI.LOCALLY_INFEASIBLE\n        #     return\n\n    elseif local_nlp_status == MOI.DUAL_INFEASIBLE\n        push!(m.logs[:obj], \"U\")\n        m.status[:local_solve] = MOI.DUAL_INFEASIBLE\n        if presolve\n            @warn \"  Warning: NLP local solve is unbounded.\"\n        else\n            @warn \"  Warning: NLP local solve is unbounded.\"\n        end\n        return\n\n    else\n        push!(m.logs[:obj], \"E\")\n        m.status[:local_solve] = MOI.OTHER_ERROR\n        # if presolve\n        #     @warn \" Warning: NLP solve failure $(local_nlp_status).\"\n        # else\n        #     @warn \" Warning: NLP local solve failure.\"\n        # end\n        return\n    end\n\n    return\nend\n\n\"\"\"\n   bounding_solve(m::Optimizer; kwargs...)\n\nThis step usually solves a convex MILP/MIQCP/MIQCQP problem for lower bounding the given minimization problem.\nIt solves the problem built upon a piecewise convexification based on the discretization sictionary of some variables.\nSee `create_bounding_mip` for more details of the problem solved here.\n\"\"\"\nfunction bounding_solve(m::Optimizer)\n    convertor = Dict(MOI.MAX_SENSE => :<, MOI.MIN_SENSE => :>)\n\n    # Updates time metric and the termination bounds\n    set_mip_time_limit(m)\n    # update_boundstop_options(m)\n\n    # ================= Solve Start ================ #\n    start_bounding_solve = time()\n    JuMP.optimize!(m.model_mip)\n    status = JuMP.termination_status(m.model_mip)\n    m.logs[:total_time] += time() - start_bounding_solve\n    m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time])\n    # ================= Solve End ================ #\n\n    if status in STATUS_OPT || status in STATUS_LIMIT\n        candidate_bound =\n            (status == MOI.OPTIMAL) ? JuMP.objective_value(m.model_mip) :\n            JuMP.objective_bound(m.model_mip)\n        candidate_bound_sol = [\n            round.(JuMP.value(_index_to_variable_ref(m.model_mip, i)); digits = 7) for\n            i in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip)\n        ]\n\n        # Experimental code\n        measure_relaxed_deviation(m, sol = candidate_bound_sol)\n        if get_option(m, :disc_consecutive_forbid) > 0\n            m.bound_sol_history[mod(\n                m.logs[:n_iter] - 1,\n                get_option(m, :disc_consecutive_forbid),\n            )+1] = copy(candidate_bound_sol) # Requires proper offseting\n        end\n        push!(m.logs[:bound], candidate_bound)\n        is_tighter = ifelse(\n            m.sense_orig == MOI.MAX_SENSE,\n            candidate_bound < m.best_bound,\n            candidate_bound > m.best_bound,\n        )\n        if is_tighter\n            m.best_bound = candidate_bound\n            m.best_bound_sol = copy(candidate_bound_sol)\n            m.status[:bounding_solve] = status\n            m.detected_bound = true\n        end\n\n        # collect_lb_pool(m)    # Collect a pool of sub-optimal solutions - currently implemented for Gurobi only\n\n    elseif status in STATUS_INF || status == MOI.INFEASIBLE_OR_UNBOUNDED\n        push!(m.logs[:bound], \"-\")\n        m.status[:bounding_solve] = MOI.INFEASIBLE\n        @warn \"  Warning: Infeasibility detected in the MIP solver\"\n\n        if ALPINE_DEBUG\n            @warn \"Use Alpine.print_iis_gurobi(m.model_mip) function in src/utility.jl (commented out code) for further investigation, if your MIP solver is Gurobi\"\n        end\n\n    elseif status == :Unbounded\n        m.status[:bounding_solve] = MOI.DUAL_INFEASIBLE\n        @warn \"  Warning: MIP solver returns unbounded\"\n\n    else\n        error(\"  Warning: MIP solver failure $(status)\")\n    end\n\n    return\nend\n\n\"\"\"\n   pick_disc_vars(m::Optimizer)\n\nThis function helps pick the variables for discretization. The method chosen depends on user-inputs.\nIn case when `indices::Int` is provided, the method is chosen as built-in method. Currently,\nthere are two built-in options for users as follows:\n\n* `max_cover (get_option(m, :disc_var_pick)=0, default)`: pick all variables involved in the non-linear term for discretization\n* `min_vertex_cover (get_option(m, :disc_var_pick)=1)`: pick a minimum vertex cover for variables involved in non-linear terms so that each non-linear term is at least convexified\n\nFor advanced usage, `get_option(m, :disc_var_pick)` allows `::Function` inputs. User can provide his/her own function to choose the variables for discretization.\n\n\"\"\"\nfunction pick_disc_vars(m::Optimizer)\n    disc_var_pick = get_option(m, :disc_var_pick)\n\n    if isa(disc_var_pick, Function)\n        disc_var_pick(m)\n        length(m.disc_vars) == 0 &&\n            length(m.nonconvex_terms) > 0 &&\n            error(\n                \"[USER FUNCTION] must select at least one variable to perform discretization for convexificiation purpose\",\n            )\n    elseif isa(disc_var_pick, Int)\n        if disc_var_pick == 0\n            get_candidate_disc_vars(m)\n        elseif disc_var_pick == 1\n            min_vertex_cover(m)\n        elseif disc_var_pick == 2\n            (length(m.candidate_disc_vars) > 15) ? min_vertex_cover(m) :\n            get_candidate_disc_vars(m)\n        elseif disc_var_pick == 3 # Initial\n            (length(m.candidate_disc_vars) > 15) ? min_vertex_cover(m) :\n            get_candidate_disc_vars(m)\n        else\n            error(\n                \"Unsupported default indicator for picking variables for discretization\",\n            )\n        end\n    else\n        error(\n            \"Input for parameter :disc_var_pick is illegal. Should be either a Int for default methods indexes or functional inputs.\",\n        )\n    end\n\n    return\nend\n"
  },
  {
    "path": "src/multilinear.jl",
    "content": "function amp_post_convhull(m::Optimizer; kwargs...)\n    options = Dict(kwargs)\n    haskey(options, :use_disc) ? d = options[:use_disc] : d = m.discretization\n\n    # Variable holders\n    λ = Dict()  # Extreme points and multipliers\n    α = Dict()  # Partitioning Variables\n    β = Dict()  # Lifted variables for exact formulation\n\n    # Convexification for non-convex terms\n    contains_multilinear = false\n    for k in keys(m.nonconvex_terms)\n        nl_type = m.nonconvex_terms[k][:nonlinear_type]\n        if ((nl_type == :MULTILINEAR) || (nl_type == :BILINEAR)) &&\n           (m.nonconvex_terms[k][:convexified] == false)\n            λ, α = amp_convexify_multilinear(m, k, λ, α, d)\n            contains_multilinear = true\n        elseif nl_type == :MONOMIAL && !m.nonconvex_terms[k][:convexified]\n            λ, α = amp_convexify_quadratic_univariate(m, k, λ, α, d)\n        elseif nl_type == :BINLIN && !m.nonconvex_terms[k][:convexified]\n            β = amp_convexify_binlin(m, k, β)\n        elseif nl_type == :BINPROD && !m.nonconvex_terms[k][:convexified]\n            β = amp_convexify_multilinear_binary(m, k, β)\n        end\n    end\n\n    # Add lambda linking constraints\n    if m.options.linking_constraints && contains_multilinear\n        _add_multilinear_linking_constraints(m, λ)\n    end\n\n    # Code for warm starting bounding MIP iterations\n    get_option(m, :convhull_warmstart) &&\n        !isempty(m.best_bound_sol) &&\n        amp_warmstart_α(m, α)\n\n    return\nend\n\nfunction amp_convexify_multilinear(\n    m::Optimizer,\n    k::Any,\n    λ::Dict,\n    α::Dict,\n    discretization::Dict,\n)\n    m.nonconvex_terms[k][:convexified] = true  # Bookeeping the convexified terms\n\n    ml_indices, dim, extreme_point_cnt = amp_convhull_prepare(m, discretization, k)   # convert key to easy read mode\n    λ = amp_convhull_λ(m, k, ml_indices, λ, extreme_point_cnt, dim)\n    λ = populate_convhull_extreme_values(\n        m,\n        discretization,\n        ml_indices,\n        λ,\n        dim,\n        ones(Int, length(dim)),\n    )\n    α = amp_convhull_α(m, ml_indices, α, dim, discretization)\n    amp_post_convhull_constrs(m, λ, α, ml_indices, dim, extreme_point_cnt, discretization)\n\n    return λ, α\nend\n\nfunction amp_convexify_quadratic_univariate(\n    m::Optimizer,\n    k::Any,\n    λ::Dict,\n    α::Dict,\n    discretization::Dict,\n)\n    m.nonconvex_terms[k][:convexified] = true  # Bookeeping the convexified terms\n\n    monomial_index, dim, extreme_point_cnt =\n        amp_convhull_prepare(m, discretization, k, monomial = true)\n    λ = amp_convhull_λ(m, k, monomial_index, λ, extreme_point_cnt, dim)\n    λ = populate_convhull_extreme_values(m, discretization, monomial_index, λ, 2)\n    α = amp_convhull_α(m, [monomial_index], α, dim, discretization)\n    amp_post_convhull_constrs(m, λ, α, monomial_index, discretization)\n\n    return λ, α\nend\n\nfunction amp_convexify_binlin(m::Optimizer, k::Any, β::Dict)\n    m.nonconvex_terms[k][:convexified] = true  # Bookeeping the convexified terms\n\n    @assert length(m.nonconvex_terms[k][:var_idxs]) == 2\n\n    lift_idx = m.nonconvex_terms[k][:y_idx]\n\n    if haskey(β, lift_idx)\n        return β\n    else\n        β[lift_idx] = _index_to_variable_ref(m.model_mip, lift_idx)\n    end\n\n    bin_idx = [i for i in m.nonconvex_terms[k][:var_idxs] if m.var_type[i] == :Bin]\n    cont_idx = [i for i in m.nonconvex_terms[k][:var_idxs] if m.var_type[i] != :Bin]\n\n    @assert length(bin_idx) == length(cont_idx) == 1\n\n    bin_idx = bin_idx[1]\n    cont_idx = cont_idx[1]\n\n    relaxation_bilinear(\n        m.model_mip,\n        _index_to_variable_ref(m.model_mip, lift_idx),\n        _index_to_variable_ref(m.model_mip, bin_idx),\n        _index_to_variable_ref(m.model_mip, cont_idx),\n        0,\n        1,\n        m.l_var_tight[cont_idx],\n        m.u_var_tight[cont_idx],\n    )\n\n    return β\nend\n\nfunction amp_convexify_multilinear_binary(m::Optimizer, k::Any, β::Dict)\n    m.nonconvex_terms[k][:convexified] = true  # Bookeeping the convexified terms\n\n    lift_idx = m.nonconvex_terms[k][:y_idx]\n    if haskey(β, lift_idx)\n        return β    # Already constructed\n    else\n        β[lift_idx] = _index_to_variable_ref(m.model_mip, lift_idx)\n    end\n\n    z = _index_to_variable_ref(m.model_mip, m.nonconvex_terms[k][:y_idx])\n    x = [_index_to_variable_ref(m.model_mip, i) for i in m.nonconvex_terms[k][:var_idxs]]\n\n    if length(x) >= 1\n        relaxation_multilinear_binary(m.model_mip, z, x)\n    end\n\n    return β\nend\n\n\"\"\"\n    Method for general nonlinear terms\n\"\"\"\nfunction amp_convhull_prepare(m::Optimizer, d::Dict, nonlinear_key::Any; monomial = false)\n    counted_var = []                # Keep both vector and set for collection sake\n    id = Set()                      # Coverting the nonlinear indices into a set\n\n    if isa(nonlinear_key, Vector)\n        for var in nonlinear_key        # This output regulates the sequence of how composing variable should be arranged\n            @assert isa(var, Expr)\n            m.var_type[var.args[2]] in [:Cont, :Int] && push!(id, var.args[2])\n            m.var_type[var.args[2]] in [:Cont, :Int] && push!(counted_var, var.args[2])\n        end\n    elseif isa(nonlinear_key, Dict)\n        for var in nonlinear_key[:vars]\n            @assert isa(var, Int)\n            m.var_type[var] in [:Cont, :Int] && push!(id, var)\n            m.var_type[var] in [:Cont, :Int] && push!(counted_var, var)\n        end\n    end\n\n    if length(id) < length(counted_var) # Got repeating terms, now the sequence matters\n        id = []\n        for var in nonlinear_key\n            m.var_type[var.args[2]] in [:Cont, :Int] && push!(id, var.args[2])\n        end\n    end\n\n    dim = [length(d[i]) for i in id]\n\n    monomial && return id[1], tuple(dim[1]), dim[1]   # One less dimension is required\n    return id, tuple([i for i in dim]...), prod(dim)\nend\n\n\"\"\"\n    Method for integers\n\"\"\"\nfunction amp_convhull_prepare(m::Optimizer, d::Dict, idx::Int)\n    return [idx], tuple(length(d[idx])), length(d[idx])\nend\n\n\"\"\"\n    Method for general nonlinear terms\n\"\"\"\nfunction amp_convhull_λ(\n    m::Optimizer,\n    nonlinear_key::Any,\n    indices::Any,\n    λ::Dict,\n    ext_cnt::Int,\n    dim::Tuple,\n)\n    y_idx = m.nonconvex_terms[nonlinear_key][:y_idx]\n\n    @assert !(y_idx in keys(λ))\n    λ[indices] = Dict(\n        :dim => dim,\n        :lifted_var_idx => y_idx,\n        :indices => reshape([1:ext_cnt;], dim),\n        :vars => JuMP.@variable(\n            m.model_mip,\n            [1:ext_cnt],\n            lower_bound = 0,\n            base_name = \"L$(y_idx)\"\n        ),\n        :vals => ones(dim),\n    )\n\n    return λ\nend\n\n\"\"\"\n    Method for power terms\n\"\"\"\nfunction populate_convhull_extreme_values(\n    m::Optimizer,\n    d::Dict,\n    mono_idx::Int,\n    λ::Dict,\n    p::Int,\n)\n    λ[mono_idx][:vals] = [d[mono_idx][i]^p for i in 1:length(d[mono_idx])]\n    return λ\nend\n\n\"\"\"\n    Method for regular multilinear terms\n\"\"\"\nfunction populate_convhull_extreme_values(\n    m::Optimizer,\n    discretization::Dict,\n    indices::Any,\n    λ::Dict,\n    dim::Tuple,\n    locator::Array,\n    level::Int = 1,\n)\n    if level > length(dim)\n        @assert length(indices) == length(dim)\n        @assert length(indices) == length(locator)\n        val = 1.0\n        k = 0\n        for i in indices\n            k += 1\n            val *= discretization[i][locator[k]]                      # Calculate extreme point z-value\n        end\n        λ[indices][:vals][CartesianIndex(tuple([i for i in locator]...))] = val  # Value assignment\n        return λ                                                         # finished with last dimension\n    else\n        for i in 1:dim[level]\n            locator[level] = i\n            λ = populate_convhull_extreme_values(\n                m,\n                discretization,\n                indices,\n                λ,\n                dim,\n                locator,\n                level + 1,\n            )\n        end\n    end\n\n    return λ\nend\n\n\"\"\"\n    General Method for all term\n\"\"\"\nfunction amp_convhull_α(\n    m::Optimizer,\n    indices::Any,\n    α::Dict,\n    dim::Tuple,\n    discretization::Dict,\n)\n    for i in indices\n        if !(i in keys(α))\n            lambda_cnt = length(discretization[i])\n            partition_cnt = length(discretization[i]) - 1\n            if get_option(m, :convhull_ebd) && partition_cnt > 2\n                αCnt = Int(ceil(log(2, partition_cnt)))\n                α[i] = JuMP.@variable(\n                    m.model_mip,\n                    [1:αCnt],\n                    Bin,\n                    base_name = string(\"YL\", i)\n                )\n            else\n                α[i] = JuMP.@variable(\n                    m.model_mip,\n                    [1:partition_cnt],\n                    Bin,\n                    base_name = \"A$(i)\"\n                )\n                JuMP.@constraint(m.model_mip, sum(α[i]) == 1)\n                JuMP.@constraint(\n                    m.model_mip,\n                    _index_to_variable_ref(m.model_mip, i) >=\n                    sum(α[i][j] * discretization[i][j] for j in 1:lambda_cnt-1)\n                ) # Add x = f(α) for regulating the domains\n                JuMP.@constraint(\n                    m.model_mip,\n                    _index_to_variable_ref(m.model_mip, i) <=\n                    sum(α[i][j-1] * discretization[i][j] for j in 2:lambda_cnt)\n                )\n            end\n        end\n    end\n\n    return α\nend\n\nfunction amp_convhull_α(m::Optimizer, idx::Int, α::Dict, dim, d::Dict)\n    return amp_convhull_α(m, [idx], α, dim, d)\nend\n\nfunction amp_warmstart_α(m::Optimizer, α::Dict)\n    d = m.discretization\n\n    if m.bound_sol_pool[:cnt] >= 2 # can only warm-start the problem when pool is large enough\n        ws_idx = -1\n        is_min_sense(m) ? ws_obj = Inf : ws_obj = -Inf\n        comp_opr = Dict(MOI.MIN_SENSE => :<, MOI.MAX_SENSE => :>)\n\n        # Search for the pool for incumbent warm starter\n        for i in 1:m.bound_sol_pool[:cnt]\n            m.bound_sol_pool[:stat][i] == :Warmstarter &&\n                (m.bound_sol_pool[:stat][i] = :Alive)   # reset the status if not dead\n            if m.bound_sol_pool[:stat][i] == :Dead\n                continue\n            end\n            is_better = ifelse(\n                m.sense_orig == MOI.MAX_SENSE,\n                m.bound_sol_pool[:obj][i] > ws_obj,\n                m.bound_sol_pool[:obj][i] < ws_obj,\n            )\n            if is_better\n                ws_idx = i\n                ws_obj = m.bound_sol_pool[:obj][i]\n            end\n        end\n\n        if ws_idx > 0 # If a warm starter is found\n            for v in m.bound_sol_pool[:vars]\n                partition_cnt = length(d[v]) - 1\n                active_j =\n                    get_active_partition_idx(d, m.bound_sol_pool[:sol][ws_idx][v], v)\n                for j in 1:partition_cnt\n                    j == active_j ? JuMP.set_start_value(α[v][j], 1.0) :\n                    JuMP.set_start_value(α[v][j], 0.0)\n                end\n            end\n            m.bound_sol_pool[:stat][ws_idx] = :Warmstarter\n            get_option(m, :log_level) > 0 && println(\n                \"!! WARM START bounding MIP using POOL SOL $(ws_idx) OBJ=$(m.bound_sol_pool[:obj][ws_idx])\",\n            )\n        end\n    end\n\n    return\nend\n\n\"\"\"\n    Method for general multilinear terms\n\"\"\"\nfunction amp_post_convhull_constrs(\n    m::Optimizer,\n    λ::Dict,\n    α::Dict,\n    indices::Any,\n    dim::Tuple,\n    ext_cnt::Int,\n    d::Dict,\n)\n\n    # Adding λ constraints\n    JuMP.@constraint(m.model_mip, sum(λ[indices][:vars]) == 1)\n    JuMP.@constraint(\n        m.model_mip,\n        _index_to_variable_ref(m.model_mip, λ[indices][:lifted_var_idx]) ==\n        λ[indices][:vars]' * reshape(λ[indices][:vals], ext_cnt)\n    )\n\n    # Add links on each dimension\n    for (cnt, i) in enumerate(indices)\n        l_cnt = length(d[i])\n        if m.var_type[i] == :Cont\n            amp_post_inequalities_cont(m, d, λ, α, indices, dim, i, cnt)        # Add links between λ and α\n        else\n            error(\"EXCEPTION: unexpected variable type during integer related realxation\")\n        end\n        sliced_indices =\n            [collect_indices(λ[indices][:indices], cnt, [k], dim) for k in 1:l_cnt] # Add x = f(λ) for convex representation of x value\n        JuMP.@constraint(\n            m.model_mip,\n            _index_to_variable_ref(m.model_mip, i) == sum(\n                (repeat([d[i][k]], length(k_indices))' * λ[indices][:vars][k_indices]) for\n                (k, k_indices) in enumerate(sliced_indices)\n            )\n        )\n    end\n\n    return\nend\n\n\"\"\"\n    Constraints for univariate quadratic terms\n\"\"\"\nfunction amp_post_convhull_constrs(\n    m::Optimizer,\n    λ::Dict,\n    α::Dict,\n    monomial_idx::Int,\n    discretization::Dict,\n)\n    partition_cnt = length(discretization[monomial_idx]) - 1\n    lambda_cnt = length(discretization[monomial_idx])\n\n    # Adding λ constraints\n    JuMP.@constraint(m.model_mip, sum(λ[monomial_idx][:vars]) == 1)\n    JuMP.@constraint(\n        m.model_mip,\n        _index_to_variable_ref(m.model_mip, λ[monomial_idx][:lifted_var_idx]) <=\n        λ[monomial_idx][:vars]' * λ[monomial_idx][:vals]\n    )\n    JuMP.@constraint(\n        m.model_mip,\n        _index_to_variable_ref(m.model_mip, λ[monomial_idx][:lifted_var_idx]) >=\n        _index_to_variable_ref(m.model_mip, monomial_idx)^2\n    )\n\n    # Add SOS-2 Constraints with basic encoding\n    if get_option(m, :convhull_ebd) && partition_cnt > 2\n        ebd_map = embedding_map(\n            lambda_cnt,\n            get_option(m, :convhull_ebd_encode),\n            get_option(m, :convhull_ebd_ibs),\n        )\n        YCnt = Int(ebd_map[:L])\n        @assert YCnt == length(α[monomial_idx])\n        for i in 1:YCnt\n            JuMP.@constraint(\n                m.model_mip,\n                sum(λ[monomial_idx][:vars][collect(ebd_map[i])]) <= α[monomial_idx][i]\n            )\n            JuMP.@constraint(\n                m.model_mip,\n                sum(λ[monomial_idx][:vars][collect(ebd_map[i+YCnt])]) <=\n                1 - α[monomial_idx][i]\n            )\n        end\n    else\n        for i in 1:lambda_cnt\n            if i == 1\n                JuMP.@constraint(\n                    m.model_mip,\n                    λ[monomial_idx][:vars][i] <= α[monomial_idx][i]\n                )\n            elseif i == lambda_cnt\n                JuMP.@constraint(\n                    m.model_mip,\n                    λ[monomial_idx][:vars][i] <= α[monomial_idx][i-1]\n                )\n            else\n                JuMP.@constraint(\n                    m.model_mip,\n                    λ[monomial_idx][:vars][i] <=\n                    α[monomial_idx][i-1] + α[monomial_idx][i]\n                )\n            end\n        end\n        # Add x = f(α) for regulating the domains\n        JuMP.@constraint(\n            m.model_mip,\n            _index_to_variable_ref(m.model_mip, monomial_idx) >= sum(\n                α[monomial_idx][j] * discretization[monomial_idx][j] for\n                j in 1:lambda_cnt-1\n            )\n        )\n        JuMP.@constraint(\n            m.model_mip,\n            _index_to_variable_ref(m.model_mip, monomial_idx) <= sum(\n                α[monomial_idx][j-1] * discretization[monomial_idx][j] for\n                j in 2:lambda_cnt\n            )\n        )\n    end\n\n    # Add x = f(λ) for convex representation\n    JuMP.@constraint(\n        m.model_mip,\n        _index_to_variable_ref(m.model_mip, monomial_idx) ==\n        λ[monomial_idx][:vars]' * discretization[monomial_idx]\n    )\n\n    return\nend\n\n\"\"\"\n    Method for multilinear terms with only continuous variables\n\"\"\"\nfunction amp_post_inequalities_cont(\n    m::Optimizer,\n    discretization::Dict,\n    λ::Dict,\n    α::Dict,\n    ml_indices::Any,\n    dim::Tuple,\n    var_ind::Int,\n    cnt::Int,\n)\n    lambda_cnt = length(discretization[var_ind])\n    partition_cnt = lambda_cnt - 1\n\n    # Embedding formulation\n    if get_option(m, :convhull_formulation) == \"sos2\" &&\n       get_option(m, :convhull_ebd) &&\n       partition_cnt > 2\n        ebd_map = embedding_map(\n            lambda_cnt,\n            get_option(m, :convhull_ebd_encode),\n            get_option(m, :convhull_ebd_ibs),\n        )\n        YCnt = Int(ebd_map[:L])\n        @assert YCnt == length(α[var_ind])\n        for i in 1:YCnt\n            p_sliced_indices =\n                collect_indices(λ[ml_indices][:indices], cnt, collect(ebd_map[i]), dim)\n            n_sliced_indices = collect_indices(\n                λ[ml_indices][:indices],\n                cnt,\n                collect(ebd_map[i+YCnt]),\n                dim,\n            )\n            JuMP.@constraint(\n                m.model_mip,\n                sum(λ[ml_indices][:vars][p_sliced_indices]) <= α[var_ind][i]\n            )\n            JuMP.@constraint(\n                m.model_mip,\n                sum(λ[ml_indices][:vars][n_sliced_indices]) <= 1 - α[var_ind][i]\n            )\n        end\n        get_option(m, :convhull_ebd_link) && ebd_link_xα(\n            m,\n            α[var_ind],\n            lambda_cnt,\n            discretization[var_ind],\n            ebd_map[:H_orig],\n            var_ind,\n        )\n        return\n    end\n\n    # SOS-2 Formulation\n    if get_option(m, :convhull_formulation) == \"sos2\"\n        for j in 1:lambda_cnt\n            sliced_indices = collect_indices(λ[ml_indices][:indices], cnt, [j], dim)\n            if (j == 1)\n                JuMP.@constraint(\n                    m.model_mip,\n                    sum(λ[ml_indices][:vars][sliced_indices]) <= α[var_ind][j]\n                )\n            elseif (j == lambda_cnt)\n                JuMP.@constraint(\n                    m.model_mip,\n                    sum(λ[ml_indices][:vars][sliced_indices]) <=\n                    α[var_ind][partition_cnt]\n                )\n            else\n                JuMP.@constraint(\n                    m.model_mip,\n                    sum(λ[ml_indices][:vars][sliced_indices]) <= sum(α[var_ind][(j-1):j])\n                )\n            end\n        end\n        return\n    elseif get_option(m, :convhull_formulation) == \"facet\"\n        for j in 1:(partition_cnt-1) # Constraint cluster of α >= f(λ)\n            sliced_indices = collect_indices(λ[ml_indices][:indices], cnt, [1:j;], dim)\n            JuMP.@constraint(\n                m.model_mip,\n                sum(α[var_ind][1:j]) >= sum(λ[ml_indices][:vars][sliced_indices])\n            )\n        end\n        for j in 1:(partition_cnt-1) # Constraint cluster of α <= f(λ)\n            sliced_indices =\n                collect_indices(λ[ml_indices][:indices], cnt, [1:(j+1);], dim)\n            JuMP.@constraint(\n                m.model_mip,\n                sum(α[var_ind][1:j]) <= sum(λ[ml_indices][:vars][sliced_indices])\n            )\n        end\n        return\n    else\n        error(\"Must indicate a choice of convex hull formulation: sos2, facet\")\n    end\n\n    return\nend\n\nfunction collect_indices(l::Array, fixed_dim::Int, fixed_partition::Array, dim::Tuple)\n    k = 0\n    indices =\n        Vector{Int}(undef, Int(prod(dim) / dim[fixed_dim] * length(fixed_partition)))\n    for i in 1:prod(dim)\n        ind = Tuple(CartesianIndices(l)[i])\n        if ind[fixed_dim] in fixed_partition\n            k += 1\n            indices[k] = i\n        end\n    end\n\n    return indices\nend\n\n\"\"\"\n    _add_multilinear_linking_constraints(m::Optimizer, λ::Dict)\n\nThis internal function adds linking constraints between λ multipliers corresponding to multilinear terms\nthat share more than two variables and are partitioned. For example, suppose we have λ[i], λ[j], and\nλ[k] where i=(1,2,3), j=(1,2,4), and k=(1,2,5). λ[i] contains all multipliers for the extreme points\nin the space of (x1,x2,x3). λ[j] contains all multipliers for the extreme points in the space of (x1,x2,x4).\nλ[k] contains all multipliers for the extreme points in the space of (x1,x2,x5).\n\nUsing λ[i], λ[j], or λ[k], we can express multilinear function x1*x2.\nWe define a linking variable μ(1,2) that represents the value of x1*x2.\nLinking constraints are\n    μ(1,2) == convex combination expr for x1*x2 using λ[i],\n    μ(1,2) == convex combination expr for x1*x2 using λ[j], and\n    μ(1,2) == convex combination expr for x1*x2 using λ[k].\n\nThus, these constraints link between λ[i], λ[j], and λ[k] variables.\n\nReference: J. Kim, J.P. Richard, M. Tawarmalani, Piecewise Polyhedral Relaxations of Multilinear Optimization,\nhttp://www.optimization-online.org/DB_HTML/2022/07/8974.html\n\"\"\"\nfunction _add_multilinear_linking_constraints(m::Optimizer, λ::Dict)\n    if isnothing(m.linking_constraints_info)\n        m.linking_constraints_info = _get_shared_multilinear_terms_info(\n            λ,\n            m.options.linking_constraints_degree_limit,\n        )\n    end\n\n    if isnothing(m.linking_constraints_info)\n        return\n    end\n\n    # Additional linking variables (μ) to the MIP model to keep the constraints sparse\n    linking_variables =\n        JuMP.@variable(m.model_mip, [i in keys(m.linking_constraints_info)])\n\n    # Add linking constraints to the MIP model\n    for (shared_multilinear_idx, multilinear_terms_idx) in m.linking_constraints_info,\n        (i, multilinear_idx) in enumerate(multilinear_terms_idx)\n\n        var_location = [findfirst(multilinear_idx .== i) for i in shared_multilinear_idx]\n\n        lambda_expr = JuMP.AffExpr()\n        for idx in Iterators.product([1:d for d in λ[multilinear_idx][:dim]]...)\n            var = λ[multilinear_idx][:vars][λ[multilinear_idx][:indices][idx...]]\n            partitions_info = prod(\n                m.discretization[i][idx[j]] for\n                (i, j) in zip(shared_multilinear_idx, var_location)\n            )\n            JuMP.add_to_expression!(lambda_expr, partitions_info, var)\n        end\n\n        JuMP.@constraint(\n            m.model_mip,\n            linking_variables[shared_multilinear_idx] == lambda_expr\n        )\n    end\nend\n\n\"\"\"\n    _get_shared_multilinear_terms_info(λ, linking_constraints_degree_limit)\n\nThis function checks to see if linking constraints are\nnecessary for a given vector of each multilinear terms and returns the approapriate\nlinking constraints information.\n\"\"\"\nfunction _get_shared_multilinear_terms_info(\n    λ::Dict,\n    linking_constraints_degree_limit::Union{Nothing,T} where {T<:Int64} = nothing,\n)\n\n    # Compute maximum degree of multilinear terms and return if bilinear\n    max_degree = maximum([length(k) for k in keys(λ)])\n\n    if max_degree <= 2\n        return (linking_constraints_info = nothing)\n    end\n\n    # Limit the linking constraints to a prescribed multilinear degree\n    if !isnothing(linking_constraints_degree_limit) &&\n       (linking_constraints_degree_limit < max_degree)\n        max_degree = linking_constraints_degree_limit\n    end\n\n    # Collect all variable indices appearing in multilinear terms\n    all_variables_idx = collect(union((keys(λ) |> collect)...)) |> sort\n\n    linking_constraints_info = Dict(\n        shared_multilinear_idx =>\n            filter(r -> issubset(shared_multilinear_idx, r), keys(λ)) for\n        deg in 2:(max_degree-1) for\n        shared_multilinear_idx in Combinatorics.combinations(all_variables_idx, deg)\n    )\n\n    filter!(r -> length(r.second) >= 2, linking_constraints_info)\n    if isempty(linking_constraints_info)\n        return (linking_constraints_info = nothing)\n    end\n\n    return (linking_constraints_info = linking_constraints_info)\nend\n"
  },
  {
    "path": "src/nlexpr.jl",
    "content": "\"\"\"\nprocess_expr(expr; kwargs...)\n\nHigh-level wrapper for processing expression with sub-tree operators\n\"\"\"\nfunction process_expr(m::Optimizer)\n    expr_initialization(m)      # S0 : initialize the space for parsing and analyzing\n    expr_preprocess(m)          # S1 : pre-process the negative sign in expressions\n    expr_parsing(m)             # S2 : parsing the expressions for nonlinear information\n    expr_conversion(m)          # S3 : convert lifted(linear) expressions into affine function\n    expr_finalized(m)           # S4 : finalize process by extracting some measurements\n\n    return\nend\n\n\"\"\"\nSTEP 1: initialize the expression/ space\n\"\"\"\nfunction expr_initialization(m::Optimizer)\n\n    # 0 : deepcopy data into mip lifted expr place holders\n    m.bounding_obj_expr_mip = deepcopy(m.obj_expr_orig)\n    m.bounding_obj_mip = Dict()\n\n    for i in 1:m.num_constr_orig\n        push!(m.bounding_constr_expr_mip, deepcopy(m.constr_expr_orig[i]))\n        push!(m.bounding_constr_mip, Dict())\n    end\n\n    return\nend\n\n\"\"\"\nSTEP 2: preprocess expression for trivial sub-trees and nasty pieces for easier later process\n\"\"\"\nfunction expr_preprocess(m::Optimizer)\n    expr_resolve_const(m.bounding_obj_expr_mip)\n    expr_resolve_sign(m.bounding_obj_expr_mip)\n    expr_flatten(m.bounding_obj_expr_mip)\n    for i in 1:m.num_constr_orig\n        expr_resolve_const(m.bounding_constr_expr_mip[i])\n        expr_resolve_sign(m.bounding_constr_expr_mip[i])\n        expr_flatten(m.bounding_constr_expr_mip[i].args[2])\n    end\n\n    return\nend\n\n\"\"\"\nSTEP 3: parse expression for patterns on either the generic level or term level\n\"\"\"\nfunction expr_parsing(m::Optimizer)\n\n    # Throw an error if the objective expression has fractional exponents\n    expr_is_fractional_exponent(m.bounding_obj_expr_mip)\n    is_structural = expr_constr_parsing(m.bounding_obj_expr_mip, m)\n\n    if !is_structural\n        m.bounding_obj_expr_mip = expr_term_parsing(m.bounding_obj_expr_mip, 0, m)\n        m.obj_structure = :generic_linear\n    end\n    (get_option(m, :log_level) > 199) && println(\"[OBJ] $(m.obj_expr_orig)\")\n\n    for i in 1:m.num_constr_orig\n        expr = m.bounding_constr_expr_mip[i]\n\n        # Throw an error if the constraint expression has fractional exponents\n        if expr.args[1] in [:(<=), :(>=), :(==)]\n            expr_is_fractional_exponent(expr.args[2])\n        end\n\n        is_structural = expr_constr_parsing(expr, m, i)\n        if !is_structural\n            m.bounding_constr_expr_mip[i] = expr_term_parsing(expr, i, m)\n            m.constr_structure[i] = :generic_linear\n        end\n        (get_option(m, :log_level) > 199) && println(\"[CONSTR] $(m.constr_expr_orig[i])\")\n    end\n\n    return\nend\n\n\"\"\"\nSTEP 4: convert the parsed expressions into affine-based function that can be used for adding JuMP constraints\n\"\"\"\nfunction expr_conversion(m::Optimizer)\n    if m.obj_structure == :generic_linear\n        m.bounding_obj_mip = expr_linear_to_affine(m.bounding_obj_expr_mip)\n        m.obj_structure = :affine\n    end\n    get_option(m, :log_level) > 199 && println(\"type :: \", m.obj_structure)\n    get_option(m, :log_level) > 199 && println(\"lifted ::\", m.bounding_obj_expr_mip)\n    get_option(m, :log_level) > 199 && println(\"coeffs ::\", m.bounding_obj_mip[:coefs])\n    get_option(m, :log_level) > 199 && println(\"vars ::\", m.bounding_obj_mip[:vars])\n    get_option(m, :log_level) > 199 && println(\"sense ::\", m.bounding_obj_mip[:sense])\n    get_option(m, :log_level) > 199 && println(\"rhs ::\", m.bounding_obj_mip[:rhs])\n    get_option(m, :log_level) > 199 && println(\"----------------\")\n\n    for i in 1:m.num_constr_orig\n        if m.constr_structure[i] == :generic_linear\n            m.bounding_constr_mip[i] =\n                expr_linear_to_affine(m.bounding_constr_expr_mip[i])\n            m.constr_structure[i] = :affine\n        end\n        get_option(m, :log_level) > 199 && println(\"type :: \", m.constr_structure[i])\n        get_option(m, :log_level) > 199 &&\n            println(\"lifted ::\", m.bounding_constr_expr_mip[i])\n        get_option(m, :log_level) > 199 &&\n            println(\"coeffs ::\", m.bounding_constr_mip[i][:coefs])\n        get_option(m, :log_level) > 199 &&\n            println(\"vars ::\", m.bounding_constr_mip[i][:vars])\n        get_option(m, :log_level) > 199 &&\n            println(\"sense ::\", m.bounding_constr_mip[i][:sense])\n        get_option(m, :log_level) > 199 &&\n            println(\"rhs ::\", m.bounding_constr_mip[i][:rhs])\n        get_option(m, :log_level) > 199 && println(\"----------------\")\n    end\n\n    return\nend\n\n\"\"\"\nSTEP 5: collect information as needed for handy operations in the algorithm section\n\"\"\"\nfunction expr_finalized(m::Optimizer)\n    collect_nonconvex_vars(m)\n    m.candidate_disc_vars = sort(m.candidate_disc_vars)\n    m.num_var_linear_mip = length(m.linear_terms)\n    m.num_var_nonlinear_mip = length(m.nonconvex_terms)\n    m.num_constr_convex = length([i for i in m.constr_structure if i == :convex])\n\n    return m\nend\n\nfunction collect_nonconvex_vars(m::Optimizer)\n\n    # Walk through all nonconvex terms\n    for i in keys(m.nonconvex_terms)\n        m.nonconvex_terms[i][:discvar_collector](m, i)\n    end\n\n    # TODO : reconsider how to structure this\n    # NOTE : Walk through all integer variables that didn't appear in any nonconvex terms\n    for i in 1:m.num_var_orig\n        if !(i in m.candidate_disc_vars) && m.var_type[i] == :Int\n            push!(m.candidate_disc_vars, i)\n        end\n    end\n\n    return\nend\n\nfunction isa_variable_index(expr::Expr)\n    return length(expr.args == 2) && expr.args[2] == :(MathOptInterface.VariableIndex)\nend\nget_index(expr::Expr) = expr.args[2]\n\nfunction expr_strip_const(expr, subs = [], rhs = 0.0)\n    exhaust_const = [\n        !(expr.args[1] in [:+, :-]) ||\n        !(isa(expr.args[i], Float64) || isa(expr.args[i], Int)) for\n        i in 2:length(expr.args)\n    ]\n    if prod(exhaust_const)\n        push!(subs, expr)\n        return subs, rhs\n    end\n\n    for i in 2:length(expr.args)\n        if (\n            isa(expr.args[i], Float64) ||\n            isa(expr.args[i], Int) ||\n            isa(expr.args[i], Symbol)\n        )\n            (expr.args[1] == :+) && (rhs -= expr.args[i])\n            (expr.args[1] == :-) && ((i == 2) ? rhs -= expr.args[i] : rhs += expr.args[i])\n        elseif expr.args[i].head == :ref\n            continue\n        elseif expr.args[i].head == :call\n            subs, rhs = expr_strip_const(expr.args[i], subs, rhs)\n        end\n    end\n\n    return subs, rhs\nend\n\n\"\"\"\nThis utility function builds a constraint reference by repeating one\noperator with a vector variable references.\nFor example,\ninput => y, x[1,2,3], :+\noutput => (y = x[1] + x[2] + x[3])::Expr\n\"\"\"\nfunction build_constr_block(y_idx::Int, var_idxs::Vector, operator::Symbol)\n    expr_l_block = Expr(:call, :(==), Meta.parse(\"x[$(y_idx)]\"))\n    expr_r_block = Expr(:call, operator)\n    for j in 1:length(var_idxs)\n        push!(expr_r_block.args, Meta.parse(\"x[$(var_idxs[j])]\"))\n    end\n    push!(expr_l_block.args, expr_r_block)\n\n    return expr_l_block\nend\n\n\"\"\"\nexpr_constr_parsing(expr, m::Optimizer)\n\nRecognize structural constraints.\n\"\"\"\nfunction expr_constr_parsing(expr::Expr, m::Optimizer, idx::Int = 0)\n\n    # First process user-defined structures in-cases of over-ride\n    # for i in 1:length(get_option(m, :constr_patterns))\n    #    is_structural = get_option(m, :constr_patterns)[i](expr, m, idx)\n    #    return\n    # end\n\n    isa(expr, Number) && return false\n    # Recognize built-in special structural pattern\n    if get_option(m, :recognize_convex)\n        is_convex = resolve_convex_constr(expr, m, idx)\n        is_convex && return true\n    end\n\n    # More structural patterns go here\n    return false\nend\n\nfunction expr_is_axn(expr, scalar = 1.0, var_idxs = [], power = []; N = nothing)\n    expr.args[1] in [:*, :^] || return nothing, nothing, nothing         # Limited Area\n\n    if expr.args[1] == :*\n        for i in 2:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                scalar *= expr.args[i]\n            elseif (expr.args[i].head == :ref)\n                @assert isa(expr.args[i].args[2], Int)\n                push!(var_idxs, expr.args[i])\n                push!(power, 1)\n            elseif (expr.args[i].head == :call)\n                scalar, var_idxs, power =\n                    expr_is_axn(expr.args[i], scalar, var_idxs, power)\n                scalar === nothing && return nothing, nothing, nothing\n            end\n        end\n    elseif expr.args[1] == :^\n        for i in 2:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                push!(power, expr.args[i])\n                continue\n            elseif (expr.args[i].head == :ref)\n                push!(var_idxs, expr.args[i])\n                continue\n            elseif (expr.args[i].head == :call)\n                return nothing, nothing, nothing\n            end\n        end\n    end\n\n    # If the user wants a specific N\n    !(N === nothing) && !(length(var_idxs) == N) && return nothing, nothing, nothing\n    (var_idxs === nothing) &&\n        (scalar === nothing) &&\n        (power === nothing) &&\n        return nothing, nothing, nothing # Unrecognized sub-structure\n\n    @assert length(var_idxs) == length(power)\n    return scalar, var_idxs, power\nend\n\n\"\"\"\nThis function takes a constraint/objective expression and converts it into a affine expression data structure\nUse the function to traverse linear expressions traverse_expr_linear_to_affine()\n\"\"\"\nfunction expr_linear_to_affine(expr)\n\n    # The input should follow :(<=, LHS, RHS)\n    affdict = Dict()\n    isa(expr, Number) && return affdict\n\n    if expr.args[1] in [:(==), :(>=), :(<=)] # For a constraint expression\n        @assert isa(expr.args[3], Float64) || isa(expr.args[3], Int)\n        @assert isa(expr.args[2], Expr)\n        # non are buffer spaces, not used anywhere\n        lhscoeff, lhsvars, rhs, non, non = traverse_expr_linear_to_affine(expr.args[2])\n        rhs = -rhs + expr.args[3]\n        affdict[:sense] = expr.args[1]\n\n    elseif expr.head == :ref  # For single variable objective expression\n        lhscoeff = [1.0]\n        lhsvars = [expr]\n        rhs = 0\n        affdict[:sense] = nothing\n\n    else # For an objective expression\n        lhscoeff, lhsvars, rhs, non, non = traverse_expr_linear_to_affine(expr)\n        affdict[:sense] = nothing\n    end\n\n    affdict[:coefs] = lhscoeff\n    affdict[:vars] = lhsvars\n    affdict[:rhs] = rhs\n    @assert length(affdict[:coefs]) == length(affdict[:vars])\n    affdict[:cnt] = length(affdict[:coefs])\n\n    return affdict\nend\n\n\"\"\"\n\ntraverse_expr_linear_to_affine(expr, lhscoeffs=[], lhsvars=[], rhs=0.0, bufferVal=0.0, bufferVar=nothing, sign=1.0, level=0)\n\nThis function traverses the left hand side tree to collect affine terms.\nUpdated status : possible to handle (x-(x+y(t-z))) cases where signs are handled properly\n\"\"\"\nfunction traverse_expr_linear_to_affine(\n    expr,\n    lhscoeffs = [],\n    lhsvars = [],\n    rhs = 0.0,\n    bufferVal = nothing,\n    bufferVar = nothing,\n    sign = 1.0,\n    coef = 1.0,\n    level = 0,\n)\n\n    # reversor = Dict(true => -1.0, false => 1.0)\n    function sign_convertor(subexpr, pos)\n        if length(subexpr.args) == 2 && subexpr.args[1] == :-\n            return -1.0\n        elseif length(subexpr.args) > 2 && subexpr.args[1] == :- && pos > 2\n            return -1.0\n        end\n        return 1.0\n    end\n\n    if isa(expr, Number) # Capture any coefficients or right hand side\n        (bufferVal !== nothing) ? bufferVal *= expr : bufferVal = expr * coef\n        return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar\n    elseif expr in [:+, :-]    # TODO: what is this condition?\n        if bufferVal !== nothing && bufferVar !== nothing\n            push!(lhscoeffs, bufferVal)\n            push!(lhsvars, bufferVar)\n            bufferVal = 0.0\n            bufferVar = nothing\n        end\n        return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar\n    elseif expr in [:*]\n        return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar\n    elseif expr in [:(<=), :(==), :(>=)]\n        return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar\n    elseif expr.head == :ref\n        bufferVar = expr\n        return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar\n    end\n\n    # PATCH : Special Structure Recognition\n    start_pos = 1\n    if (expr.args[1] == :*) && (length(expr.args) == 3)\n        if (isa(expr.args[2], Float64) || isa(expr.args[2], Int)) &&\n           (expr.args[3].head == :call)\n            (coef != 0.0) ? coef = expr.args[2] * coef : coef = expr.args[2]# Patch\n            # coef = expr.args[2]\n            start_pos = 3\n            # @warn \"Special expression structure detected [*, coef, :call, ...]. Currently using a beta fix...\"\n        end\n    end\n\n    for i in start_pos:length(expr.args)\n        lhscoeff, lhsvars, rhs, bufferVal, bufferVar = traverse_expr_linear_to_affine(\n            expr.args[i],\n            lhscoeffs,\n            lhsvars,\n            rhs,\n            bufferVal,\n            bufferVar,\n            sign * sign_convertor(expr, i),\n            coef,\n            level + 1,\n        )\n        if expr.args[1] in [:+, :-]  # Term segmentation [:-, :+], see this and wrap-up the current (linear) term\n            if bufferVal !== nothing && bufferVar !== nothing  # (sign) * (coef) * (var) => linear term\n                push!(lhscoeffs, sign * sign_convertor(expr, i) * bufferVal)\n                push!(lhsvars, bufferVar)\n                bufferVal = nothing\n                bufferVar = nothing\n            end\n            if bufferVal !== nothing && bufferVar === nothing  # (sign) * (coef) => right-hand-side term\n                rhs += sign * sign_convertor(expr, i) * bufferVal\n                bufferVal = nothing\n            end\n            if bufferVal === nothing && bufferVar !== nothing && expr.args[1] == :+\n                push!(lhscoeffs, sign * 1.0 * coef)\n                push!(lhsvars, bufferVar)\n                bufferVar = nothing\n            end\n            if bufferVal === nothing && bufferVar !== nothing && expr.args[1] == :-\n                push!(lhscoeffs, sign * sign_convertor(expr, i) * coef)\n                push!(lhsvars, bufferVar)\n                bufferVar = nothing\n            end\n        elseif expr.args[1] in [:(<=), :(==), :(>=)]\n            rhs = expr.args[end]\n        end\n    end\n\n    if level == 0\n        if bufferVal !== nothing && bufferVar !== nothing\n            push!(lhscoeffs, bufferVal)\n            push!(lhsvars, bufferVar)\n            bufferVal = nothing\n            bufferVar = nothing\n        end\n    end\n\n    return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar\nend\n\n\"\"\"\nThis function is treats the sign in expression trees by cleaning the following structure:\nargs\n::+ || ::-\n::Call || ::ref\nBy separating the structure with some dummy treatments\n\"\"\"\nfunction expr_resolve_sign(expr::Expr, level = 0; kwargs...)\n    for (i, arg) in enumerate(expr.args)\n        if !(arg isa Expr)\n            continue  # Skip the coefficients\n        elseif arg.head == :call && length(arg.args) == 2\n            if arg.args[1] == :- # Treatment for :(-x), replace with :(x*-1)\n                if expr.args[1] == :* # Only perform the treatment when connected with *\n                    push!(expr.args, -1)\n                    expr.args[i] = arg.args[2]\n                elseif !(expr.args[1] in (:+, :-, :(==), :(<=), :(>=)))\n                    error(\"Unexpected operator $(arg) during resolving sign\")\n                end\n            elseif arg.args[1] == :+ # Treatment for :(+x) replace with :x\n                expr.args[i] = arg.args[2]\n            end\n        elseif arg.head == :call\n            expr_resolve_sign(arg, level + 1)\n        end\n    end\n    return\nend\n\nexpr_resolve_sign(expr, level = 0; kwargs...) = nothing\n\n\"\"\"\nRecursively pre-process the expression by treating the coefficients\nTODO: this function requires a lot of refining.\nMost issues can be caused by this function.\n\"\"\"\nfunction expr_flatten(expr::Expr, level = 0; kwargs...)\n    if level > 0  # No trivial constraint is allowed \"3>5\"\n        flat = expr_arrangeargs(expr.args)\n        if isa(flat, Number)\n            return flat\n        else\n            expr.args = flat\n        end\n    end\n    for i in 2:length(expr.args)\n        if isa(expr.args[i], Expr) && expr.args[i].head == :call\n            expr.args[i] = expr_flatten(expr.args[i], level + 1)\n        end\n    end\n    if level > 0  #Root level process, no additional processes\n        expr.args = expr_arrangeargs(expr.args)\n    end\n    return expr\nend\n\nexpr_flatten(expr, level = 0; kwargs...) = nothing\n\n\"\"\"\nRe-arrange children by their type.\nOnly consider 3 types: coefficients(Int64, Float64), :ref, :calls\nSequence arrangement is dependent on operator\n\"\"\"\nfunction expr_arrangeargs(args::Array; kwargs...)\n    # A mapping used for operator treatments\n    reverter = Dict(true => :-, false => :+)\n    operator_coefficient_base =\n        Dict{Symbol,Float64}(:+ => 0.0, :- => 0.0, :/ => 1.0, :* => 1.0, :^ => 1.0)\n\n    # Treatment => Flatten pure number sub-tree\n    allFloats = [i for i in 2:length(args) if isa(args[i], Float64)]\n    if length(allFloats) == length(args) - 1\n        val = args[2]\n        for i in 3:length(args)\n            val = eval(args[1])(val, args[i])\n        end\n        return val\n    end\n\n    if args[1] in [:^]\n        return args\n    elseif args[1] in [:/]\n        # error(\"Alpine does not currently support `$(args[1])` operator\")\n        if (typeof(args[3]) == Float64) || (typeof(args[3]) == Int64)\n            args = expr_resolve_const_denominator(args)\n        else\n            error(\n                \"Alpine does not currently support `$(args[1])` operator with a variable in the denominator\",\n            )\n        end\n    elseif args[1] in [:*, :+, :-]\n        # Such generic operators can be handled\n    else\n        error(\n            \"Alpine does not currently support `$(args[1])` operator acting on a variable\",\n        )\n    end\n\n    if args[1] in [:*, :+, :-]\n        val = operator_coefficient_base[args[1]] # initialize\n        exprs = []\n        refs = []\n\n        valinit = false  # what is first children : needs consideration with :(-)\n        refinit = false\n        callinit = false\n\n        for i in 2:length(args)\n            if isa(args[i], Float64) || isa(args[i], Int)\n                valinit += (i == 2)\n                val = eval(args[1])(val, eval(reverter[(i==2)&&(args[1]==:-)])(args[i])) # Revert the first sigh if (-)\n            elseif typeof(args[i]) == Expr\n                if args[i].head == :ref\n                    refinit += (i == 2)\n                    push!(refs, args[i])\n                elseif args[i].head == :call\n                    callinit += (i == 2)\n                    push!(exprs, args[i])\n                else\n                    error(\"Unkown expression head\")\n                end\n            else\n                error(\"Unkown argument type\")\n            end\n        end\n\n        # Treatment for 0.0 coefficients\n        if val == operator_coefficient_base[args[1]] && val == 0.0\n            val = []\n        end\n\n        # Re-arrange children :: without actually doing anything on them\n        if args[1] in [:*]\n            return [args[1]; val; refs; exprs]\n        elseif args[1] in [:+, :-]\n            if Bool(valinit)\n                return [args[1]; val; refs; exprs]\n            elseif Bool(refinit)\n                return [args[1]; refs; val; exprs]\n            elseif Bool(callinit)\n                return [args[1]; exprs; refs; val]\n            else\n                error(\"Unexpected condition encountered...\")\n            end\n        end\n    else\n        error(\"Unsupported expression arguments $args\")\n    end\n\n    return\nend\n\n\"\"\"\nCheck if it is a sample of `+()`\n\"\"\"\nexpr_is_emptysum(expr) = expr == :(+())\n\n\"\"\"\nCheck if a sub-tree is a constant or not\n\"\"\"\nfunction expr_resolve_const(expr)\n    isa(expr, Number) && return\n    for i in 1:length(expr.args)\n        if isa(expr.args[i], Number) || isa(expr.args[i], Symbol)\n            continue\n        elseif expr.args[i].head == :call\n            if expr_is_emptysum(expr.args[i])\n                expr.args[i] = :(0)\n            end\n            (expr_isconst(expr.args[i])) && (expr.args[i] = eval(expr.args[i]))\n            if isa(expr.args[i], Number) || isa(expr.args[i], Symbol)\n                continue\n            else\n                expr_resolve_const(expr.args[i])\n            end\n        end\n    end\n\n    return\nend\n\n\"\"\"\nIf the expression's fraction has a constant denominator, then replace the expression as product of a constant and the expression\n\"\"\"\nfunction expr_resolve_const_denominator(args)\n    @assert args[1] == :/\n    @assert length(args) == 3\n    resolvable = true\n\n    for i in 3:length(args)\n        resolvable *= expr_isconst(args[i])\n    end\n\n    if resolvable\n        for i in 3:length(args)\n            args[i] = 1 / eval(args[i])\n        end\n        args[1] = :*\n    end\n\n    return args\nend\n\n\"\"\"\nCheck if a sub-tree(:call) is totally composed of constant values\n\"\"\"\nfunction expr_isconst(expr)\n    (isa(expr, Number) || isa(expr, Symbol)) && return true\n\n    (expr.head == :ref) && return false\n    const_tree = true\n    for i in 1:length(expr.args)\n        if isa(expr.args[i], Number) || isa(expr.args[i], Symbol)\n            continue\n        elseif expr.args[i].head == :call\n            const_tree *= expr_isconst(expr.args[i])\n        elseif expr.args[i].head == :ref\n            return false\n        end\n    end\n\n    return const_tree\nend\n\n\"\"\"\nCheck if a sub-tree(:call) is contains any non-integer exponent values\n\"\"\"\nfunction expr_is_fractional_exponent(expr)\n    if expr.head == :call\n        if length(expr.args) == 3 && expr.args[1] == :^\n            if !(isinteger(expr.args[3])) || !(expr.args[3] >= 0)\n                error(\n                    \"Alpine currently supports `^` operator in constraints and/or objective with only positive integer exponents\",\n                )\n            end\n        end\n        for i in 1:length(expr.args)\n            if typeof(expr.args[i]) == Expr\n                expr_is_fractional_exponent(expr.args[i]) # Recursively search for fractional exponents\n            end\n        end\n    end\nend\n\n# Returns true if the expression is a constant, linear or affine\nfunction expr_isaffine(expr)\n    expr_isconst(expr) && return true\n    expr.head == :ref && return true\n\n    is_affine = false\n    if expr.head == :call\n        k = 0\n        for i in 1:length(expr.args)\n            if isa(expr.args[i], Number)\n                k += 1\n                continue\n            end\n            if isa(expr.args[i], Symbol)\n                (expr.args[i] in [:+, :-]) && (k += 1)\n                continue\n            end\n            if expr.args[i].head == :ref\n                k += 1\n            elseif expr.args[i].head == :call\n                status = expr_isaffine(expr.args[i])\n                status && (k += 1)\n            end\n        end\n        (k == length(expr.args)) && (is_affine = true)\n    end\n    return is_affine\nend\n\n\"\"\"\nConverts ((a_1*x[1])^2 + (a_2*x[2])^2 + ... + (a_n*x[n])^2) to (a_1^2*x[1]^2 + a_2^2*x[2]^2 + ... + a_n^2*x[n]^2)\nSigns in the summation can be +/-\nNote: This function does not support terms of type (a*(x[1] + x[2]))^2 yet.\n\"\"\"\nfunction expr_isolate_const(expr)\n    expr_isaffine(expr) && return expr\n\n    # Check nonlinear expressions\n    if (expr.head == :call && expr.args[1] in [:+, :-])\n        expr_array = Any[]\n        for i in 2:length(expr.args)\n            ind = 0\n\n            # Handle negative sign in the first term\n            if (!isa(expr.args[i], Number)) &&\n               (expr.args[i].args[1] == :-) &&\n               (length(expr.args[i].args) == 2)\n                expr_i = expr.args[i].args[2]\n                ind = 1\n            else\n                expr_i = expr.args[i]\n            end\n\n            # Handle constant and linear terms\n            if (isa(expr_i, Number)) || (expr_i.head == :ref)\n                if ((expr.args[1] == :-) && (i > 2)) || (ind == 1)\n                    push!(expr_array, :(-$(expr_i)))\n                else\n                    push!(expr_array, :($(expr_i)))\n                end\n\n                # Handle nonlinear terms with coefficients within the exponent\n            elseif (\n                expr.args[i].head == :call &&\n                expr_i.args[1] == :^ &&\n                expr_i.args[2].head == :call &&\n                isa(expr_i.args[2].args[2], Number) &&\n                isa(expr_i.args[3], Number)\n            )\n                expr_tmp = Expr(:call, :^, expr_i.args[2].args[3], expr_i.args[3])\n                if ((expr.args[1] == :-) && (i > 2)) || (ind == 1)\n                    push!(\n                        expr_array,\n                        Expr(:call, :*, -expr_i.args[2].args[2]^expr_i.args[3], expr_tmp),\n                    )\n                else\n                    push!(\n                        expr_array,\n                        Expr(:call, :*, expr_i.args[2].args[2]^expr_i.args[3], expr_tmp),\n                    )\n                end\n\n                # Handle no-coefficients case\n            elseif expr_i.args[1] == :^ && expr_i.args[2].head == :ref\n                if (expr.args[1] == :- && (i > 2)) || (ind == 1)\n                    push!(expr_array, Expr(:call, :*, -1, expr_i))\n                else\n                    push!(expr_array, expr_i)\n                end\n\n                # Handle coefficients which are not part of the exponent\n            elseif expr_i.args[1] == :* && isa(expr_i.args[2], Number)\n                if ((expr.args[1] == :-) && (i > 2)) || (ind == 1)\n                    #push!(expr_array, Expr(:call, :*, -expr_i.args[2], expr_i.args[3]))\n                    push!(expr_array, Expr(:call, :*, -1, expr_i))\n                else\n                    push!(expr_array, expr_i)\n                end\n\n                # Handle negative sign in the remaining terms\n            elseif (expr_i.args[1] in [:+, :-]) && (length(expr.args[i].args) > 2)\n                expr_rec = expr_isolate_const(expr_i) #recursion\n                push!(expr_array, expr_rec)\n\n                # For any other terms\n            else\n                if (expr.args[1] == :- && (i > 2)) || (ind == 1)\n                    push!(expr_array, Expr(:call, :*, -1, expr_i))\n                else\n                    push!(expr_array, expr_i)\n                end\n            end\n        end\n\n        # Construct the expression from the array\n        if length(expr_array) == 1\n            return expr_array[1]\n        else\n            expr_n = Expr(:call, :+, expr_array[1], expr_array[2])\n            if length(expr_array) >= 3\n                for i in 3:length(expr_array)\n                    expr_n = Expr(:call, :+, expr_n, expr_array[i])\n                end\n            end\n            return (expr_n)\n        end\n\n    elseif (\n        expr.head == :call &&\n        expr.args[1] == :^ &&\n        expr.args[2].head == :call &&\n        isa(expr.args[2].args[2], Number) &&\n        isa(expr.args[3], Number)\n    )\n        expr_tmp = Expr(:call, :^, expr.args[2].args[3], expr.args[3])\n        return (Expr(:call, :*, expr.args[2].args[2]^expr.args[3], expr_tmp))\n    else\n        return expr\n    end\nend\n"
  },
  {
    "path": "src/operators.jl",
    "content": "\"\"\"\n    expr_term_parsing(expr, m::Optimizer, level=0)\n\nRecognize and process nonlinear terms in an expression\n\"\"\"\nfunction expr_term_parsing(expr::Any, constr_id::Int, m::Optimizer, level = 0; options...)\n    isa(expr, Number) && return expr\n    cnt = 0\n    for node in expr.args\n        cnt += 1\n        if isa(node, Float64) || isa(node, Int64) || isa(node, Symbol)\n            continue\n        elseif node.head == :call\n            expr.args[cnt] = expr_term_parsing(node, constr_id, m, level + 1)\n        elseif node.head == :ref\n            continue\n        else\n            error(\"Type issue during expression parsing. \")\n        end\n    end\n\n    return detect_nonconvex_terms(expr, constr_id, m)\nend\n\n\"\"\"\n    detect_nonconvex_terms(expr, m::Optimizer)\n\nThis function recognizes, stores, and replaces a sub-tree `expr` with available\nuser-defined/built-in structures patterns. The procedure creates the required number\nof lifted variables based on the patterns that it is trying to recognize.\nThen, it goes through all built-in structures and performs operatins to convexify the problem.\n\nSpecific structure pattern information will be described formally.\n\"\"\"\nfunction detect_nonconvex_terms(expr::Any, constr_id::Int, m::Optimizer; kwargs...)\n\n    # First process user-defined structures in-cases of over-ride\n    # for i in 1:length(get_option(m, :term_patterns))\n    #     skip, expr = get_option(m, :term_patterns)[i](expr, constr_id, m)\n    #     skip && return expr\n    # end\n\n    # NOTE :: Sequence of which term to detect matters here\n    #         More specific term should be detected first to reduce the size of relaxation\n    #         model. For example, power-2 or bilinear term should be detected before\n    #         general multilinear terms to apply better outter approxiamtion.\n\n    # LEVEL 1 : : Recognize all built-in structural patterns\n    skip, expr = detect_discretemulti_term(expr, constr_id, m)     #L1 : General case : discrete variables * continous variables\n    skip && return expr\n\n    skip, expr = detect_binprod_term(expr, constr_id, m)           #L1 : binprod = binary products\n    skip && return expr\n\n    # LEVEL 2 : : Recognize all built-in structural patterns\n    skip, expr = detect_bilinear_term(expr, constr_id, m)          #L2\n    skip && return expr\n\n    skip, expr = detect_monomial_term(expr, constr_id, m)          #L2 : must go before multilinear\n    skip && return expr\n\n    skip, expr = detect_multilinear_term(expr, constr_id, m)       #L2\n    skip && return expr\n\n    return expr # if no structure is detected, simply return the original tree\nend\n\nfunction store_nonconvex_term(\n    m::Optimizer,\n    nl_key::Any,\n    var_idxs::Any,\n    term_type::Symbol,\n    operator::Symbol,\n    evaluator::Function,\n    bd_resolver::Function,\n    discvar_collector::Function,\n)\n    l_cnt = length(keys(m.linear_terms))\n    nl_cnt = length(keys(m.nonconvex_terms))\n\n    y_idx = m.num_var_orig + nl_cnt + l_cnt + 1   # y is always lifted var\n    lifted_var_ref = Expr(:ref, :x, y_idx)\n    lifted_constr_ref = build_constr_block(y_idx, var_idxs, operator)\n\n    m.nonconvex_terms[nl_key] = Dict(\n        :lifted_var_ref => lifted_var_ref,\n        :id => nl_cnt + 1,\n        :y_idx => y_idx,\n        :y_type =>\n            resolve_lifted_var_type([m.var_type[k] for k in var_idxs], operator),\n        :var_idxs => var_idxs,\n        :ref => nl_key,\n        :evaluator => evaluator,\n        :lifted_constr_ref => lifted_constr_ref,\n        :constr_id => Set(),\n        :nonlinear_type => term_type,\n        :convexified => false,\n        :bound_resolver => bd_resolver,\n        :discvar_collector => discvar_collector,\n    )\n\n    m.term_seq[nl_cnt+l_cnt+1] = nl_key                              # Assistive information\n\n    # push!(m.var_type, :Cont)  # TODO check if this replacement is good since additional constraints should be able to sufficiently constraint the type\n    push!(m.var_type, m.nonconvex_terms[nl_key][:y_type])            # Keep track of the lifted var type\n    get_option(m, :log_level) > 199 &&\n        println(\"found lifted $(term_type) term $(lifted_constr_ref)\")\n    return y_idx\nend\n\nfunction store_linear_term(m::Optimizer, term_key::Any, expr::Any)#, bound_resolver::Function)\n    l_cnt = length(keys(m.linear_terms))\n    nl_cnt = length(keys(m.nonconvex_terms))\n\n    y_idx = m.num_var_orig + nl_cnt + l_cnt + 1\n\n    lifted_var_ref = Expr(:ref, :x, y_idx)\n    lifted_constr_ref = Expr(:call, :(==), lifted_var_ref, expr)\n\n    m.linear_terms[term_key] = Dict(\n        :lifted_var_ref => lifted_var_ref,\n        :id => length(keys(m.linear_terms)) + 1,\n        :ref => term_key,\n        :y_idx => y_idx,\n        :y_type => resolve_lifted_var_type(\n            [m.var_type[k[2]] for k in term_key[:coef_var]],\n            :+,\n        ),\n        :evaluator => linear,\n        :lifted_constr_ref => lifted_constr_ref,\n        :constr_id => Set(),\n        :bound_resolver => nothing,\n    )\n\n    m.term_seq[l_cnt+nl_cnt+1] = term_key\n    push!(m.var_type, m.linear_terms[term_key][:y_type]) # Keep track of the lifted var type\n    get_option(m, :log_level) > 199 &&\n        println(\"found lifted linear term $(lifted_var_ref) = $expr\")\n\n    return y_idx\nend\n\nfunction lift_nonconvex_term(m::Optimizer, nl_key, constr_id::Int, scalar = 1.0)\n    push!(m.nonconvex_terms[nl_key][:constr_id], constr_id)\n\n    if scalar == 1.0\n        return m.nonconvex_terms[nl_key][:lifted_var_ref]\n    else\n        return Expr(:call, :*, m.nonconvex_terms[nl_key][:lifted_var_ref], scalar)\n    end\nend\n\nfunction lift_linear_term(m::Optimizer, term_key, constr_id::Int)\n    push!(m.linear_terms[term_key][:constr_id], constr_id)\n    return m.linear_terms[term_key][:lifted_var_ref]\n\n    return\nend\n\nfunction detect_linear_term(expr::Any, constr_id::Int, m::Optimizer)\n    @assert (expr.head == :call || expr.head == :ref)\n    coef_fetch = Dict(:+ => 1.0, :- => -1.0)\n\n    # Re-process the expression sub-tree [REQUIRED]\n    expr_resolve_const(expr)\n    expr_resolve_sign(expr)\n    expr_flatten(expr)\n\n    if expr.args[1] in [:+, :-]\n        scalar = 0.0\n        coef_var = Set()\n        for i in 2:length(expr.args)  # TODO: Consider recursive operation\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                (i == 2) ? scalar = expr.args[i] :\n                scalar += coef_fetch[expr.args[1]] * expr.args[i]\n                continue\n            end\n            (isa(expr.args[i], Symbol)) && continue #should never happen\n            if (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int)\n                (i == 2) ? push!(coef_var, (1.0, expr.args[i].args[2])) :\n                push!(coef_var, (coef_fetch[expr.args[1]], expr.args[i].args[2]))\n                continue\n            end\n\n            # Specical Check\n            if expr.args[i].head == :call &&\n               expr.args[i].args[1] == :* &&\n               length(expr.args[i].args) == 3\n                sub_coef =\n                    [j for j in expr.args[i].args if (isa(j, Int) || isa(j, Float64))]\n                sub_vars = [\n                    j.args[2] for j in expr.args[i].args if\n                    ((:head in fieldnames(typeof(j))) && j.head == :ref)\n                ]\n                (isempty(sub_coef) || isempty(sub_vars)) && return false, expr\n                (length(sub_coef) != 1 || length(sub_vars) != 1) && return false, expr\n                (i == 2) ? push!(coef_var, (1.0 * sub_coef[1], sub_vars[1])) :\n                push!(coef_var, (coef_fetch[expr.args[1]] * sub_coef[1], sub_vars[1]))\n                continue\n            end\n\n            # General Check\n            if expr.args[i].head == :call &&\n               expr.args[i].args[1] in [:-, :+] &&\n               length(expr.args[i].args) == 2 # resolve -(2) or -(x) terms\n                expr.args[i].args[1] == :+ ? sub_coef = [1.0] : sub_coef = [-1.0]\n                sub_vars = [\n                    j.args[2] for j in expr.args[i].args if\n                    ((:head in fieldnames(typeof(j))) && j.head == :ref)\n                ]\n                isempty(sub_vars) && return false, expr\n                length(sub_vars) != 1 && return false, expr\n                (i == 2) ? push!(coef_var, (1.0 * sub_coef[1], sub_vars[1])) :\n                push!(coef_var, (coef_fetch[expr.args[1]] * sub_coef[1], sub_vars[1]))\n            else\n                down_check, linear_lift_var =\n                    detect_linear_term(expr.args[i], constr_id, m)  # Recursive detection\n                down_check ? expr.args[i] = linear_lift_var : return false, expr\n                push!(coef_var, (1.0, expr.args[i].args[2]))\n            end\n        end\n        # By reaching here, it is already certain that we have found the term, always treat with :+\n        term_key = Dict(:scalar => scalar, :coef_var => coef_var, :sign => :+)\n        term_key in keys(m.linear_terms) || store_linear_term(m, term_key, expr)\n        return true, lift_linear_term(m, term_key, constr_id)\n    elseif expr.args[1] in [:*] && length(expr.args) == 3\n        # For terms like (3*x)*y\n        scalar = 0.0\n        coef_var = Set()\n\n        sub_coef = [i for i in expr.args if (isa(i, Int) || isa(i, Float64))]\n        sub_vars = [\n            i.args[2] for\n            i in expr.args if ((:head in fieldnames(typeof(i))) && i.head == :ref)\n        ]\n        (isempty(sub_coef) || isempty(sub_vars)) && return false, expr\n        (length(sub_coef) != 1 || length(sub_vars) != 1) && return false, expr\n        push!(coef_var, (1.0 * sub_coef[1], sub_vars[1]))\n\n        # By reaching here, it is already certain that we have found the term, always treat with :+\n        term_key = Dict(:scalar => scalar, :coef_var => coef_var, :sign => :+)\n        term_key in keys(m.linear_terms) || store_linear_term(m, term_key, expr)\n        return true, lift_linear_term(m, term_key, constr_id)\n    end\n\n    return false, expr\nend\n\nfunction basic_linear_bounds(m::Optimizer, k::Any, linear_terms = nothing)\n    linear_terms === nothing ? linear_terms = m.linear_terms : linear_term = linear_terms\n\n    lifted_idx = linear_terms[k][:y_idx]\n    ub = 0.0\n    lb = 0.0\n    for j in linear_terms[k][:ref][:coef_var]\n        (j[1] > 0.0) ? ub += abs(j[1]) * m.u_var_tight[j[2]] :\n        ub -= abs(j[1]) * m.l_var_tight[j[2]]\n        (j[1] > 0.0) ? lb += abs(j[1]) * m.l_var_tight[j[2]] :\n        lb -= abs(j[1]) * m.u_var_tight[j[2]]\n    end\n    lb += linear_terms[k][:ref][:scalar]\n    ub += linear_terms[k][:ref][:scalar]\n    if lb > m.l_var_tight[lifted_idx] + get_option(m, :tol)\n        m.l_var_tight[lifted_idx] = lb\n    end\n    if ub < m.u_var_tight[lifted_idx] - get_option(m, :tol)\n        m.u_var_tight[lifted_idx] = ub\n    end\n\n    return\nend\n\nfunction basic_linear_bounds(m::Optimizer, k::Any, d::Dict)\n    lifted_idx = m.linear_terms[k][:y_idx]\n    ub = 0.0\n    lb = 0.0\n    for j in m.linear_terms[k][:ref][:coef_var]\n        (j[1] > 0.0) ? ub += abs(j[1]) * d[j[2]][end] : ub -= abs(j[1]) * d[j[2]][1]\n        (j[1] > 0.0) ? lb += abs(j[1]) * d[j[2]][1] : lb -= abs(j[1]) * d[j[2]][end]\n    end\n    lb += m.linear_terms[k][:ref][:scalar]\n    ub += m.linear_terms[k][:ref][:scalar]\n\n    if lb > d[lifted_idx][1] + get_option(m, :tol)\n        d[lifted_idx][1] = lb\n    end\n    if ub < d[lifted_idx][end] - get_option(m, :tol)\n        d[lifted_idx][end] = ub\n    end\n\n    return d\nend\n\n## Evaluators ##\nbpml(k, vec) = prod([vec[i] for i in k[:var_idxs]])\ndiscretemulti(k, vec) = prod([vec[i] for i in k[:var_idxs]])\nbinprod(k, vec) = prod([vec[i] for i in k[:var_idxs]])\nbinlin(k, vec) = prod([vec[i] for i in k[:var_idxs]])\nbilinear(k, vec) = prod([vec[i] for i in k[:var_idxs]])\nmultilinear(k, vec) = prod([vec[i] for i in k[:var_idxs]])\nmonomial(k, vec) = vec[k[:var_idxs][1]]^2\nfunction linear(k, vec)\n    return k[:ref][:scalar] .+ sum([i[1] * vec[i[2]] for i in k[:ref][:coef_var]])\nend\n\n\"\"\"\n    Recognize prodcuts of binary variables and multilinear products\n\n        General Case : x1 * x2 .. * xN * y1 * y2 .. * yM\n            where x are binary variables, y are continous variables\n\n    Leads to BINLIN terms, with BINPROD, INTPROD, INTLIN if necessary\n\"\"\"\nfunction detect_discretemulti_term(expr::Any, constr_id::Int, m::Optimizer)\n    # Always construct the binlin term after lifting\n    if !(expr.head == :call || expr.head == :ref)\n        return false, expr\n    end\n\n    if (expr.args[1] == :*)\n        # Pattern: coefficients * x * y * z ..., where x, y, z are all binary variables\n        var_idxs = []\n        var_types = []\n        scalar = 1.0\n        for i in 1:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                scalar *= expr.args[i]\n                continue\n            end\n            (isa(expr.args[i], Symbol)) && continue\n            (expr.args[i].head == :ref) &&\n                isa(expr.args[i].args[2], Int) &&\n                push!(var_idxs, expr.args[i].args[2])\n            (expr.args[i].head == :ref) &&\n                isa(expr.args[i].args[2], Int) &&\n                push!(var_types, m.var_type[expr.args[i].args[2]])\n            if (expr.args[i].head == :call)\n                down_check, linear_lift_var =\n                    detect_linear_term(expr.args[i], constr_id, m)\n                !down_check && return false, expr\n                push!(var_idxs, linear_lift_var.args[2])\n                push!(var_types, m.var_type[linear_lift_var.args[2]])\n                continue\n            end\n        end\n\n        # term_key = [Expr(:ref, :x, idx) for idx in var_idxs]\n\n        cont_var_idxs = [idx for idx in var_idxs if m.var_type[idx] == :Cont]\n        bin_var_idxs = [idx for idx in var_idxs if m.var_type[idx] == :Bin]\n        int_var_idxs = [idx for idx in var_idxs if m.var_type[idx] == :Int]\n\n        # Must carry at both discrete and continous variables\n        isempty(int_var_idxs) && isempty(bin_var_idxs) && return false, expr\n        isempty(cont_var_idxs) && return false, expr\n\n        # Lift clusters of continous variables multiplication if necessary\n        if length(cont_var_idxs) > 1\n            # ml_term_key = [Expr(:ref, :x, idx) for idx in cont_var_idxs]\n            ml_term_expr = Expr(:call, :*)\n            for idx in cont_var_idxs\n                push!(ml_term_expr.args, Expr(:ref, :x, idx))\n            end\n            ml_lift_term = detect_nonconvex_terms(ml_term_expr, constr_id, m)\n            ml_idx = ml_lift_term.args[2]\n        else\n            ml_idx = cont_var_idxs[1]\n        end\n\n        # Lift clusters of binary vars multiplication if necessary\n        if length(bin_var_idxs) > 1\n            bp_term_key = [Expr(:ref, :x, idx) for idx in bin_var_idxs]\n            bp_term_expr = Expr(:call, :*)\n            for idx in bin_var_idxs\n                push!(bp_term_expr.args, Expr(:ref, :x, idx))\n            end\n            bp_lift_term = detect_nonconvex_terms(bp_term_expr, constr_id, m)\n            bp_idx = bp_lift_term.args[2]\n        else\n            isempty(bin_var_idxs) ? bp_idx = -1 : bp_idx = bin_var_idxs[1]\n        end\n\n        # lift clusters of integer variables multiplication if necessary\n        if length(int_var_idxs) > 1\n            ip_term_key = [Expr(:ref, :x, idx) for idx in int_var_idxs]\n            ip_term_expr = Expr(:call, :*)\n            for idx in int_var_idxs\n                push!(ip_term_expr.args, Expr(:ref, :x, idx))\n            end\n            ip_lift_term = detect_nonconvex_terms(ip_term_expr, constr_id, m)\n            ip_idx = ip_lift_term.args[2]\n        else\n            isempty(int_var_idxs) ? ip_idx = -1 : ip_idx = int_var_idxs[1]\n        end\n\n        if ip_idx < 0 # binlin term if no integer variable\n            binlin_key = [Expr(:ref, :x, bp_idx), Expr(:ref, :x, ml_idx)]\n            binlin_idxs = [bp_idx; ml_idx]\n            binlin_key in keys(m.nonconvex_terms) || store_nonconvex_term(\n                m,\n                binlin_key,\n                binlin_idxs,\n                :BINLIN,\n                :*,\n                binlin,\n                basic_binlin_bounds,\n                collect_binlin_discvar,\n            )\n            return true, lift_nonconvex_term(m, binlin_key, constr_id, scalar)\n        end\n\n        # binlin_key = [Expr(:ref, :x, bp_idx), Expr(:ref, :x, intlin_idx)]\n        binlin_key = [Expr(:ref, :x, bp_idx)]\n        # binlin_idxs = [bp_idx; intlin_idx]\n        binlin_idxs = [bp_idx]\n        binlin_key in keys(m.nonconvex_terms) || store_nonconvex_term(\n            m,\n            binlin_key,\n            binlin_idxs,\n            :BINLIN,\n            :*,\n            binlin,\n            basic_binlin_bounds,\n            collect_binlin_discvar,\n        )\n        return true, lift_nonconvex_term(m, binlin_key, constr_id, scalar)\n    end\n\n    return false, expr\nend\n\nfunction basic_binlin_bounds(m::Optimizer, k::Any)\n    lifted_idx = m.nonconvex_terms[k][:y_idx]\n\n    prod_idxs = [i for i in m.nonconvex_terms[k][:var_idxs] if m.var_type[i] == :Cont]\n    @assert length(prod_idxs) == 1\n    lin_idx = prod_idxs[1]\n\n    if m.l_var_tight[lin_idx] > 0.0\n        m.l_var_tight[lifted_idx] = 0.0\n        m.u_var_tight[lifted_idx] = m.u_var_tight[lin_idx]\n    elseif m.u_var_tight[lin_idx] < 0.0\n        m.u_var_tight[lifted_idx] = 0.0\n        m.l_var_tight[lifted_idx] = m.l_var_tight[lin_idx]\n    else\n        m.u_var_tight[lifted_idx] = m.u_var_tight[lin_idx]\n        m.l_var_tight[lifted_idx] = m.l_var_tight[lin_idx]\n    end\n\n    return\nend\n\nfunction basic_binlin_bounds(m::Optimizer, k::Any, d::Dict)\n    lifted_idx = m.nonconvex_terms[k][:y_idx]\n\n    prod_idxs = [i for i in m.nonconvex_terms[k][:var_idxs] if m.var_type[i] == :Cont]\n    @assert length(prod_idxs) == 1\n    lin_idx = prod_idxs[1]\n\n    if d[lin_idx][1] > 0.0\n        d[lifted_idx][1] = 0.0\n        d[lifted_idx][end] = d[lin_idx][end]\n    elseif d[lin_idx][end] < 0.0\n        d[lifted_idx][end] = 0.0\n        d[lifted_idx][1] = d[lin_idx][1]\n    else\n        d[lifted_idx][end] = d[lin_idx][end]\n        d[lifted_idx][1] = d[lin_idx][1]\n    end\n\n    return d\nend\n\nfunction collect_binlin_discvar(m::Optimizer, k::Any; var_bowl = nothing)\n    # Exact linearization exists\n    return\nend\n\n\"\"\"\n    Recognize products of binary variables : x1 * x2 * .. * xN\n\"\"\"\nfunction detect_binprod_term(expr::Any, constr_id::Int, m::Optimizer)\n    @assert (expr.head == :call || expr.head == :ref)\n    if (expr.args[1] == :*)\n        # Pattern: coefficients * x * y * z ..., where x, y, z are all binary variables\n        var_idxs = []\n        scalar = 1.0\n        for i in 1:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                scalar *= expr.args[i]\n                continue\n            end\n            (isa(expr.args[i], Symbol)) && continue\n            (expr.args[i].head == :ref) &&\n                isa(expr.args[i].args[2], Int) &&\n                push!(var_idxs, expr.args[i].args[2])\n            !isempty(var_idxs) && m.var_type[var_idxs[end]] != :Bin && return false, expr\n            if (expr.args[i].head == :call)\n                down_check, linear_lift_var =\n                    detect_linear_term(expr.args[i], constr_id, m)\n                !down_check && return false, expr\n                m.var_type[linear_lift_var.args[2]] != :Bin && return false, expr\n                push!(var_idxs, linear_lift_var.args[2])\n                continue\n            end\n        end\n        if length(var_idxs) >= 2\n            term_key = [Expr(:ref, :x, idx) for idx in var_idxs]\n            term_key in keys(m.nonconvex_terms) || store_nonconvex_term(\n                m,\n                term_key,\n                var_idxs,\n                :BINPROD,\n                :*,\n                binprod,\n                basic_binprod_bounds,\n                collect_binprod_discvar,\n            )\n            return true, lift_nonconvex_term(m, term_key, constr_id, scalar)\n        end\n    elseif (expr.args[1] == :^) && length(expr.args) == 3\n        # Pattern: (x)^(>2), where x is binary variable\n        var_idxs = []\n        power_scalar = 0\n        scalar = 1.0\n        for i in 2:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                power_scalar += expr.args[i]\n                continue\n            end\n            (isa(expr.args[i], Symbol)) && continue\n            (expr.args[i].head == :ref) &&\n                isa(expr.args[i].args[2], Int) &&\n                push!(var_idxs, expr.args[i].args[2])\n            !isempty(var_idxs) && m.var_type[var_idxs[end]] != :Bin && return false, expr\n            if (expr.args[i].head == :call)\n                down_check, linear_lift_var =\n                    detect_linear_term(expr.args[i], constr_id, m)\n                !down_check && return false, expr\n                m.var_type[linear_lift_var.args[2]] != :Bin && return false, expr\n                push!(var_idxs, linear_lift_var.args[2])\n                continue\n            end\n        end\n        if length(var_idxs) == 1 && power_scalar > 2.0 && mod(power_scalar, 1.0) == 0.0\n            term_key = [Expr(:ref, :x, var_idxs[1]) for i in 1:power_scalar]\n            term_key in keys(m.nonconvex_terms) || store_nonconvex_term(\n                m,\n                term_key,\n                var_idxs,\n                :BINPROD,\n                :*,\n                binprod,\n                basic_binprod_bounds,\n                collect_binprod_discvar,\n            )\n            return true, lift_nonconvex_term(m, term_key, constr_id, scalar)\n        end\n    end\n\n    return false, expr\nend\n\nfunction basic_binprod_bounds(m::Optimizer, k::Any)\n    lifted_idx = m.nonconvex_terms[k][:lifted_var_ref].args[2]\n    m.l_var_tight[lifted_idx] = 0\n    m.u_var_tight[lifted_idx] = 1\n\n    return\nend\n\nfunction basic_binprod_bounds(m::Optimizer, k::Any, d::Dict)\n    lifted_idx = m.nonconvex_terms[k][:lifted_var_ref].args[2]\n    d[lifted_idx][1] = 0\n    d[lifted_idx][end] = 1\n\n    return d\nend\n\nfunction collect_binprod_discvar(m::Optimizer, k::Any; var_bowl = nothing)\n    # Exact linearization exists\n    return\nend\n\n\"\"\"\n    Future MONOMIAL Cluster\n    Recognize bilinear terms: x * y, where x and y are continous variables\n    Recognize multilinear terms: x1 * x2 * .. * xN, where all x_i ∀ i are continous variables\n    Recognize monomial terms: x^2 or x * x, where x is continuous\n\"\"\"\nfunction detect_bilinear_term(expr::Any, constr_id::Int, m::Optimizer)\n    @assert (expr.head == :call || expr.head == :ref)\n    if (expr.args[1] == :*)  # confirm head (:*)\n        # ----- Pattern : coefficient * x * y  ------ #\n        # Collect children information for checking\n        scalar = 1.0\n        var_idxs = []\n        for i in 2:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                scalar *= expr.args[i]\n                continue\n            end\n            (isa(expr.args[i], Symbol)) && continue\n            (expr.args[i].head == :ref) &&\n                isa(expr.args[i].args[2], Int) &&\n                push!(var_idxs, expr.args[i].args[2])\n            !isempty(var_idxs) &&\n                m.var_type[var_idxs[end]] in [:Bin, :Int] &&\n                return false, expr    # Don't consider the discrete variable\n            if (expr.args[i].head == :call)\n                down_check, linear_lift_var =\n                    detect_linear_term(expr.args[i], constr_id, m)\n                !down_check && return false, expr\n                push!(var_idxs, linear_lift_var.args[2])\n                m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr  # Don't consider the discrete variable\n                continue\n            end\n        end\n\n        # Confirm detection of patter A and perform store & lifting procedures\n        if (length(var_idxs) == 2) && length(Set(var_idxs)) == 2\n            term_key = [Expr(:ref, :x, var_idxs[1]), Expr(:ref, :x, var_idxs[2])]\n            if term_key in keys(m.nonconvex_terms) ||\n               reverse(term_key) in keys(m.nonconvex_terms)\n                term_key in keys(m.nonconvex_terms) ? term_key = term_key :\n                term_key = reverse(term_key)\n                return true, lift_nonconvex_term(m, term_key, constr_id, scalar)\n            else\n                store_nonconvex_term(\n                    m,\n                    term_key,\n                    var_idxs,\n                    :BILINEAR,\n                    :*,\n                    bilinear,\n                    basic_monomial_bounds,\n                    collect_monomial_discvar,\n                )\n                return true, lift_nonconvex_term(m, term_key, constr_id, scalar)\n            end\n        end\n    end\n\n    return false, expr\nend\n\nfunction detect_multilinear_term(expr::Any, constr_id::Int, m::Optimizer)\n    @assert (expr.head == :call || expr.head == :ref)\n    if (expr.args[1] == :*) # Pattern: coefficients * x * y * z ...\n        var_idxs = []\n        scalar = 1.0\n        for i in 1:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                scalar *= expr.args[i]\n                continue\n            end\n            (isa(expr.args[i], Symbol)) && continue\n            (expr.args[i].head == :ref) &&\n                isa(expr.args[i].args[2], Int) &&\n                push!(var_idxs, expr.args[i].args[2])\n            !isempty(var_idxs) &&\n                m.var_type[var_idxs[end]] in [:Bin, :Int] &&\n                return false, expr\n            if (expr.args[i].head == :call)\n                down_check, linear_lift_var =\n                    detect_linear_term(expr.args[i], constr_id, m)\n                !down_check && return false, expr\n                push!(var_idxs, linear_lift_var.args[2])\n                m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr\n                continue\n            end\n        end\n        if length(var_idxs) > 2\n            term_key = [Expr(:ref, :x, idx) for idx in var_idxs]\n            term_key in keys(m.nonconvex_terms) || store_nonconvex_term(\n                m,\n                term_key,\n                var_idxs,\n                :MULTILINEAR,\n                :*,\n                multilinear,\n                basic_monomial_bounds,\n                collect_monomial_discvar,\n            )\n            return true, lift_nonconvex_term(m, term_key, constr_id, scalar)\n        end\n    elseif (expr.args[1] == :^) && length(expr.args) == 3 # Pattern: (x)^(>2)\n        var_idxs = []\n        power_scalar = 0\n        scalar = 1.0\n        for i in 2:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                power_scalar += expr.args[i]\n                continue\n            end\n            (isa(expr.args[i], Symbol)) && continue\n            (expr.args[i].head == :ref) &&\n                isa(expr.args[i].args[2], Int) &&\n                push!(var_idxs, expr.args[i].args[2])\n            !isempty(var_idxs) &&\n                m.var_type[var_idxs[end]] in [:Bin, :Int] &&\n                return false, expr # Avoid fetching terms with discrete variables\n            if (expr.args[i].head == :call)\n                down_check, linear_lift_var =\n                    detect_linear_term(expr.args[i], constr_id, m)\n                !down_check && return false, expr\n                push!(var_idxs, linear_lift_var.args[2])\n                m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr\n                continue\n            end\n        end\n        if length(var_idxs) == 1 && power_scalar > 2.0 && mod(power_scalar, 1.0) == 0.0\n            term_key = [Expr(:ref, :x, var_idxs[1]) for i in 1:power_scalar]\n            term_key in keys(m.nonconvex_terms) || store_nonconvex_term(\n                m,\n                term_key,\n                var_idxs,\n                :MULTILINEAR,\n                :*,\n                multilinear,\n                basic_monomial_bounds,\n                collect_monomial_discvar,\n            )\n            return true, lift_nonconvex_term(m, term_key, constr_id, scalar)\n        end\n    end\n\n    return false, expr\nend\n\nfunction detect_monomial_term(expr::Any, constr_id::Int, m::Optimizer)\n    if (expr.args[1] == :^) && length(expr.args) == 3\n        # Pattern: (x)^(2)\n        var_idxs = []\n        power_scalar = 0\n        scalar = 1.0\n        for i in 2:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                power_scalar += expr.args[i]\n                continue\n            end\n            (isa(expr.args[i], Symbol)) && continue\n            (expr.args[i].head == :ref) &&\n                isa(expr.args[i].args[2], Int) &&\n                push!(var_idxs, expr.args[i].args[2])\n            !isempty(var_idxs) &&\n                m.var_type[var_idxs[end]] in [:Bin, :Int] &&\n                return false, expr # Avoid fetching terms with discrete variables\n            if (expr.args[i].head == :call)\n                down_check, linear_lift_var =\n                    detect_linear_term(expr.args[i], constr_id, m)\n                !down_check && return false, expr\n                push!(var_idxs, linear_lift_var.args[2])\n                m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr # Avoid fetching terms with discrete variables\n                continue\n            end\n        end\n\n        # Detect 1.0 in the exponent and return only the variable\n        if length(var_idxs) == 1 && power_scalar == 1.0\n            return false, Expr(:call, expr.args[2])\n        end\n\n        if length(var_idxs) == 1 && power_scalar == 2.0\n            term_key = [Expr(:ref, :x, var_idxs[1]) for i in 1:2]\n            term_key in keys(m.nonconvex_terms) || store_nonconvex_term(\n                m,\n                term_key,\n                var_idxs,\n                :MONOMIAL,\n                :*,\n                monomial,\n                basic_monomial_bounds,\n                collect_monomial_discvar,\n            )\n            return true, lift_nonconvex_term(m, term_key, constr_id, scalar)\n        end\n    end\n\n    # Type 2 monomial term : x * x\n    if (expr.args[1] == :*)  # confirm head (:*)\n        # ----- Pattern : coefficient * x * y  ------ #\n        scalar = 1.0\n        var_idxs = []\n        for i in 2:length(expr.args)\n            if isa(expr.args[i], Float64) || isa(expr.args[i], Int)\n                scalar *= expr.args[i]\n                continue\n            end\n            (isa(expr.args[i], Symbol)) && continue\n            (expr.args[i].head == :ref) &&\n                isa(expr.args[i].args[2], Int) &&\n                push!(var_idxs, expr.args[i].args[2])\n            !isempty(var_idxs) &&\n                m.var_type[var_idxs[end]] in [:Bin, :Int] &&\n                return false, expr # Avoid fetching terms with discrete variables\n            if (expr.args[i].head == :call)\n                down_check, linear_lift_var =\n                    detect_linear_term(expr.args[i], constr_id, m)\n                !down_check && return false, expr\n                push!(var_idxs, linear_lift_var.args[2])\n                m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr # Avoid fetching terms with discrete variables\n                continue\n            end\n        end\n        # Confirm detection of pattern A and perform store & lifting procedures\n        if (length(var_idxs) == 2) && (length(Set(var_idxs)) == 1)\n            term_key = [Expr(:ref, :x, var_idxs[1]) for i in 1:2]\n            term_key in keys(m.nonconvex_terms) || store_nonconvex_term(\n                m,\n                term_key,\n                var_idxs,\n                :MONOMIAL,\n                :*,\n                monomial,\n                basic_monomial_bounds,\n                collect_monomial_discvar,\n            )\n            return true, lift_nonconvex_term(m, term_key, constr_id, scalar)\n        end\n    end\n\n    return false, expr\nend\n\nfunction basic_monomial_bounds(m::Optimizer, k::Any)\n    lifted_idx = m.nonconvex_terms[k][:lifted_var_ref].args[2]\n    cnt = 0\n    bound = []\n    for var in k\n        cnt += 1\n        var_idx = var.args[2]\n        var_bounds = [m.l_var_tight[var_idx], m.u_var_tight[var_idx]]\n        if cnt == 1\n            bound = copy(var_bounds)\n        elseif cnt == 2\n            bound = bound * var_bounds'\n        else\n            bound = vec(bound) * var_bounds'\n        end\n    end\n    if minimum(bound) > m.l_var_tight[lifted_idx] + get_option(m, :tol)\n        m.l_var_tight[lifted_idx] = minimum(bound)\n        if m.nonconvex_terms[k][:nonlinear_type] == :MONOMIAL\n            m.l_var_tight[lifted_idx] = 0.0\n        end\n    end\n    if maximum(bound) < m.u_var_tight[lifted_idx] - get_option(m, :tol)\n        m.u_var_tight[lifted_idx] = maximum(bound)\n    end\n\n    return\nend\n\nfunction basic_monomial_bounds(m::Optimizer, nlk::Any, d::Dict)\n    lifted_idx = m.nonconvex_terms[nlk][:lifted_var_ref].args[2]\n    cnt = 0\n    bound = []\n    for var in nlk\n        cnt += 1\n        var_idx = var.args[2]\n        var_bounds = [d[var_idx][1], d[var_idx][end]]\n        if cnt == 1\n            bound = copy(var_bounds)\n        elseif cnt == 2\n            bound = bound * var_bounds'\n        else\n            bound = vec(bound) * var_bounds'\n        end\n    end\n\n    if minimum(bound) > d[lifted_idx][1] + get_option(m, :tol)\n        d[lifted_idx][1] = minimum(bound)\n    end\n\n    if maximum(bound) < d[lifted_idx][end] - get_option(m, :tol)\n        d[lifted_idx][end] = maximum(bound)\n    end\n\n    return d\nend\n\nfunction collect_monomial_discvar(m::Optimizer, k::Any; var_bowl = nothing)\n    for var in k\n        @assert isa(var.args[2], Int)\n        if var_bowl === nothing\n            var.args[2] in m.candidate_disc_vars ||\n                push!(m.candidate_disc_vars, var.args[2])\n        else\n            var.args[2] in var_bowl || push!(var_bowl, var.args[2])\n        end\n    end\n    return\nend\n\n\"\"\"\n    Recognize convex constraints\n    A catch for type-A convex constraint expression\n\"\"\"\nfunction resolve_convex_constr(\n    expr::Any,\n    m::Optimizer = nothing,\n    idx::Int = 0,\n    scalar_bin = [],\n    idxs_bin = [],\n    power_bin = [],\n    rhs = 0.0,\n)\n    expr_orig, subs = :empty, Any[]\n    if expr.args[1] in [:(<=), :(>=)] && idx > 0\n        expr_orig = :constr\n        sense = expr.args[1]\n        rhs = expr.args[3]\n        subs, rhs_strip = expr_strip_const(expr.args[2])  # Focus on the regularized subtree (stripped with constants)\n        rhs += rhs_strip                                      # TODO: check if sign is flipped\n    elseif expr.args[1] == :(==)\n        return false\n    elseif idx == 0\n        expr_orig = :obj\n        subs, rhs = expr_strip_const(expr)               # Focus on the regularized subtree (stripped with constants)\n    end\n\n    for sub in subs\n        (isa(sub, Float64) || isa(sub, Int) || isa(sub, Symbol)) && return false\n        !(sub.args[1] in [:+, :-, :*]) && return false\n        (sub.head == :ref) && return false\n        (sub.head == :call) && (length(sub.args) < 3) && return false\n        if sub.args[1] in [:-, :+]\n            for i in 2:length(sub.args)\n                if isa(sub.args[i], Float64) || isa(sub.args[i], Int)\n                    (sub.args[1] == [:-]) &&\n                        ((i == 1) ? rhs += sub.args[i] : rhs -= sub.args[i])\n                    (sub.args[1] == [:+]) && (rhs += sub.args[i])\n                elseif (sub.args[i].head == :ref)\n                    return false\n                elseif (sub.args[i].head == :call)\n                    scalar, idxs, powers = expr_is_axn(sub.args[i])\n                    (scalar === nothing) && return false\n                    if length(Set(idxs)) == 1\n                        push!(idxs_bin, idxs[1])\n                        push!(power_bin, sum(powers))\n                    else\n                        return false\n                    end\n                    (sub.args[1] == :-) && (\n                        (i == 2) ? push!(scalar_bin, scalar) : push!(scalar_bin, -scalar)\n                    )\n                    (sub.args[1] == :+) && (push!(scalar_bin, scalar))\n                end\n            end\n        elseif sub.args[1] in [:*]\n            scalar, idxs, powers = expr_is_axn(sub)\n            (scalar === nothing) && return false\n            if length(Set(idxs)) == 1\n                push!(idxs_bin, idxs[1])\n                push!(power_bin, sum(powers))\n            else\n                return false\n            end\n            push!(scalar_bin, scalar)\n        else\n            return false    # don't support other operators\n        end\n\n        scalar_sign = sign(scalar_bin[1])\n        if length(scalar_bin) > 1\n            for i in 2:length(scalar_bin)\n                !(scalar_sign == sign(scalar_bin[i])) && return false\n            end\n        end\n\n        !(length(Set(power_bin)) == 1) && return false\n        (expr.args[1] == :(<=)) && !(scalar_sign >= 0.0 && rhs >= 0.0) && return false\n        (expr.args[1] == :(>=)) && !(scalar_sign <= 0.0 && rhs <= 0.0) && return false\n        (expr.args[1] == :(<=)) && (scalar_sign <= 0.0) && return false\n        (expr.args[1] == :(>=)) && (scalar_sign >= 0.0) && return false\n    end\n\n    if expr_orig == :constr\n        # For anything reaches this point, we've detected most common attributes of a convex expression\n        # Now, we should use the differences to indicate different types of convex expression\n        convex_type = :Unknown\n\n        power_check = [(i > 1.0) && mod(i, 2) == 0 for i in power_bin]    # Special case for linear constraints within @NLconstraint\n        isempty(power_check) && return false\n\n        # Convex constraint Type-A\n        # sum_i (c_i*x_i^p) <= K (K > 0, p is an even positive integer and x_i \\in R)   => Convex\n        power_check = [(i > 1.0) && mod(i, 2) == 0 for i in power_bin]\n        (convex_type == :Unknown) && prod(power_check) && (convex_type = :convexA)\n\n        # Type-B: Convex constraint\n        # sum_i (c_i*x_i^p) <= K (K > 0, p >= 1 and x_i >= 0)                           => Convex\n        lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin]\n        power_check = [i > 1.0 for i in power_bin]\n        (convex_type == :Unknown) &&\n            prod(lb_check) &&\n            prod(power_check) &&\n            (convex_type = :convexB)\n\n        # Convex constraint Type-C\n        # sum_i (c_i*x_i^p) >= K (K > 0, 0 < p < 1 and x_i >= 0)                        => Convex\n        power_check = [i < 1 && i > 0.0 for i in power_bin]\n        lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin]\n        (convex_type == :Unknown) &&\n            prod(power_check) &&\n            prod(power_check) &&\n            (convex_type = :convexC)\n\n        # Convex constraint Type-D\n        # sum_i (c_i*x_i^p) <= K (K > 0, p <= 0 and x_i > 0)                            => Convex\n        power_check = [i <= 0.0 for i in power_bin]\n        lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin]\n        (convex_type == :Unknown) &&\n            prod(power_check) &&\n            prod(power_check) &&\n            (convex_type = :convexD)\n\n        # If we really cannot figure out what is going on...\n        (convex_type == :Unknown) && return false\n\n        # Recording the nonlinear info\n        m.nonlinear_constrs[idx] = Dict(\n            :expr_idx => idx,\n            :convex_type => convex_type,\n            :nonlinear_type => :convex,\n            :expr_orig => :constraints,\n            :expr_ref => deepcopy(expr),\n            :convexified => false,\n        )\n\n        # Recording the un-changed expression\n        m.bounding_constr_expr_mip[idx] = expr\n\n        # Recording structural identifier\n        m.constr_structure[idx] = :convex\n\n        # Recording the function for adding constraints\n        m.bounding_constr_mip[idx] = Dict(\n            :idx => idx,\n            :expr => expr,\n            :sense => sense,\n            :coefs => scalar_bin,\n            :vars => idxs_bin,\n            :rhs => rhs,\n            :cnt => length(idxs_bin),\n            :powers => power_bin,\n        )\n\n        get_option(m, :log_level) > 99 && println(\"CONVEX Constraint $(idx): $(expr)\")\n\n        return true\n    elseif expr_orig == :obj\n        minimum\n        convex_type = :Unknown\n        (expr_isconst(m.obj_expr_orig)) && return true\n        # Follows the same mapping to convex constraints\n\n        # Important: This is a fix to return obj is non-convex if the exponents have value greater than 2.\n        # This is needs to be removed once outer-approximation for convex functions is implemented\n        (maximum(power_bin) > 2) && return false\n\n        # Type-A: Convex objective function\n        # sum_i (c_i*x_i^p) (p is an even positive integer and x_i \\in R)   => Convex\n        power_check = [i > 1.0 && mod(i, 2) == 0 for i in power_bin]\n        (convex_type == :Unknown) && prod(power_check) && (convex_type = :convexA)\n\n        # Type-B: Convex objective function\n        # sum_i (c_i*x_i^p) (p >= 1 and x_i >= 0)                           => Convex\n        lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin]\n        power_check = [i > 1.0 for i in power_bin]\n        (convex_type == :Unknown) &&\n            prod(lb_check) &&\n            prod(power_check) &&\n            (convex_type = :convexB)\n\n        # Type-D: Convex objective function\n        # sum_i (c_i*x_i^p) (p <= 0 and x_i > 0) => Convex\n        power_check = [i <= 0.0 for i in power_bin]\n        lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin]\n        (convex_type == :Unknown) &&\n            prod(power_check) &&\n            prod(power_check) &&\n            (convex_type = :convexD)\n\n        convex_type == :Unknown && return false\n\n        # Recording the nonlinear info\n        m.nonlinear_constrs[idx] = Dict(\n            :expr_orig => :objective,\n            :expr_idx => idx,\n            :convex_type => convex_type,\n            :nonlinear_type => :convex,\n            :expr_ref => deepcopy(expr),\n            :convexified => false,\n        )\n\n        # Recording the un-changed expression\n        m.bounding_obj_expr_mip = expr\n\n        # Recording structural identifier\n        m.obj_structure = :convex\n\n        # Record a function that can be used to add objective function\n        m.bounding_obj_mip = Dict(\n            :sense => nothing,\n            :coefs => scalar_bin,\n            :vars => idxs_bin,\n            :rhs => -rhs,\n            :cnt => length(idxs_bin),\n            :powers => power_bin,\n        )\n\n        get_option(m, :log_level) > 99 && println(\"CONVEX Objective: $(expr)\")\n        return true\n    end\n\n    return false\nend\n"
  },
  {
    "path": "src/presolve.jl",
    "content": "\"\"\"\n    bound_tightening_wrapper(m::Optimizer)\n\nEntry point to the optimization-based bound-tightening (OBBT) algorithm. The aim of the OBBT algorithm\nis to sequentially tighten the variable bounds until a fixed point is reached.\n\nCurrently, two OBBT methods are implemented in [`optimization_based_bound_tightening`](@ref).\n\n    * Bound-tightening with polyhedral relaxations (McCormick, Lambda for convex-hull)\n    * Bound-tightening with piecewise polyhedral relaxations: (with three partitions around the local feasible solution)\nIf no local feasible solution is obtained, the algorithm defaults to OBBT without partitions\n\"\"\"\nfunction bound_tightening_wrapper(m::Optimizer; use_bound = true, kwargs...)\n    get_option(m, :presolve_bt) || return\n\n    if get_option(m, :presolve_bt_algo) == 1\n        optimization_based_bound_tightening(m, use_bound = use_bound)\n    elseif get_option(m, :presolve_bt_algo) == 2\n        optimization_based_bound_tightening(m, use_bound = use_bound, use_tmc = true)\n    elseif isa(get_option(m, :presolve_bt_algo), Function)\n        get_option(m, :presolve_bt_algo)(m)\n    else\n        error(\"Unrecognized bound tightening algorithm\")\n    end\n\n    return\nend\n\n\"\"\"\n    optimization_based_bound_tightening(m:Optimizer; use_bound::Bool=true, use_tmc::Bool)\n\nThis function implements the OBBT algorithm to tighten the variable bounds.\nIt utilizes either the basic polyhedral relaxations or the piecewise polyhedral relaxations (TMC)\nto tighten the bounds. The TMC has additional binary variables while performing OBBT.\n\nThe algorithm as two main parameters. The first is the `use_tmc`, which when set to `true`\ninvokes the algorithm on the TMC relaxation. The second parameter `use_bound` takes in the\nobjective value of the local solve solution stored in `best_sol` for performing OBBT. The `use_bound` option is set\nto `true` when the local solve is successful in obtaining a feasible solution, else this parameter\nis set to `false`.\n\nFor details, refer to section 3.1.1 of\nNagarajan, Lu, Wang, Bent, Sundar, \"An adaptive, multivariate partitioning algorithm for global optimization of nonconvex programs\"\n[link](https://doi.org/10.1007/s10898-018-00734-1).\n\nSeveral other user-input options can be used to tune the OBBT algorithm.\nFor more details, see [Presolve Options](https://lanl-ansi.github.io/Alpine.jl/latest/parameters/#Presolve-Options).\n\n\"\"\"\nfunction optimization_based_bound_tightening(\n    m::Optimizer;\n    use_bound = true,\n    time_limit = Inf,\n    kwargs...,\n)\n\n    # Some functinal constants\n    both_senses = [MOI.MIN_SENSE, MOI.MAX_SENSE]             # Senses during bound tightening procedures\n    tell_side = Dict(MOI.MIN_SENSE => 1, MOI.MAX_SENSE => 2)     # Positional information\n    tell_round = Dict(MOI.MIN_SENSE => floor, MOI.MAX_SENSE => ceil)\n\n    options = Dict(kwargs)\n\n    st = time() # Track start time\n    if time_limit == Inf\n        time_limit = get_option(m, :presolve_bt_time_limit)\n    end\n\n    # Regulating special input conditions: default use best feasible solution objective value\n    (use_bound == true) ? bound = m.best_obj : bound = Inf\n    l_var_orig = copy(m.l_var_tight)\n    u_var_orig = copy(m.u_var_tight)\n\n    discretization = _get_discretization_dict(m, m.l_var_tight, m.u_var_tight)\n    if use_bound == false && haskey(options, :use_tmc)\n        (get_option(m, :log_level) > 0) &&\n            @warn \" Local solve infeasible; defaulting to doing bound-tightening without partitions.\"\n    end\n    if use_bound == true && haskey(options, :use_tmc)\n        discretization = add_adaptive_partition(\n            m,\n            use_solution = m.best_sol,\n            use_disc = discretization,\n        )\n    end\n    discretization = resolve_var_bounds(m, discretization) # recomputation of bounds for lifted_variables\n\n    (get_option(m, :log_level) > 0) && println(\"  Starting bound-tightening\")\n\n    width_tol = get_option(m, :presolve_bt_width_tol)\n    bound_tol = get_option(m, :presolve_bt_bound_tol)\n    improv_tol = get_option(m, :presolve_bt_improv_tol)\n\n    keep_tightening = true\n\n    # start of the solve\n    while keep_tightening &&\n              (m.logs[:time_left] > get_option(m, :tol)) &&\n              (m.logs[:bt_iter] < get_option(m, :presolve_bt_max_iter)) # Stopping criteria\n        keep_tightening = false\n        m.logs[:bt_iter] += 1\n        get_option(m, :log_level) > 199 && println(\"  Iteration - $(m.logs[:bt_iter])\")\n        temp_bounds = Dict()\n\n        avg_reduction = 0.0\n        max_reduction = 0.0\n        total_reduction = 0.0\n        max_width = 0.0\n        current_rel_gap = Inf\n\n        # Sequential optimization-based bound tightening (OBBT)\n        for var_idx in m.candidate_disc_vars\n            temp_bounds[var_idx] =\n                [discretization[var_idx][1], discretization[var_idx][end]]\n            if (discretization[var_idx][end] - discretization[var_idx][1]) > width_tol\n                create_obbt_model(m, discretization, bound)\n                for sense in both_senses\n                    JuMP.@objective(\n                        m.model_mip,\n                        sense,\n                        _index_to_variable_ref(m.model_mip, var_idx)\n                    )\n                    stats = solve_obbt_model(m)\n                    if stats[\"status\"] in STATUS_OPT\n                        temp_bounds[var_idx][tell_side[sense]] =\n                            tell_round[sense](\n                                JuMP.objective_value(m.model_mip) / bound_tol,\n                            ) * bound_tol  # Objective truncation for numerical issues\n                    elseif stats[\"status\"] in STATUS_LIMIT\n                        temp_bounds[var_idx][tell_side[sense]] =\n                            tell_round[sense](\n                                JuMP.objective_bound(m.model_mip) / bound_tol,\n                            ) * bound_tol\n                    elseif stats[\"status\"] in STATUS_INF\n                        @warn(\n                            \"Infeasible model detected within bound tightening - bounds not updated\"\n                        )\n                    else\n                        @warn(\"Unknown status within  bound tightening models\")\n                    end\n                end\n            end\n\n            if (\n                temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] >\n                temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]]\n            )\n                temp_bounds[var_idx] =\n                    [discretization[var_idx][1], discretization[var_idx][end]]\n            end\n            if (\n                temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] >\n                discretization[var_idx][end]\n            )\n                temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] =\n                    discretization[var_idx][1]\n            end\n            if (\n                temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] <\n                discretization[var_idx][1]\n            )\n                temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] =\n                    discretization[var_idx][end]\n            end\n\n            bound_reduction = 0.0\n            if (\n                temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] -\n                temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]]\n            ) <= width_tol\n                midpoint = (temp_bounds[var_idx][1] + temp_bounds[var_idx][end]) / 2\n                if (midpoint - discretization[var_idx][1] < width_tol / 2)\n                    temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] =\n                        discretization[var_idx][1]\n                    temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] =\n                        discretization[var_idx][1] + (width_tol)\n                elseif (discretization[var_idx][end] - midpoint < width_tol / 2)\n                    temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] =\n                        discretization[var_idx][end] - (width_tol)\n                    temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] =\n                        discretization[var_idx][end]\n                else\n                    temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] =\n                        midpoint - (width_tol / 2)\n                    temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] =\n                        midpoint + (width_tol / 2)\n                end\n            end\n\n            new_range = round(\n                temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] -\n                temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]],\n                digits = 4,\n            )\n            old_range = discretization[var_idx][end] - discretization[var_idx][1]\n            bound_reduction = old_range - new_range\n            total_reduction += bound_reduction\n            max_reduction = max(bound_reduction, max_reduction)\n            max_width = max(new_range, max_width)\n\n            (get_option(m, :log_level) > 99) && print(\"+\")\n            (get_option(m, :log_level) > 99) && println(\n                \"  VAR $(var_idx) LB contracted $(discretization[var_idx][1])=>$(temp_bounds[var_idx][1])\",\n            )\n            (get_option(m, :log_level) > 99) && print(\"+\")\n            (get_option(m, :log_level) > 99) && println(\n                \"  VAR $(var_idx) UB contracted $(discretization[var_idx][end])=>$(temp_bounds[var_idx][end])\",\n            )\n\n            discretization[var_idx][1] = temp_bounds[var_idx][1]\n            discretization[var_idx][end] = temp_bounds[var_idx][end]\n        end\n\n        avg_reduction = total_reduction / length(keys(temp_bounds))\n\n        bound_avg_reduction = (avg_reduction > improv_tol)\n        bound_max_reduction = (max_reduction > improv_tol)\n        bound_max_width = (max_width > width_tol)\n\n        # Deactivate this termination criterion if it slows down the OBBT convergence\n        stats = relaxation_model_obbt(m, discretization, bound)\n        if is_min_sense(m)\n            current_rel_gap = eval_opt_gap(m, stats[\"relaxed_obj\"], bound)\n        elseif is_max_sense(m)\n            current_rel_gap = eval_opt_gap(m, bound, stats[\"relaxed_obj\"])\n        end\n\n        keep_tightening =\n            (bound_avg_reduction) &&\n            (bound_max_reduction) &&\n            (bound_max_width) &&\n            (current_rel_gap > get_option(m, :rel_gap))\n\n        if !isinf(current_rel_gap)\n            m.presolve_best_rel_gap = current_rel_gap * 100\n        end\n\n        discretization = resolve_var_bounds(m, discretization)\n        if haskey(options, :use_tmc)\n            discretization = add_adaptive_partition(\n                m,\n                use_solution = m.best_sol,\n                use_disc = flatten_discretization(discretization),\n            )\n        end\n\n        time() - st > time_limit && break\n    end\n\n    (get_option(m, :log_level) > 1) && println(\"  Variables whose bounds were tightened:\")\n    (get_option(m, :log_level) > 0) &&\n        println(\"  Actual iterations (OBBT): \", (m.logs[:bt_iter]))\n\n    m.l_var_tight, m.u_var_tight = update_var_bounds(discretization)\n\n    if haskey(options, :use_tmc)\n        m.discretization = add_adaptive_partition(m, use_solution = m.best_sol)\n    end\n\n    for i in m.disc_vars\n        contract_ratio =\n            round(\n                1 -\n                abs(m.l_var_tight[i] - m.u_var_tight[i]) /\n                abs(l_var_orig[i] - u_var_orig[i]);\n                digits = 2,\n            ) * 100\n        if get_option(m, :log_level) > 0 && contract_ratio > 0.0001\n            (get_option(m, :log_level) > 1) && (println(\n                \"    VAR $(i): $(contract_ratio)% contraction |$(round(l_var_orig[i]; digits=4)) --> | $(round(m.l_var_tight[i]; digits=4)) - $(round(m.u_var_tight[i]; digits=4)) | <-- $(round(u_var_orig[i]; digits=4)) |\",\n            ))\n        end\n    end\n    return\nend\n\n\"\"\"\n    create_obbt_model(m::Optimizer, discretization::Dict, bound::Float64)\n\nThis function takes in the initial discretization information and builds the OBBT model.\nIt is an algorithm specific function called by [`optimization_based_bound_tightening`](@ref).\n\"\"\"\nfunction create_obbt_model(m::Optimizer, discretization, bound::Number; kwargs...)\n\n    # options = Dict(kwargs)\n    start_build = time()\n    m.model_mip = Model(get_option(m, :mip_solver)) # Construct JuMP model\n    amp_post_vars(m, use_disc = discretization)\n    amp_post_lifted_constraints(m)\n    amp_post_convexification(m, use_disc = discretization)  # Convexify problem\n\n    if !(isinf(bound))\n        post_objective_bound(m, bound)\n    else\n        @warn \"Dropping the objective bound constraint in presolve bound tightening\"\n    end\n\n    cputime_build = time() - start_build\n    m.logs[:total_time] += cputime_build\n    m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time])\n\n    return\nend\n\nfunction relaxation_model_obbt(m::Optimizer, discretization, bound::Number)\n    create_obbt_model(m, discretization, bound)\n\n    obj_expr = JuMP.@expression(\n        m.model_mip,\n        sum(\n            m.bounding_obj_mip[:coefs][j] *\n            _index_to_variable_ref(m.model_mip, m.bounding_obj_mip[:vars][j].args[2]) for\n            j in 1:m.bounding_obj_mip[:cnt]\n        ),\n    )\n\n    if is_min_sense(m)\n        JuMP.@objective(m.model_mip, Min, obj_expr)\n    elseif is_max_sense(m)\n        JuMP.@objective(m.model_mip, Max, obj_expr)\n    end\n\n    return solve_obbt_model(m)\nend\n\n\"\"\"\n    solve_obbt_model(m::Optimizer)\n\nA function that solves the min and max OBBT model.\n\"\"\"\nfunction solve_obbt_model(m::Optimizer; kwargs...)\n    stats = Dict()\n\n    # ========= MILP Solve ========= #\n    time_limit = max(\n        0.0,\n        if get_option(m, :presolve_bt_mip_time_limit) < Inf\n            min(\n                get_option(m, :presolve_bt_mip_time_limit),\n                get_option(m, :time_limit) - m.logs[:total_time],\n            )\n        else\n            get_option(m, :time_limit) - m.logs[:total_time]\n        end,\n    )\n    MOI.set(m.model_mip, MOI.TimeLimitSec(), time_limit)\n\n    start_solve = time()\n    if get_option(m, :presolve_bt_relax_integrality)\n        JuMP.relax_integrality(m.model_mip)\n    end\n\n    JuMP.optimize!(m.model_mip)\n    status = MOI.get(m.model_mip, MOI.TerminationStatus())\n\n    stats[\"status\"] = status\n    stats[\"relaxed_obj\"] = JuMP.objective_value(m.model_mip)\n\n    cputime_solve = time() - start_solve\n    m.logs[:total_time] += cputime_solve\n    m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time])\n    # ========= MILP Solve ========= #\n\n    return stats\nend\n\n\"\"\"\n    post_objective_bound(m::Optimizer, bound::Float64; kwargs...)\n\nThis function adds the upper/lower bounding constraint on the objective function\nfor the optimization models solved within the OBBT algorithm.\n\"\"\"\nfunction post_objective_bound(m::Optimizer, bound::Number; kwargs...)\n    obj_expr = JuMP.@expression(\n        m.model_mip,\n        sum(\n            m.bounding_obj_mip[:coefs][j] *\n            _index_to_variable_ref(m.model_mip, m.bounding_obj_mip[:vars][j].args[2]) for\n            j in 1:m.bounding_obj_mip[:cnt]\n        ),\n    )\n\n    obj_bound_tol = get_option(m, :presolve_bt_obj_bound_tol)\n\n    if is_max_sense(m)\n        JuMP.@constraint(\n            m.model_mip,\n            obj_expr >= floor(bound / obj_bound_tol) * obj_bound_tol\n        )\n    elseif is_min_sense(m)\n        JuMP.@constraint(\n            m.model_mip,\n            obj_expr <= ceil(bound / obj_bound_tol) * obj_bound_tol\n        )\n    end\n\n    return\nend\n"
  },
  {
    "path": "src/relaxations.jl",
    "content": "\"\"\"\n    relaxation_bilinear(\n    m::JuMP.Model, \n    z::JuMP.VariableRef, \n    x::JuMP.VariableRef, \n    y::JuMP.VariableRef, \n    lb_x::Number,\n    ub_x::Number,\n    lb_y::Number,\n    ub_y::Number)\n\nGeneral relaxation of a binlinear term (McCormick relaxation). \n```\nz >= JuMP.lower_bound(x)*y + JuMP.lower_bound(y)*x - JuMP.lower_bound(x)*JuMP.lower_bound(y)\nz >= JuMP.upper_bound(x)*y + JuMP.upper_bound(y)*x - JuMP.upper_bound(x)*JuMP.upper_bound(y)\nz <= JuMP.lower_bound(x)*y + JuMP.upper_bound(y)*x - JuMP.lower_bound(x)*JuMP.upper_bound(y)\nz <= JuMP.upper_bound(x)*y + JuMP.lower_bound(y)*x - JuMP.upper_bound(x)*JuMP.lower_bound(y)\n```\n\"\"\"\nfunction relaxation_bilinear(\n    m::JuMP.Model,\n    z::JuMP.VariableRef,\n    x::JuMP.VariableRef,\n    y::JuMP.VariableRef,\n    lb_x::Number,\n    ub_x::Number,\n    lb_y::Number,\n    ub_y::Number,\n)\n    JuMP.@constraint(m, z >= lb_x * y + lb_y * x - lb_x * lb_y)\n    JuMP.@constraint(m, z >= ub_x * y + ub_y * x - ub_x * ub_y)\n    JuMP.@constraint(m, z <= lb_x * y + ub_y * x - lb_x * ub_y)\n    JuMP.@constraint(m, z <= ub_x * y + lb_y * x - ub_x * lb_y)\n\n    return\nend\n\n\"\"\"\n    relaxation_multilinear_binary(\n    m::JuMP.Model, \n    z::JuMP.VariableRef, \n    x::Vector{VariableRef})\n\nApplies Fortet linearization (see https://doi.org/10.1007/s10288-006-0015-3) for z = prod(x), \nwhere x is a vector of binary variables.\n\"\"\"\nfunction relaxation_multilinear_binary(\n    m::JuMP.Model,\n    z::JuMP.VariableRef,\n    x::Vector{VariableRef},\n)\n    for i in x\n        JuMP.@constraint(m, z <= i)\n    end\n    JuMP.@constraint(m, z >= sum(x) - (length(x) - 1))\n\n    return\nend\n\n#=\n\"\"\"\n    relaxation_quadratic_univariate(\n        m::JuMP.Model,\n        z::JuMP.VariableRef,\n        x::JuMP.VariableRef,\n        lb_x::Number,\n        ub_x::Number,\n    )\n\nApplies convex hull relaxation for z = x^2, where x is a variable.\n\"\"\"\nfunction relaxation_quadratic_univariate(\n    m::JuMP.Model,\n    z::JuMP.VariableRef,\n    x::JuMP.VariableRef,\n    lb_x::Number,\n    ub_x::Number,\n)\n    JuMP.@constraint(m, z >= x^2)\n    JuMP.@constraint(m, z <= (lb_x + ub_x) * x - (lb_x * ub_x))\n\n    return\nend\n=#\n"
  },
  {
    "path": "src/solver_options.jl",
    "content": "# Optimizer struct and user-defined options (with default settings) to tune Alpine solver\n\nmutable struct OptimizerOptions\n    # Parameters for tuning Alpine\n\n    # Basic solver parameters\n    log_level::Int                                              # Verbosity flag: 0 for quiet, 1 for basic solve info, 2 for iteration info\n    time_limit::Float64                                         # Time limit for algorithm (in seconds)\n    max_iter::Int                                               # Maximum bound on number of iterations for the partitioning algorithm\n    rel_gap::Float64                                            # Relative optimality gap for termination condition\n    abs_gap::Float64                                            # Absolute optimality gap for termination condition\n    tol::Float64                                                # Numerical tol used in algorithms\n    large_bound::Float64                                        # Large bounds for problems with unbounded variables\n\n    # All the solver options\n    nlp_solver::Union{MOI.OptimizerWithAttributes,Nothing}      # Local continuous NLP solver for solving NLPs at each iteration\n    minlp_solver::Union{MOI.OptimizerWithAttributes,Nothing}    # Local MINLP solver for solving MINLPs at each iteration\n    mip_solver::Union{MOI.OptimizerWithAttributes,Nothing}      # MIP solver for successive lower bound solves\n\n    # Convexification methods\n    recognize_convex::Bool                                      # Recognize convex expressions in parsing objective functions and constraints\n\n    # Expression-based user-inputs\n    # method_convexification :: Array{Function}                 # Array of functions that user can choose to convexify specific non-linear terms : no over-ride privilege\n\n    # Parameters used in Alpine's MIP-based partitioning algorithm\n    apply_partitioning::Bool                                    # Apply the partitioning algorithm only if thhis true, else terminate after presolve\n    disc_var_pick::Any                                          # Algorithm for choosing the variables for partitioning: 0 for all variables, 1 for minimum vertex cover, 3 for weighted minimum vertex cover\n    partition_scaling_factor::Int                               # Partition scaling parameter, which is critical for convergence (using a fixed value for now, later switch to a function)\n    disc_uniform_rate::Int                                      # Discretization rate parameter when using uniform partitions\n    disc_add_partition_method::Any                              # Additional methods to add discretization\n    disc_divert_chunks::Int                                     # How many uniform partitions to construct\n    disc_abs_width_tol::Float64                                 # Absolute tolerance used when setting up a partition\n    disc_rel_width_tol::Float64                                 # Relative width tolerance when setting up a partition\n    disc_consecutive_forbid::Int                                # Prevent bounding model to add partitions consecutively in the same region when bounds do not improve\n    partition_scaling_factor_branch::Bool                       # Branching tests for picking fixed discretization ratio\n\n    # MIP formulation parameters\n    convhull_formulation::String                                # MIP Formulation for the relaxation\n    convhull_ebd::Bool                                          # Enable embedding formulation\n    convhull_ebd_encode::Any                                    # Encoding method used for convhull_ebd\n    convhull_ebd_ibs::Bool                                      # Enable independent branching scheme\n    convhull_ebd_link::Bool                                     # Linking constraints between x and α, type 1 uses hierarchical and type 2 uses big-m\n    convhull_warmstart::Bool                                    # Warm start the bounding MIP\n    linking_constraints::Bool                                   # Multilinear linking constraint feature\n    linking_constraints_degree_limit::Int64                     # Degree of shared multilinear terms up to which the linking constraints are built and added\n\n    # Presolve and bound-tightening parameters\n    presolve_track_time::Bool                                   # Account presolve time for total time usage\n    presolve_bt::Bool                                           # Perform bound tightening procedure before the main algorithm (default: true)\n    presolve_bt_time_limit::Float64                             # Time limit for presolving (seconds)\n    presolve_bt_max_iter::Int                                   # Maximum iterations allowed to perform presolve\n    presolve_bt_width_tol::Float64                              # Width tolerance for bound-tightening\n    presolve_bt_improv_tol::Float64                             # Improvement tolerance for average reduction of variable ranges\n    presolve_bt_bound_tol::Float64                              # Variable bounds truncation precicision tol\n    presolve_bt_obj_bound_tol::Float64                          # Objective upper bound truncation tol\n    presolve_bt_algo::Any                                       # Method used for bound tightening procedures, can either be an index of default methods or functional inputs\n    presolve_bt_relax_integrality::Bool                         # Relax the MIP solved in built-in relaxation scheme for time performance\n    presolve_bt_mip_time_limit::Float64                         # Time limit for a single MIP solved in the built-in bound tightening algorithm (with partitions)\n    use_start_as_incumbent::Bool                           # Use starting value as a local incumbent solution for presolve without invoking a local solver\n\n    # Domain Reduction\n    presolve_bp::Bool                                           # Conduct basic bound propagation\nend\n\nfunction get_default_options()\n    log_level = 1\n    time_limit = 1E6\n    max_iter = 99\n    rel_gap = 1e-4\n    abs_gap = 1e-6\n    tol = 1e-6\n    large_bound = 1E6\n\n    nlp_solver = nothing\n    minlp_solver = nothing\n    mip_solver = nothing\n\n    recognize_convex = true\n\n    apply_partitioning = true\n    disc_var_pick = 2                # By default, uses the 15-variable selective rule\n    partition_scaling_factor = 10\n    disc_uniform_rate = 2\n    disc_add_partition_method = \"adaptive\"\n    disc_divert_chunks = 5\n    disc_abs_width_tol = 1e-4\n    disc_rel_width_tol = 1e-6\n    disc_consecutive_forbid = false\n    partition_scaling_factor_branch = false\n\n    convhull_formulation = \"sos2\"\n    convhull_ebd = false\n    convhull_ebd_encode = \"default\"\n    convhull_ebd_ibs = false\n    convhull_ebd_link = false\n    convhull_warmstart = true\n    linking_constraints = true\n    linking_constraints_degree_limit = 4 # check up to quadrilinear sharing across terms\n\n    presolve_track_time = true\n    presolve_bt = true\n    presolve_bt_time_limit = 900\n    presolve_bt_max_iter = 25\n    presolve_bt_width_tol = 1e-2\n    presolve_bt_improv_tol = 1e-3\n    presolve_bt_bound_tol = 1e-4\n    presolve_bt_obj_bound_tol = 1e-2\n    presolve_bt_algo = 1\n    presolve_bt_relax_integrality = false\n    presolve_bt_mip_time_limit = Inf\n    use_start_as_incumbent = false\n    presolve_bp = false\n\n    return OptimizerOptions(\n        log_level,\n        time_limit,\n        max_iter,\n        rel_gap,\n        abs_gap,\n        tol,\n        large_bound,\n        nlp_solver,\n        minlp_solver,\n        mip_solver,\n        recognize_convex,\n        apply_partitioning,\n        disc_var_pick,\n        partition_scaling_factor,\n        disc_uniform_rate,\n        disc_add_partition_method,\n        disc_divert_chunks,\n        disc_abs_width_tol,\n        disc_rel_width_tol,\n        disc_consecutive_forbid,\n        partition_scaling_factor_branch,\n        convhull_formulation,\n        convhull_ebd,\n        convhull_ebd_encode,\n        convhull_ebd_ibs,\n        convhull_ebd_link,\n        convhull_warmstart,\n        linking_constraints,\n        linking_constraints_degree_limit,\n        presolve_track_time,\n        presolve_bt,\n        presolve_bt_time_limit,\n        presolve_bt_max_iter,\n        presolve_bt_width_tol,\n        presolve_bt_improv_tol,\n        presolve_bt_bound_tol,\n        presolve_bt_obj_bound_tol,\n        presolve_bt_algo,\n        presolve_bt_relax_integrality,\n        presolve_bt_mip_time_limit,\n        use_start_as_incumbent,\n        presolve_bp,\n    )\nend\n"
  },
  {
    "path": "src/utility.jl",
    "content": "\"\"\"\n   update_opt_gap(m::Optimizer)\n\nUpdates Alpine model's relative & absolute optimality gaps.\n\nThe relative gap calculation is\n\n```math\n\\\\textbf{Gap} = \\\\frac{|UB-LB|}{ϵ+|UB|}\n```\n\nThe absolute gap calculation is\n```\n|UB-LB|\n```\n\"\"\"\nfunction update_opt_gap(m::Optimizer)\n    tol = get_option(m, :tol)\n\n    if m.best_obj in [Inf, -Inf]\n        m.best_rel_gap = Inf\n        return\n    else\n        p = convert(Int, round(abs(log(10, get_option(m, :rel_gap)))))\n        n = round(abs(m.best_obj - m.best_bound); digits = p)\n        # dn = round(abs(1e-12+abs(m.best_obj)); digits=p)\n        if isapprox(n, 0.0; atol = tol) && isapprox(m.best_obj, 0.0; atol = tol)\n            m.best_rel_gap = 0.0\n            return\n        end\n\n        if is_min_sense(m)\n            m.best_rel_gap = eval_opt_gap(m, m.best_bound, m.best_obj)\n        elseif is_max_sense(m)\n            m.best_rel_gap = eval_opt_gap(m, m.best_obj, m.best_bound)\n        end\n    end\n\n    m.best_abs_gap = abs(m.best_obj - m.best_bound)\n\n    return\nend\n\nfunction eval_opt_gap(m::Optimizer, lower_bound::Number, upper_bound::Number)\n    tol = get_option(m, :tol)\n\n    if isinf(lower_bound) || isinf(upper_bound)\n        error(\"Infinite bounds detected in optimality gap evalutation\")\n\n    else\n        m.best_rel_gap = _eval_best_rel_gap(lower_bound, upper_bound, tol)\n\n        # If LB > UB\n        if (m.best_rel_gap > get_option(m, :rel_gap)) &&\n           ((lower_bound - upper_bound) > 1E-1)\n            error(\n                \"Lower bound cannot exceed the upper bound in optimality gap evaluation\",\n            )\n        end\n    end\n\n    return m.best_rel_gap\nend\n\nfunction _eval_best_rel_gap(lower_bound::Number, upper_bound::Number, tol::Number)\n    if isapprox(lower_bound, upper_bound, atol = tol)\n        return 0.0\n\n    elseif isapprox(upper_bound, 0.0; atol = tol) # zero upper bound case\n        eps = 1 # shift factor\n        return abs((upper_bound + eps) - (lower_bound + eps)) /\n               (tol + abs(upper_bound) + eps)\n\n    else\n        return abs(upper_bound - lower_bound) / (tol + abs(upper_bound))\n    end\nend\n\nfunction measure_relaxed_deviation(m::Optimizer; sol = nothing)\n    sol = something(sol, m.best_bound_sol)\n\n    isempty(sol) && return\n\n    dev = []\n    for k in keys(m.nonconvex_terms)\n        y_idx = m.nonconvex_terms[k][:y_idx]\n        y_hat = sol[y_idx]\n        y_val = m.nonconvex_terms[k][:evaluator](m.nonconvex_terms[k], sol)\n        push!(\n            dev,\n            (y_idx, abs(y_hat - y_val), y_hat, y_val, m.nonconvex_terms[k][:var_idxs]),\n        )\n    end\n\n    sort!(dev, by = x -> x[1])\n\n    for i in dev\n        get_option(m, :log_level) > 199 && println(\n            \"Y-VAR$(i[1]): DIST=$(i[2]) || Y-hat = $(i[3]), Y-val = $(i[4]) || COMP $(i[5])\",\n        )\n    end\n\n    return\nend\n\n\"\"\"\n   discretization_to_bounds(d::Dict, l::Int)\n\nSame as [`update_var_bounds`](@ref)\n\"\"\"\ndiscretization_to_bounds(d::Dict, l::Int) = update_var_bounds(d, len = l)\n\n\"\"\"\nUpdate the data structure with feasible solution and its associated objective (if better)\n\"\"\"\nfunction update_incumbent(m::Optimizer, objval::Float64, sol::Vector)\n    push!(m.logs[:obj], objval)\n    if m.sense_orig == MOI.MAX_SENSE ? objval > m.best_obj : objval < m.best_obj\n        m.best_obj = objval\n        m.best_sol = sol\n        m.detected_incumbent = true\n    end\n    return\nend\n\n\"\"\"\n   variable_values(m::JuMP.Model)\n\nPrints values of all the variables after optimizing the original JuMP model.\n\"\"\"\nfunction variable_values(m::JuMP.Model)\n    for var in all_variables(m)\n        if isapprox(abs(JuMP.value(var)), 0, atol = 1E-6)\n            println(\"$var = 0.0\")\n        else\n            println(\"$var = $(round(JuMP.value(var), digits = 5))\")\n        end\n    end\n\n    return\nend\n\n\"\"\"\nMention the variable type of the lifted term.\nThis function is with limited functionality\n\n\"\"\"\nfunction resolve_lifted_var_type(var_types::Vector{Symbol}, operator::Symbol)\n    if operator == :+\n        detector = [i in [:Bin, :Int] ? true : false for i in var_types]\n        if length(detector) == 1 && detector[1] # Special case\n            if :Bin in var_types\n                return :Bin\n            else\n                return :Int\n            end\n        end\n        prod(detector) && return :Int\n        # o/w continous variables\n\n    elseif operator == :*\n        detector = [i == :Bin ? true : false for i in var_types]\n        prod(detector) && return :Bin\n        detector = [i in [:Bin, :Int] ? true : false for i in var_types]\n        prod(detector) && return :Int\n        # o/w continous variables\n\n    end\n\n    return :Cont\nend\n\n\"\"\"\n   check_solution_history(m::Optimizer, ind::Int)\n\nCheck if the solution is always the same within the last disc_consecutive_forbid iterations. Return `true` if solution has stalled.\n\"\"\"\nfunction check_solution_history(m::Optimizer, ind::Int)\n    get_option(m, :disc_consecutive_forbid) == 0 && return false\n    ((m.logs[:n_iter] - 1) < get_option(m, :disc_consecutive_forbid)) && return false\n\n    sol_val = m.bound_sol_history[mod(\n        m.logs[:n_iter] - 2,\n        get_option(m, :disc_consecutive_forbid),\n    )+1][ind]\n    for i in 1:(get_option(m, :disc_consecutive_forbid)-1)\n        search_pos =\n            mod(m.logs[:n_iter] - 2 - i, get_option(m, :disc_consecutive_forbid)) + 1\n        !isapprox(\n            sol_val,\n            m.bound_sol_history[search_pos][ind];\n            atol = get_option(m, :disc_rel_width_tol),\n        ) && return false\n    end\n\n    get_option(m, :log_level) > 99 &&\n        println(\"Consecutive bounding solution on VAR$(ind) obtained. Diverting...\")\n\n    return true\nend\n\n\"\"\"\n   fix_domains(m::Optimizer)\n\nThis function is used to fix variables to certain domains during the local solve process in the [`global_solve`](@ref).\nMore specifically, it is used in [`local_solve`](@ref) to fix binary and integer variables to lower bound solutions\nand discretizing variables to the active domain according to lower bound solution.\n\"\"\"\nfunction fix_domains(m::Optimizer; discrete_sol = nothing, use_orig = false)\n    discrete_sol !== nothing && @assert length(discrete_sol) >= m.num_var_orig\n\n    l_var = [m.l_var_tight[i] for i in 1:m.num_var_orig]\n    u_var = [m.u_var_tight[i] for i in 1:m.num_var_orig]\n\n    for i in 1:m.num_var_orig\n        if i in m.disc_vars && m.var_type[i] == :Cont\n            point = if discrete_sol === nothing\n                m.best_bound_sol[i]\n            else\n                discrete_sol[i]\n            end\n            PCnt = length(m.discretization[i]) - 1\n            for j in 1:PCnt\n                if point >= (m.discretization[i][j] - get_option(m, :tol)) &&\n                   (point <= m.discretization[i][j+1] + get_option(m, :tol))\n                    @assert j < length(m.discretization[i])\n                    use_orig ? l_var[i] = m.discretization[i][1] :\n                    l_var[i] = m.discretization[i][j]\n                    use_orig ? u_var[i] = m.discretization[i][end] :\n                    u_var[i] = m.discretization[i][j+1]\n                    break\n                end\n            end\n        elseif m.var_type[i] == :Bin || m.var_type[i] == :Int\n            if discrete_sol === nothing\n                l_var[i] = round(m.best_bound_sol[i])\n                u_var[i] = round(m.best_bound_sol[i])\n            else\n                l_var[i] = round(discrete_sol[i])\n                u_var[i] = round(discrete_sol[i])\n            end\n        end\n    end\n\n    return l_var, u_var\nend\n\n\"\"\"\n   _is_fully_convexified(m::Optimizer)\n\"\"\"\nfunction _is_fully_convexified(m::Optimizer)\n\n    # Other more advanced convexification check goes here\n    for term in keys(m.nonconvex_terms)\n        if !m.nonconvex_terms[term][:convexified]\n            @warn \"  Warning: Detected terms that is not convexified $(term[:lifted_constr_ref]), bounding model solver may report a error due to this\"\n            return\n        else\n            m.nonconvex_terms[term][:convexified] = false    # Reset status for next iteration\n        end\n    end\n\n    return\nend\n\n\"\"\"\nCollect active partition idx\nNeed to be careful with the diverted point\n\"\"\"\nfunction get_active_partition_idx(\n    discretization::Dict,\n    val::Float64,\n    idx::Int;\n    tol = 1e-6,\n)\n    for j in 1:length(discretization[idx])-1\n        if val > discretization[idx][j] - tol && val < discretization[idx][j+1] + tol\n            return j\n        end\n    end\n\n    @warn \"  Warning: Activate parition not found [VAR$(idx)]. Returning default partition 1.\"\n    return 1\nend\n\n\"\"\"\n   get_candidate_disc_vars(m:Optimizer)\n\n   A built-in method for selecting variables for discretization. This function selects all candidate variables in the nonlinear terms for discretization,\n   if under a threshold value of the number of nonlinear terms.\n\"\"\"\nfunction get_candidate_disc_vars(m::Optimizer; getoutput = false)\n\n    # Pick variables that is bound width more than tolerance length\n    if getoutput\n        return [i for i in m.candidate_disc_vars]\n    else\n        m.disc_vars = [i for i in m.candidate_disc_vars]\n        m.num_var_disc_mip = length(m.disc_vars)\n    end\n\n    return\nend\n\nfunction initialize_solution_pool(m::Optimizer, cnt::Int)\n    s = Dict()\n\n    s[:cnt] = cnt\n\n    # Column dimension changing variable\n    s[:len] = m.num_var_orig + m.num_var_linear_mip + m.num_var_nonlinear_mip\n\n    # !! Be careful with the :vars when utilizing the dynamic discretization variable selection !!\n    s[:vars] = [i for i in m.candidate_disc_vars if length(m.discretization[i]) > 2]\n\n    s[:sol] = Vector{Vector}(undef, cnt)                   # Solution value\n    s[:obj] = Vector{Float64}(undef, cnt)                  # Objecitve value\n    s[:disc] = Vector{Dict}(undef, cnt)                    # Discretization\n    s[:stat] = [:Alive for i in 1:cnt]              # Solution status\n    s[:iter] = [m.logs[:n_iter] for i in 1:cnt]     # Iteration collected\n    s[:ubstart] = [false for i in 1:cnt]            # Solution used for ub multistart\n\n    return s\nend\n\n\"\"\"\nReconsideration required\n\"\"\"\nfunction ncvar_collect_arcs(m::Optimizer, nodes::Vector)\n    arcs = Set()\n\n    for k in keys(m.nonconvex_terms)\n        if m.nonconvex_terms[k][:nonlinear_type] == :BILINEAR\n            arc = [i.args[2] for i in k]\n            length(arc) == 2 && push!(arcs, sort(arc))\n\n        elseif m.nonconvex_terms[k][:nonlinear_type] == :MONOMIAL\n            @assert isa(m.nonconvex_terms[k][:var_idxs][1], Int)\n            varidx = m.nonconvex_terms[k][:var_idxs][1]\n            push!(arcs, [varidx; varidx])\n\n        elseif m.nonconvex_terms[k][:nonlinear_type] == :MULTILINEAR\n            varidxs = m.nonconvex_terms[k][:var_idxs]\n            for i in 1:length(varidxs)\n                for j in 1:length(varidxs)\n                    if i != j\n                        push!(arcs, sort([varidxs[i]; varidxs[j]]))\n                    end\n                end\n            end\n            if length(varidxs) == 1\n                push!(arcs, sort([varidxs[1]; varidxs[1]]))\n            end\n\n            # elseif m.nonconvex_terms[k][:nonlinear_type] in [:cos, :sin]\n            #    @assert length(m.nonconvex_terms[k][:var_idxs]) == 1\n            #    var_idx = m.nonconvex_terms[k][:var_idxs][1]\n            #    push!(arcs, [var_idx; var_idx])\n\n        elseif m.nonconvex_terms[k][:nonlinear_type] in [:BININT, :BINLIN, :BINPROD]\n            continue\n        else\n            error(\n                \"[EXCEPTION] Unexpected nonlinear term when building interaction graphs for min. vertex cover.\",\n            )\n        end\n    end\n\n    return arcs\nend\n\n\"\"\"\n\"\"\"\nfunction build_discvar_graph(m::Optimizer)\n\n    # Collect the information of nonlinear terms in terms of arcs and nodes\n    nodes = get_candidate_disc_vars(m, getoutput = true)\n    arcs = ncvar_collect_arcs(m, nodes)\n\n    # Collect integer variables\n    for i in 1:m.num_var_orig\n        if !(i in nodes) && m.var_type[i] == :Int\n            push!(nodes, i)\n            push!(arcs, [i; i])\n        end\n    end\n\n    nodes = collect(nodes)\n    arcs = collect(arcs)\n\n    return nodes, arcs\nend\n\n\"\"\"\n   min_vertex_cover(m::Optimizer)\n\n`min_vertex_cover` chooses the variables based on the minimum vertex cover algorithm for the interaction graph of\nnonlinear terms which are adaptively partitioned for global optimization. This option can be activated by\nsetting `disc_var_pick = 1`.\n\"\"\"\nfunction min_vertex_cover(m::Optimizer)\n    nodes, arcs = build_discvar_graph(m)\n\n    # Set up minimum vertex cover problem\n    minvertex = Model(get_option(m, :mip_solver))\n    MOI.set(minvertex, MOI.TimeLimitSec(), 60.0) # Time limit for min vertex cover formulation\n    JuMP.@variable(minvertex, 0 <= x[nodes] <= 1, Bin)\n    JuMP.@constraint(minvertex, [a in arcs], x[a[1]] + x[a[2]] >= 1)\n    JuMP.@objective(minvertex, Min, sum(x))\n\n    JuMP.optimize!(minvertex)\n    # status = MOI.get(minvertex, MOI.TerminationStatus())\n    xVal = JuMP.value.(x)\n\n    # Collecting required information\n    m.num_var_disc_mip = Int(sum(xVal))\n    m.disc_vars = [\n        i for i in nodes if xVal[i] > get_option(m, :tol) &&\n        abs(m.u_var_tight[i] - m.l_var_tight[i]) >= get_option(m, :tol)\n    ]\n\n    return\nend\n\nfunction weighted_min_vertex_cover(m::Optimizer, distance::Dict)\n\n    # Collect the graph information\n    nodes, arcs = build_discvar_graph(m)\n\n    # A little bit redundancy before\n    disvec = [distance[i] for i in keys(distance) if i in m.candidate_disc_vars]\n    disvec = abs.(disvec[disvec.>0.0])\n    isempty(disvec) ? heavy = 1.0 : heavy = 1 / minimum(disvec)\n    weights = Dict()\n    for i in m.candidate_disc_vars\n        isapprox(distance[i], 0.0; atol = 1e-6) ? weights[i] = heavy :\n        (weights[i] = (1 / distance[i]))\n        (get_option(m, :log_level) > 100) &&\n            println(\"VAR$(i) WEIGHT -> $(weights[i]) ||| DISTANCE -> $(distance[i])\")\n    end\n\n    # Set up minimum vertex cover problem\n    minvertex = Model(get_option(m, :mip_solver))\n    MOI.set(minvertex, MOI.TimeLimitSec(), 60.0)  # Set a timer to avoid waste of time in proving optimality\n    JuMP.@variable(minvertex, 0 <= x[nodes] <= 1, Bin)\n    for arc in arcs\n        JuMP.@constraint(minvertex, x[arc[1]] + x[arc[2]] >= 1)\n    end\n    JuMP.@objective(minvertex, Min, sum(weights[i] * x[i] for i in nodes))\n\n    # Solve the minimum vertex cover\n    JuMP.optimize!(minvertex)\n\n    xVal = JuMP.value.(x)\n    m.num_var_disc_mip = Int(sum(xVal))\n    m.disc_vars = [\n        i for i in nodes if\n        xVal[i] > 0 && abs(m.u_var_tight[i] - m.l_var_tight[i]) >= get_option(m, :tol)\n    ]\n    get_option(m, :log_level) >= 99 &&\n        println(\"UPDATED DISC-VAR COUNT = $(length(m.disc_vars)) : $(m.disc_vars)\")\n\n    return\nend\n\nfunction _fetch_mip_solver_identifier(m::Optimizer; override = \"\")\n    (get_option(m, :mip_solver) === nothing) && return\n    m.mip_solver_id = _get_solver_name(m, :mip_solver, override)\n    return\nend\n\nfunction _fetch_nlp_solver_identifier(m::Optimizer; override = \"\")\n    (get_option(m, :nlp_solver) === nothing) && return\n    m.nlp_solver_id = _get_solver_name(m, :nlp_solver, override)\n    return\nend\n\nfunction _fetch_minlp_solver_identifier(m::Optimizer; override = \"\")\n    (get_option(m, :minlp_solver) === nothing) && return\n    m.minlp_solver_id = _get_solver_name(m, :minlp_solver, override)\n    return\nend\n\nfunction _get_solver_name(m::Optimizer, key::Symbol, override::String)\n    solver_string = override\n    if isempty(override)\n        solver = MOI.instantiate(get_option(m, key))\n        solver_string = try\n            MOI.get(solver, MOI.SolverName())\n        catch\n            \"$(typeof(solver))\"\n        end\n    end\n    for name in (\"Ipopt\", \"Gurobi\", \"CPLEX\", \"Juniper\")\n        if occursin(name, solver_string)\n            return name\n        end\n    end\n    return solver_string\nend\n\n\"\"\"\n    set_mip_time_limit(m::Optimizer)\n\nAn utility function used to dynamically regulate MILP solver time limits to fit Alpine solver's time limits.\n\"\"\"\nfunction set_mip_time_limit(m::Optimizer)\n    time_limit = max(0.0, get_option(m, :time_limit) - m.logs[:total_time])\n    return MOI.set(m.model_mip, MOI.TimeLimitSec(), time_limit)\nend\n\n\"\"\"\nFollow the definition of terms to calculate the value of lifted terms\n\"\"\"\nfunction resolve_lifted_var_value(m::Optimizer, sol_vec::Array)\n    @assert length(sol_vec) == m.num_var_orig\n    sol_vec = [sol_vec; fill(NaN, m.num_var_linear_mip + m.num_var_nonlinear_mip)]\n\n    for i in 1:length(m.term_seq)\n        k = m.term_seq[i]\n        if haskey(m.nonconvex_terms, k)\n            lvar_idx = m.nonconvex_terms[k][:y_idx]\n            sol_vec[lvar_idx] =\n                m.nonconvex_terms[k][:evaluator](m.nonconvex_terms[k], sol_vec)\n        elseif haskey(m.linear_terms, k)\n            lvar_idx = m.linear_terms[k][:y_idx]\n            sol_vec[lvar_idx] = m.linear_terms[k][:evaluator](m.linear_terms[k], sol_vec)\n        else\n            error(\"[RARE] Found homeless term key $(k) during bound resolution.\")\n        end\n    end\n\n    return sol_vec\nend\n\n# Unused functions\n# function amp_post_λ_upperbound(\n#     m::Optimizer,\n#     λ::Dict,\n#     indices::Any,\n#     dim::Tuple,\n#     d::Dict,\n#     tregions::Vector,\n#     reg = [],\n#     level = 0,\n# )\n#     if level == length(indices)\n#         isempty(tregions[level]) && return\n#         sliced_indices =\n#             Set(collect_indices(λ[indices][:indices], 1, [reg[1]; reg[1] + 1], dim))\n#         for i in 2:length(reg)\n#             sliced_indices = intersect(\n#                 sliced_indices,\n#                 Set(collect_indices(λ[indices][:indices], i, [reg[i], reg[i] + 1], dim)),\n#             )\n#         end\n#         for i in sliced_indices\n#             JuMP.set_upper_bound(λ[indices][:vars][i], (1 / 2)^level)\n#         end\n#         return\n#     end\n\n#     for i in 1:length(tregions[level+1])\n#         push!(reg, tregions[level+1][i])\n#         amp_post_λ_upperbound(m, λ, indices, dim, d, tregions, reg, level + 1)\n#         length(reg) < level && error(\"Something is wrong\")\n#         length(reg) > level && pop!(reg)\n#     end\n\n#     return\n# end\n\n# function amp_post_λ_upperbound(m::Optimizer, λ::Dict, indices::Any, ub::Float64)\n#     for i in λ[indices][:vars]\n#         JuMP.set_upper_bound(i, ub)\n#     end\n\n#     return\n# end\n\n# function amp_no_good_cut_α(m::Optimizer, α::Dict)\n#     println(\"Global Incumbent solution objective = $(m.best_obj)\")\n\n#     for i in 1:m.bound_sol_pool[:cnt]\n#         (m.bound_sol_pool[:stat][i] == :Cutoff) && (m.bound_sol_pool[:stat][i] = :Alive)\n#         if m.best_obj < m.bound_sol_pool[:obj][i] && m.bound_sol_pool[:stat][i] == :Alive\n#             no_good_idxs = keys(m.bound_sol_pool[:disc][i])\n#             no_good_size = length(no_good_idxs) - 1\n#             JuMP.@constraint(\n#                 m.model_mip,\n#                 sum(α[v][m.bound_sol_pool[:disc][i][v]] for v in no_good_idxs) <=\n#                 no_good_size\n#             )\n#             get_option(m, :log_level) > 0 && println(\n#                 \"!! GLOBAL cuts off POOL_SOL-$(i) POOL_OBJ=$(m.bound_sol_pool[:obj][i])!\",\n#             )\n#             m.bound_sol_pool[:stat][i] = :Cutoff\n#         end\n#     end\n\n#     return\n# end\n"
  },
  {
    "path": "src/variable_bounds.jl",
    "content": "\"\"\"\n    init_tight_bound(m::Optimizer)\n\nInitialize internal bound vectors (placeholders) to be used in other places.\nIn this case, we don't have to mess with the original bound information.\n\"\"\"\nfunction init_tight_bound(m::Optimizer)\n    m.l_var_tight = [\n        m.l_var_orig\n        fill(-Inf, m.num_var_linear_mip + m.num_var_nonlinear_mip)\n    ]\n    m.u_var_tight = [\n        m.u_var_orig\n        fill(Inf, m.num_var_linear_mip + m.num_var_nonlinear_mip)\n    ]\n    for i in 1:m.num_var_orig\n        if m.var_type_orig[i] == :Bin\n            m.l_var_tight[i] = 0.0\n            m.u_var_tight[i] = 1.0\n            # elseif m.var_type_orig[i] == :Int\n            #     m.l_var_tight[i] = floor(m.l_var_tight[i])\n            #     m.u_var_tight[i] = ceil(m.u_var_tight[i])\n        end\n    end\n\n    return\nend\n\n\"\"\"\n    init_disc(m::Optimizer)\n\nThis function initialize the dynamic discretization used for any bounding models. By default, it takes (.l_var_orig, .u_var_orig) as the base information. User is allowed to use alternative bounds for initializing the discretization dictionary.\nThe output is a dictionary with MathProgBase variable indices keys attached to the :Optimizer.discretization.\n\"\"\"\nfunction init_disc(m::Optimizer)\n    for var in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip)\n        if m.var_type[var] in [:Bin, :Cont]\n            lb = m.l_var_tight[var]\n            ub = m.u_var_tight[var]\n            m.discretization[var] = [lb, ub]\n        else\n            error(\n                \"[EXCEPTION] Unexpected variable type when initializing discretization dictionary.\",\n            )\n        end\n    end\n\n    return\nend\n\n\"\"\"\n\n    _get_discretization_dict(m::Optimizer, lbs::Vector{Float64}, ubs::Vector{Float64})\n\nUtility functions to convert bounds vectors to Dictionary based structures that are more suitable for\npartition operations.\n\n\"\"\"\nfunction _get_discretization_dict(\n    m::Optimizer,\n    lbs::Vector{Float64},\n    ubs::Vector{Float64},\n)\n    @assert length(lbs) == length(ubs)\n\n    var_discretization = Dict()\n    total_var_cnt = m.num_var_orig + m.num_var_linear_mip + m.num_var_nonlinear_mip\n\n    for var in 1:total_var_cnt\n        if length(lbs) == total_var_cnt\n            lb = lbs[var]\n            ub = ubs[var]\n        else\n            lb = -Inf\n            ub = Inf\n        end\n        var_discretization[var] = [lb, ub]\n    end\n\n    return var_discretization\nend\n\n\"\"\"\n    flatten_discretization(discretization::Dict)\n\nUtility functions to eliminate all partition on discretizing variable and keep the loose bounds.\n\n\"\"\"\nfunction flatten_discretization(discretization::Dict; kwargs...)\n    flatten_discretization = Dict()\n    for var in keys(discretization)\n        flatten_discretization[var] = [discretization[var][1], discretization[var][end]]\n    end\n\n    return flatten_discretization\nend\n\n\"\"\"\n    detect_bound_from_aff(m::Optimizer)\n\nDetect bounds from parse affine constraint. This function examines the one variable constraints such as\nx >= 5, x <= 5 or x == 5 and fetch the information to m.l_var_tight and m.u_var_tight.\n\"\"\"\nfunction bound_propagation(m::Optimizer)\n    exhausted = false\n    infeasible = false\n    tol = get_option(m, :tol)\n\n    while !exhausted\n        exhausted = true\n        for aff in m.bounding_constr_mip\n            for i in 1:length(aff[:vars])\n                var_idx = aff[:vars][i].args[2]\n                var_coef = aff[:coefs][i]\n                @assert (isa(var_idx, Float64) || isa(var_idx, Int))\n\n                if aff[:sense] == :(==) && var_coef > 0.0\n                    eval_l_bound = aff[:rhs] / var_coef\n                    eval_u_bound = aff[:rhs] / var_coef\n                    for j in 1:length(aff[:vars])\n                        if j != i && aff[:coefs][j] * var_coef > 0.0     # same sign\n                            (eval_l_bound != -Inf) && (\n                                eval_l_bound -=\n                                    abs(aff[:coefs][j] / var_coef) *\n                                    m.u_var_tight[aff[:vars][j].args[2]]\n                            )\n                            (eval_u_bound != Inf) && (\n                                eval_u_bound -=\n                                    abs(aff[:coefs][j] / var_coef) *\n                                    m.l_var_tight[aff[:vars][j].args[2]]\n                            )\n                        elseif j != i && aff[:coefs][j] * var_coef < 0.0  # different sign\n                            (eval_l_bound != -Inf) && (\n                                eval_l_bound +=\n                                    abs(aff[:coefs][j] / var_coef) *\n                                    m.l_var_tight[aff[:vars][j].args[2]]\n                            )\n                            (eval_u_bound != Inf) && (\n                                eval_u_bound +=\n                                    abs(aff[:coefs][j] / var_coef) *\n                                    m.u_var_tight[aff[:vars][j].args[2]]\n                            )\n                        end\n                    end\n\n                    if eval_l_bound > m.l_var_tight[var_idx] + tol\n                        exhausted = false\n                        m.l_var_tight[var_idx] = eval_l_bound\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] LB $(m.l_var_tight[var_idx]) evaluated from constraint\",\n                        )\n                    elseif eval_l_bound > m.u_var_tight[var_idx] + tol\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] Infeasibility detection during bound propagation\",\n                        )\n                        infeasible = true\n                        break\n                    end\n\n                    if eval_u_bound < m.u_var_tight[var_idx] - tol\n                        exhausted = false\n                        m.u_var_tight[var_idx] = eval_u_bound\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] UB $(m.u_var_tight[var_idx]) evaluated from constraints\",\n                        )\n                    elseif eval_u_bound < m.l_var_tight[var_idx] - tol\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] Infeasibility detection during bound propagation\",\n                        )\n                        infeasible = true\n                        break\n                    end\n\n                elseif aff[:sense] == :(>=) && var_coef > 0.0  # a($) - by + cz >= 100, y∈[1,10], z∈[2,50], a,b,c > 0\n                    eval_bound = aff[:rhs] / var_coef\n                    for j in 1:length(aff[:vars])\n                        if j != i && aff[:coefs][j] > 0.0\n                            eval_bound -=\n                                abs(aff[:coefs][j] / var_coef) *\n                                m.u_var_tight[aff[:vars][j].args[2]]\n                        elseif j != i\n                            aff[:coefs][j] < 0.0\n                            eval_bound +=\n                                abs(aff[:coefs][j] / var_coef) *\n                                m.l_var_tight[aff[:vars][j].args[2]]\n                        end\n                        (eval_bound == -Inf) && break\n                    end\n\n                    if eval_bound > m.l_var_tight[var_idx] + tol\n                        exhausted = false\n                        m.l_var_tight[var_idx] = eval_bound\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] LB $(m.l_var_tight[var_idx]) evaluated from constraints\",\n                        )\n                    elseif eval_bound > m.u_var_tight[var_idx] + tol\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] Infeasibility detection during bound propagation\",\n                        )\n                        infeasible = true\n                        break\n                    end\n\n                elseif aff[:sense] == :(>=) && var_coef < 0.0  # -a($) - by + cz >= 100, y∈[1,10], z∈[2,50], a,b,c > 0\n                    eval_bound = aff[:rhs] / var_coef\n                    for j in 1:length(aff[:vars])\n                        if j != i && aff[:coefs][j] > 0.0\n                            eval_bound +=\n                                abs(aff[:coefs][j] / var_coef) *\n                                m.u_var_tight[aff[:vars][j].args[2]]\n                        elseif j != i && aff[:coefs][j] < 0.0\n                            eval_bound -=\n                                abs(aff[:coefs][j] / var_coef) *\n                                m.l_var_tight[aff[:vars][j].args[2]]\n                        end\n                        (eval_bound == Inf) && break\n                    end\n\n                    if eval_bound < m.u_var_tight[var_idx] - tol\n                        exhausted = false\n                        m.u_var_tight[var_idx] = eval_bound\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] UB $(m.u_var_tight[var_idx]) evaluated from constraints\",\n                        )\n                    elseif eval_bound < m.l_var_tight[var_idx] - tol\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] Infeasibility detection during bound propagation\",\n                        )\n                        infeasible = true\n                        break\n                    end\n\n                elseif (aff[:sense] == :(<=) && aff[:coefs][i] > 0.0) # a($) - by + cz <= 100, y∈[1,10], z∈[2,50], a,b,c > 0\n                    eval_bound = aff[:rhs] / var_coef\n                    for j in 1:length(aff[:vars])\n                        if j != i && aff[:coefs][j] > 0.0\n                            eval_bound -=\n                                abs(aff[:coefs][j] / var_coef) *\n                                m.l_var_tight[aff[:vars][j].args[2]]\n                        elseif j != i && aff[:coefs][j] < 0.0\n                            eval_bound +=\n                                abs(aff[:coefs][j] / var_coef) *\n                                m.u_var_tight[aff[:vars][j].args[2]]\n                        end\n                        (eval_bound == Inf) && break\n                    end\n\n                    if eval_bound < m.u_var_tight[var_idx] - tol\n                        exhausted = false\n                        m.u_var_tight[var_idx] = eval_bound\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] UB $(m.u_var_tight[var_idx]) evaluated from constraints\",\n                        )\n                    elseif eval_bound < m.l_var_tight[var_idx] - tol\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] Infeasibility detection during bound propagation\",\n                        )\n                        infeasible = true\n                        break\n                    end\n                elseif (aff[:sense] == :(<=) && aff[:coefs][i] < 0.0) # -a($) - by + cz <= 100, y∈[1,10], z∈[2,50], a,b,c > 0\n                    eval_bound = aff[:rhs] / var_coef\n                    for j in 1:length(aff[:vars])\n                        if j != i && aff[:coefs][j] > 0.0\n                            eval_bound +=\n                                abs(aff[:coefs][j] / var_coef) *\n                                m.l_var_tight[aff[:vars][j].args[2]]\n                        elseif j != i && aff[:coefs][j] < 0.0\n                            eval_bound -=\n                                abs(aff[:coefs][j] / var_coef) *\n                                m.u_var_tight[aff[:vars][j].args[2]]\n                        end\n                        (eval_bound == -Inf) && break\n                    end\n\n                    if eval_bound > m.l_var_tight[var_idx] + tol\n                        exhausted = false\n                        m.l_var_tight[var_idx] = eval_bound\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] LB $(m.l_var_tight[var_idx]) evaluated from constraints\",\n                        )\n                    elseif eval_bound > m.u_var_tight[var_idx] + tol\n                        (get_option(m, :log_level) > 199) && println(\n                            \"[VAR$(var_idx)] Infeasibility detection during bound propagation\",\n                        )\n                        infeasible = true\n                        break\n                    end\n                end\n            end\n        end\n        (exhausted == true && get_option(m, :log_level) > 99) &&\n            println(\"Initial constraint-based bound evaluation exhausted...\")\n    end\n\n    if infeasible\n        m.status[:bounding_solve] = MOI.INFEASIBLE\n        @warn \"[INFEASIBLE] Infeasibility detected via bound propagation\"\n    end\n\n    return infeasible\nend\n\n\"\"\"\n    Recategorize :Int variables to :Bin variables if variable bounds are [0,1]\n\"\"\"\nfunction recategorize_var(m::Optimizer)\n    for i in 1:m.num_var_orig\n        if m.var_type_orig[i] == :Int && m.l_var_orig[i] == 0.0 && m.u_var_orig[i] == 1.0\n            m.var_type_orig[i] = :Bin\n            m.var_type[i] = :Bin\n        end\n    end\n\n    return\nend\n\n\"\"\"\n    resolve_var_bounds(m::Optimizer)\n\nResolve the bounds of the lifted variable using the information in l_var_tight and u_var_tight. This method only takes\nin known or trivial bounds information to deduce lifted variable bounds and to potentially avoid the cases of infinity bounds.\n\"\"\"\nfunction resolve_var_bounds(m::Optimizer)\n\n    # Basic Bound propagation\n    if get_option(m, :presolve_bp)\n        setproperty!(m, :presolve_infeasible, bound_propagation(m)) # Fetch bounds from constraints\n    end\n\n    # Resolve unbounded variables in the original formulation\n    resolve_inf_bounds(m)\n\n    # Added sequential bound resolving process base on DFS process, which ensures all bounds are secured.\n    # Increased complexity from linear to square but a reasonable amount\n    # Potentially, additional mapping can be applied to reduce the complexity\n    for i in 1:length(m.term_seq)\n        k = m.term_seq[i]\n        if haskey(m.nonconvex_terms, k)\n            m.nonconvex_terms[k][:bound_resolver](m, k)\n        elseif haskey(m.linear_terms, k)\n            basic_linear_bounds(m, k)\n        else\n            error(\"Found homeless term key $(k) during bound resolution.\")\n        end\n    end\n\n    return\nend\n\n\"\"\"\n    Resolving Inf variable bounds since Alpine relies on finite bounds to construct relaxations\n\"\"\"\nfunction resolve_inf_bounds(m::Optimizer)\n    warnuser = false\n    infcount_l = 0\n    infcount_u = 0\n\n    # Only specify necessary bounds\n    for i in 1:length(m.l_var_orig)\n        if m.l_var_tight[i] == -Inf\n            warnuser = true\n            m.l_var_tight[i] = -get_option(m, :large_bound)\n            infcount_l += 1\n        end\n        if m.u_var_tight[i] == Inf\n            warnuser = true\n            m.u_var_tight[i] = get_option(m, :large_bound)\n            infcount_u += 1\n        end\n    end\n    infcount = min(infcount_l, infcount_u)\n    if infcount == 1\n        warnuser && println(\n            \"Warning: -/+Inf bounds detected on at least $infcount variable. Initializing with values -/+$(get_option(m, :large_bound)). This may affect global optimal values and run times.\",\n        )\n    elseif infcount > 1\n        warnuser && println(\n            \"Warning: -/+Inf bounds detected on at least $infcount variables. Initializing with values -/+$(get_option(m, :large_bound)). This may affect global optimal values and run times.\",\n        )\n    end\n\n    return\nend\n\n\"\"\"\n    resolve_var_bounds(nonconvex_terms::Dict, discretization::Dict)\n\n    For discretization to be performed, we do not allow a variable being discretized to have infinite bounds.\n    The lifted/auxiliary variables may have infinite bounds and the function infers bounds on these variables. This process\n    can help speed up the subsequent solve times.\n\n    Only used in presolve bound tightening\n\"\"\"\nfunction resolve_var_bounds(m::Optimizer, d::Dict; kwargs...)\n    # Added sequential bound resolving process base on DFS process, which ensures all bounds are accurate.\n    # Potentially, additional mapping can be applied to reduce the complexity\n    for i in 1:length(m.term_seq)\n        k = m.term_seq[i]\n        if haskey(m.nonconvex_terms, k)\n            nlk = k\n            if m.nonconvex_terms[nlk][:nonlinear_type] in ALPINE_C_MONOMIAL\n                d = basic_monomial_bounds(m, nlk, d)\n            elseif m.nonconvex_terms[nlk][:nonlinear_type] in [:BINPROD]\n                d = basic_binprod_bounds(m, nlk, d)\n            elseif m.nonconvex_terms[nlk][:nonlinear_type] in [:BINLIN]\n                d = basic_binlin_bounds(m, nlk, d)\n            else\n                error(\"EXPECTED ERROR : NEED IMPLEMENTATION\")\n            end\n        elseif haskey(m.linear_terms, k)\n            d = basic_linear_bounds(m, k, d)\n        else\n            error(\n                \"Found a homeless term key $(k) during bound resolution im resolve_var_bounds.\",\n            )\n        end\n    end\n\n    return d\nend\n\n\"\"\"\n    update_var_bounds(m::Optimizer, discretization::Dict; len::Float64=length(keys(discretization)))\n\nThis function takes in a dictionary-based discretization information and convert them into two bounds vectors (l_var, u_var) by picking the smallest and largest numbers. User can specify a certain length that may contains variables that is out of the scope of discretization.\n\nOutput::\n\n    l_var::Vector{Float64}, u_var::Vector{Float64}\n\"\"\"\nfunction update_var_bounds(discretization::Dict{Any,Any}; kwargs...)\n    options = Dict(kwargs)\n\n    haskey(options, :len) ? len = options[:len] : len = length(keys(discretization))\n\n    l_var = fill(-Inf, len)\n    u_var = fill(Inf, len)\n\n    for var_idx in keys(discretization)\n        l_var[var_idx] = discretization[var_idx][1]\n        u_var[var_idx] = discretization[var_idx][end]\n    end\n\n    return l_var, u_var\nend\n\n# ================================================================= unused, but needs testing\n# \"\"\"\n#     resolve_closed_var_bounds(m::Optimizer)\n\n# This function seeks variable with tight bounds (by presolve_bt_width_tol) by checking .l_var_tight and .u_var_tight.\n# If a variable is found to be within a sufficiently small interval then no discretization will be performed on this variable\n# and the .discretization will be cleared with the tight bounds for basic McCormick operation if necessary.\n\n# \"\"\"\n# function resolve_closed_var_bounds(m::Optimizer; kwargs...)\n#     for var in m.candidate_disc_vars\n#         if abs(m.l_var_tight[var] - m.u_var_tight[var]) <\n#            get_option(m, :presolve_bt_width_tol)         # Closed Bound Criteria\n#             deleteat!(m.disc_vars, findfirst(m.disc_vars, var)) # Clean nonconvex_terms by deleting the info\n#             m.discretization[var] = [m.l_var_tight[var], m.u_var_tight[var]]              # Clean up the discretization for basic McCormick if necessary\n#         end\n#     end\n\n#     return\n# end\n"
  },
  {
    "path": "test/runtests.jl",
    "content": "using JuMP\nusing Test\n\nimport Alpine\nimport HiGHS\nimport Ipopt\nimport Juniper\nimport Pavito\nimport Random\n\nconst _EXAMPLES_DIR = joinpath(@__DIR__, \"..\", \"examples\", \"MINLPs\")\nfor file in readdir(_EXAMPLES_DIR)\n    include(joinpath(_EXAMPLES_DIR, file))\nend\n\nconst IPOPT = MOI.OptimizerWithAttributes(\n    Ipopt.Optimizer,\n    MOI.Silent() => true,\n    \"sb\" => \"yes\",\n    \"max_iter\" => 9999,\n)\n\nconst HIGHS = MOI.OptimizerWithAttributes(\n    HiGHS.Optimizer,\n    \"presolve\" => \"on\",\n    \"log_to_console\" => false,\n    # \"small_matrix_value\" => 1e-12,\n    # \"allow_unbounded_or_infeasible\" => true,\n)\n\nconst JUNIPER = MOI.OptimizerWithAttributes(\n    Juniper.Optimizer,\n    MOI.Silent() => true,\n    \"mip_solver\" => HIGHS,\n    \"nl_solver\" => IPOPT,\n)\nconst PAVITO = MOI.OptimizerWithAttributes(\n    Pavito.Optimizer,\n    MOI.Silent() => true,\n    \"mip_solver\" => HIGHS,\n    \"cont_solver\" => IPOPT,\n    \"mip_solver_drives\" => false,\n)\n\nfunction _build(model::JuMP.Model)\n    JuMP.set_optimize_hook(model, MOI.Utilities.attach_optimizer)\n    JuMP.optimize!(model)\n    JuMP.JuMP.set_optimize_hook(model, nothing)\n    alpine = JuMP.backend(model).optimizer.model\n    Alpine.load!(alpine)\n    return alpine\nend\n\n# Perform Tests\n@testset \"Alpine tests\" begin\n    include(joinpath(@__DIR__, \"test_solver.jl\"))\n    include(joinpath(@__DIR__, \"test_expression.jl\"))\n    include(joinpath(@__DIR__, \"test_algorithm.jl\"))\n    include(joinpath(@__DIR__, \"test_utility.jl\"))\nend\n"
  },
  {
    "path": "test/test_algorithm.jl",
    "content": "@testset \" Validation Test || AMP-TMC || basic solve || examples/nlp3.jl (2 iterations)\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => false,\n        # \"monomial_convexhull\" => false,\n        \"presolve_bp\" => true,\n        \"max_iter\" => 2,\n        \"presolve_bt_width_tol\" => 1e-3,\n        \"presolve_bt\" => false,\n        \"partition_scaling_factor\" => 10,\n        \"disc_var_pick\" => 0,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n\n    @test isapprox(objective_value(m), 7049.247897696512; atol = 1e-4)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 2\nend\n\n@testset \" Validation Test || AMP-TMC || minimum-vertex solving || examples/nlp3.jl (3 iterations)\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => false,\n        # \"monomial_convexhull\" => false,\n        \"presolve_bp\" => true,\n        \"disc_var_pick\" => 1,\n        \"max_iter\" => 2,\n        \"partition_scaling_factor\" => 10,\n        \"presolve_bt_width_tol\" => 1e-3,\n        \"presolve_bt\" => false,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 7049.247897696512; atol = 1e-4)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 2\nend\n\n@testset \" Validation Test || BT-AMP-TMC || basic solve || examples/nlp3.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => false,\n        \"log_level\" => 100,\n        \"max_iter\" => 2,\n        \"partition_scaling_factor\" => 10,\n        \"presolve_bt_width_tol\" => 1e-3,\n        \"presolve_bt_bound_tol\" => 1e-1,\n        \"presolve_bt\" => true,\n        \"presolve_bt_algo\" => 1,\n        \"presolve_bp\" => true,\n        \"presolve_bt_max_iter\" => 2,\n        \"presolve_track_time\" => true,\n        \"disc_var_pick\" => max_cover_var_picker,\n    )\n    m = nlp3(solver = test_solver)\n\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 2\n    @test MOI.get(m, Alpine.NumberOfPresolveIterations()) == 2\n\n    vars = all_variables(m)\n    LB = [100, 1000, 1000, 10, 150.2, 10, 35.4, 168]\n    UB = [4573.6, 5547.8, 5913.3, 332.4, 551, 390, 571.1, 638.7]\n    @test isapprox(MOI.get.(m, Alpine.TightenedLowerBound(), vars), LB, atol = 1E-6)\n    @test isapprox(MOI.get.(m, Alpine.TightenedUpperBound(), vars), UB, atol = 1E-6)\nend\n\n# FIXME Pavito terminates with `NUMERICAL_ERROR` on Julia v1.0:\n@testset \" Validation Test || PBT-AMP-TMC || basic solve || examples/nlp3.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => false,\n        \"log_level\" => 100,\n        \"max_iter\" => 2,\n        \"partition_scaling_factor\" => 10,\n        \"presolve_bt\" => true,\n        \"presolve_bt_width_tol\" => 1e-3,\n        \"presolve_bt_bound_tol\" => 1e-1,\n        \"presolve_bt_algo\" => 2,\n        \"presolve_bp\" => true,\n        \"presolve_bt_max_iter\" => 2,\n        \"disc_var_pick\" => max_cover_var_picker,\n    )\n\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 2\nend\n\n@testset \" Validation Test || AMP-CONV || basic solve || examples/nlp1.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        # \"bilinear_convexhull\" => true,\n        # \"monomial_convexhull\" => true,\n        \"presolve_bt\" => false,\n        \"presolve_bp\" => true,\n        \"partition_scaling_factor\" => 12,\n        \"max_iter\" => 1,\n    )\n    m = nlp1(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 58.38367169858795; atol = 1e-5)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\nend\n\n@testset \" Validation Test || AMP-CONV || basic solve || examples/nlp3.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => true,\n        # \"monomial_convexhull\" => true,\n        \"presolve_bt\" => false,\n        \"presolve_bp\" => false,\n        \"partition_scaling_factor\" => 14,\n        \"max_iter\" => 4,\n        \"log_level\" => 100,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 7049.24789; atol = 1e-4)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 4\nend\n\n@testset \" Validation Test || AMP || basic solve || examples/circle.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        \"disc_abs_width_tol\" => 1e-3,\n        \"partition_scaling_factor\" => 8,\n        \"max_iter\" => 6,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = circle(solver = test_solver)\n    # This is fixed in Alpine - TODO (odow): cycling detected in Pavito when disc_abs_width_tol = 1E-2\n    JuMP.optimize!(m)\n    @test isapprox(objective_value(m), 1.4142135534556992; atol = 1e-3)\nend\n\n@testset \" Validation Test || AMP-CONV-FACET || basic solve || examples/nlp3.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => true,\n        # \"monomial_convexhull\" => true,\n        \"presolve_bt\" => false,\n        \"presolve_bp\" => true,\n        \"convhull_formulation\" => \"facet\",\n        \"max_iter\" => 3,\n        \"log_level\" => 100,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test isapprox(objective_value(m), 7049.247897696188; atol = 1e-4)\n    @test 6650 <= objective_bound(m) <= 7049\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 3\nend\n\n@testset \" Validation Test || AMP || multi4N || N = 2 || exprmode=1:11\" begin\n    n_instances = 5\n    objValVec = 2.0 * ones(n_instances)\n\n    for i in 1:n_instances\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"disc_abs_width_tol\" => 1e-2,\n            \"max_iter\" => 4,\n            \"partition_scaling_factor\" => 4,\n            \"presolve_bp\" => false,\n            \"presolve_bt\" => false,\n            \"log_level\" => 1,\n        )\n\n        m = multi4N(solver = test_solver, N = 2, exprmode = i)\n        JuMP.optimize!(m)\n\n        @test termination_status(m) == MOI.OTHER_LIMIT\n        @test isapprox(objective_value(m), objValVec[i]; atol = 1e-3)\n    end\nend\n\n@testset \" Validation Test || AMP || multi2 || exprmode=1:11\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"max_iter\" => 5,\n        \"presolve_bt\" => false,\n        \"log_level\" => 1,\n    )\n\n    m = multi2(solver = test_solver)\n    JuMP.optimize!(m)\n    @test termination_status(m) == MOI.OPTIMAL\n    @test primal_status(m) == MOI.FEASIBLE_POINT\n    @test dual_status(m) == MOI.NO_SOLUTION\n    @test raw_status(m) isa String\n    @test isapprox(objective_value(m), 0.92906489; atol = 1e-3)\nend\n\n@testset \" Validation Test || AMP || multi3N || N = 2 || exprmode=1:11\" begin\n    n_instances = 3\n    objValVec = 2.0 * ones(n_instances)\n\n    objBoundVec = Any[2.97186, 3.85492, 4.23375]\n\n    for i in 1:n_instances\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"disc_abs_width_tol\" => 1e-2,\n            \"max_iter\" => 4,\n            \"partition_scaling_factor\" => 4,\n            \"presolve_bp\" => false,\n            \"presolve_bt\" => false,\n            \"log_level\" => 1,\n        )\n\n        m = multi3N(solver = test_solver, N = 2, exprmode = i)\n        JuMP.optimize!(m)\n\n        @test termination_status(m) == MOI.OTHER_LIMIT\n        @test isapprox(objective_value(m), objValVec[i]; atol = 1e-3)\n        @test objective_bound(m) <= objBoundVec[i] + 1e-3\n    end\nend\n\n@testset \" Validation Test || AMP || multiKND || K = 3, N = 3, D = 0 \" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"max_iter\" => 3,\n        \"partition_scaling_factor\" => 4,\n        \"presolve_bp\" => false,\n        \"presolve_bt\" => false,\n        \"log_level\" => 1,\n    )\n\n    m = multiKND(solver = test_solver, randomub = 50, K = 3, N = 3, D = 0)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 3.0000000824779454; atol = 1e-3)\n    @test isapprox(objective_bound(m), 12.054604248046875; atol = 1e-3)\nend\n\n@testset \" Validation Test || AMP-CONV-FACET || basic solve || examples/nlp3.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => true,\n        # \"monomial_convexhull\" => true,\n        \"presolve_bt\" => false,\n        \"presolve_bp\" => false,\n        \"max_iter\" => 3,\n        \"partition_scaling_factor\" => 4,\n        \"convhull_formulation\" => \"facet\",\n        \"log_level\" => 100,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 7049.247897696188; atol = 1e-4)\n    @test isapprox(objective_bound(m), 5871.530692199214; atol = 1E-5)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 3\nend\n\n@testset \" Validation Test || AMP || PARTITION-SCALING-FACTOR || examples/nlp3.jl \" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"partition_scaling_factor_branch\" => false,\n        \"partition_scaling_factor\" => 18,\n        \"max_iter\" => 1,\n        \"presolve_bp\" => true,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"partition_scaling_factor\")) == 18\nend\n\n@testset \" Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/nlp3.jl \" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"partition_scaling_factor_branch\" => true,\n        \"max_iter\" => 1,\n        \"presolve_bp\" => true,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"partition_scaling_factor\")) == 14\nend\n\n@testset \" Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/castro2m2.jl \" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"partition_scaling_factor_branch\" => true,\n        \"max_iter\" => 1,\n        \"presolve_bp\" => true,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = castro2m2(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"partition_scaling_factor\")) == 8\nend\n\n@testset \" Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi3N.jl exprmode=2\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"partition_scaling_factor_branch\" => true,\n        \"max_iter\" => 1,\n        \"presolve_bp\" => true,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = multi3N(solver = test_solver, N = 3, exprmode = 1)\n    JuMP.optimize!(m)\n\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"partition_scaling_factor\")) == 16\nend\n\n@testset \" Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi3N.jl exprmode=2\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"partition_scaling_factor_branch\" => true,\n        \"max_iter\" => 1,\n        \"presolve_bp\" => false,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = multi3N(solver = test_solver, N = 3, exprmode = 1)\n    JuMP.optimize!(m)\n\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"partition_scaling_factor\")) == 20\nend\n\n@testset \" Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi4N.jl exprmode=1\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"partition_scaling_factor_branch\" => true,\n        \"max_iter\" => 1,\n        \"presolve_bp\" => true,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = multi4N(solver = test_solver, N = 2, exprmode = 1)\n    JuMP.optimize!(m)\n\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"partition_scaling_factor\")) == 12\nend\n\n@testset \" Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi4N.jl exprmode=2\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"partition_scaling_factor_branch\" => true,\n        \"max_iter\" => 1,\n        \"presolve_bp\" => false,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = multi4N(solver = test_solver, N = 2, exprmode = 1)\n    JuMP.optimize!(m)\n\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"partition_scaling_factor\")) == 20\nend\n\n@testset \" Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi4N.jl exprmode=2\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_abs_width_tol\" => 1e-2,\n        \"partition_scaling_factor_branch\" => true,\n        \"max_iter\" => 1,\n        \"presolve_bp\" => true,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = multi4N(solver = test_solver, N = 2, exprmode = 2)\n    JuMP.optimize!(m)\n\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"partition_scaling_factor\")) == 20\nend\n\n@testset \"Operator :: bmpl && binlin && binprod solve test I\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => PAVITO,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n\n    m = bpml_lnl(solver = test_solver)\n    JuMP.optimize!(m)\n    @test isapprox(objective_value(m), 0.3; atol = 1e-6)\n    alpine = JuMP.backend(m).optimizer.model\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[1]), :(x[6])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[2]), :(x[7])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[3]), :(x[8])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[4]), :(x[9])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[5]), :(x[10])])\n\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[9])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[10])]][:nonlinear_type] == :BINLIN\nend\n\n@testset \"Operator :: bmpl && binlin && binprod solve test II\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => JUNIPER,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"presolve_bt\" => false,\n        \"partition_scaling_factor\" => 4,\n        \"log_level\" => 100,\n    )\n\n    m = bpml_binl(solver = test_solver)\n\n    # FIXME: Deactivating this until Juniper v0.9.0's numerical issues are fixed.\n    # JuMP.optimize!(m)\n    # @test isapprox(JuMP.objective_value(m), 22812.76415926; atol=1e-6)\n    # alpine = JuMP.backend(m).optimizer.model\n\n    alpine = _build(m)\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[6]), :(x[7])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[7]), :(x[8])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[8]), :(x[9])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[9]), :(x[10])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[10]), :(x[6])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[1]), :(x[11])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[2]), :(x[13])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[3]), :(x[15])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[4]), :(x[17])])\n    @test haskey(alpine.nonconvex_terms, Expr[:(x[5]), :(x[19])])\n\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[7]), :(x[8])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[8]), :(x[9])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[13])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[15])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[17])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[19])]][:nonlinear_type] == :BINLIN\nend\n\n@testset \"Embedding Test || AMP-CONV || basic solve || examples/nlp1.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        # \"bilinear_convexhull\" => true,\n        # \"monomial_convexhull\" => true,\n        \"presolve_bt\" => false,\n        \"presolve_bp\" => true,\n        \"convhull_ebd\" => true,\n        \"max_iter\" => 1,\n        \"partition_scaling_factor\" => 4,\n        \"log_level\" => 100,\n    )\n\n    m = nlp1(solver = test_solver)\n    JuMP.optimize!(m)\n    alp = JuMP.backend(m).optimizer.model\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 58.38367169858795; atol = 1e-4)\n    @test isapprox(alp.best_bound, 52.9702, atol = 1E-4)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\nend\n\n@testset \"Embedding IBS Test || AMP-CONV || basic solve || examples/nlp1.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        # \"bilinear_convexhull\" => true,\n        # \"monomial_convexhull\" => true,\n        \"presolve_bt\" => false,\n        \"presolve_bp\" => true,\n        \"convhull_ebd\" => true,\n        \"convhull_ebd_ibs\" => true,\n        \"partition_scaling_factor\" => 8,\n        \"max_iter\" => 1,\n        \"log_level\" => 100,\n    )\n    m = nlp1(solver = test_solver)\n    JuMP.optimize!(m)\n    alp = JuMP.backend(m).optimizer.model\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 58.38367169858795; atol = 1e-5)\n    @test isapprox(alp.best_bound, 57.01, atol = 1E-2)\n\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\nend\n\n@testset \"Embedding IBS Test || AMP-CONV || basic solve || examples/nlp3.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => true,\n        # \"monomial_convexhull\" => true,\n        \"presolve_bt\" => false,\n        \"presolve_bp\" => false,\n        \"convhull_ebd\" => true,\n        \"convhull_ebd_ibs\" => true,\n        \"max_iter\" => 3,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n    alp = JuMP.backend(m).optimizer.model\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 7049.247897696188; atol = 1e-5)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 3\n    @test isapprox(alp.best_bound, 6893.2067, atol = 1E-4)\nend\n\n@testset \"Embedding IBS Test || AMP || special problem || ... \" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        \"disc_abs_width_tol\" => 1e-3,\n        \"partition_scaling_factor\" => 8,\n        \"max_iter\" => 6,\n        \"presolve_bt\" => false,\n        \"presolve_bp\" => true,\n        \"presolve_bt_algo\" => 1,\n        \"presolve_bt_bound_tol\" => 1e-1,\n        \"convhull_ebd\" => true,\n        \"convhull_ebd_ibs\" => true,\n        \"log_level\" => 100,\n    )\n\n    m = circle(solver = test_solver)\n    # This is fixed in Alpine - TODO(odow): mixed-integer cycling detected, terminating Pavito\n    JuMP.optimize!(m)\n    @test isapprox(objective_value(m), 1.41421355; atol = 1e-3)\nend\n\n@testset \"Embedding LINK Test || AMP-CONV || basic solve || examples/nlp3.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => true,\n        # \"monomial_convexhull\" => true,\n        \"presolve_bt\" => false,\n        \"presolve_bp\" => false,\n        \"convhull_ebd\" => true,\n        \"convhull_ebd_link\" => true,\n        \"partition_scaling_factor\" => 10,\n        \"max_iter\" => 3,\n        \"log_level\" => 100,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 7049.247897696188; atol = 1e-4)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 3\nend\n\n@testset \"Algorithm Logic Test || castro4m2 || 1 iteration || Error case\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"max_iter\" => 1,\n        \"presolve_bt\" => false,\n        \"partition_scaling_factor\" => 10,\n        \"log_level\" => 100,\n    )\n\n    m = castro4m2(solver = test_solver)\n    JuMP.optimize!(m)\n    @test termination_status(m) == MOI.OTHER_LIMIT\nend\n\n@testset \" Algorithm Logic Test || blend029_gl || 3 iterations || Infeasible Case\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => PAVITO,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"presolve_bp\" => true,\n        \"disc_var_pick\" => 1,\n        \"log_level\" => 100,\n        \"max_iter\" => 3,\n        \"partition_scaling_factor\" => 10,\n        \"presolve_bt_width_tol\" => 1e-3,\n        \"presolve_bt\" => false,\n    )\n    m = blend029_gl(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 3\n    @test objective_bound(m) <= 14.0074\nend\n\n@testset \"Convex Model Solve\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        \"max_iter\" => 1,\n        \"presolve_bt\" => false,\n        \"log_level\" => 100,\n    )\n    m = convex_solve(solver = test_solver)\n    JuMP.optimize!(m)\n    @test termination_status(m) == MOI.OPTIMAL\nend\n\n@testset \"Uniform partitioning\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_add_partition_method\" => \"uniform\",\n        \"disc_uniform_rate\" => 10,\n        \"max_iter\" => 1,\n        \"presolve_bt\" => false,\n        \"time_limit\" => 100000,\n        \"log_level\" => 100,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n    @test isapprox(objective_bound(m), 6561.7841; atol = 1e-3)\nend\n\n@testset \"Algorithm Test with binprod terms\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => PAVITO,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        # \"bilinear_convexhull\" => true,\n        # \"monomial_convexhull\" => true,\n        \"presolve_bp\" => true,\n        \"presolve_bt\" => false,\n        \"partition_scaling_factor\" => 10,\n        \"log_level\" => 100,\n    )\n    m = binprod_nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OPTIMAL\n    @test isapprox(objective_value(m), 3651.020370626844; rtol = 1e-4)\n    @test isapprox(objective_bound(m), 3650.786358471944; rtol = 1e-4)\n\n    alpine = JuMP.backend(m).optimizer.model\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4])]][:y_idx] == 19\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4])]][:id] == 6\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4])]][:lifted_constr_ref] ==\n          :(x[19] == x[2] * x[4])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:y_idx] == 25\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:id] == 12\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:lifted_constr_ref] ==\n          :(x[25] == x[3] * x[8])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5])]][:y_idx] == 22\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5])]][:id] == 9\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5])]][:lifted_constr_ref] ==\n          :(x[22] == x[3] * x[5])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[19])]][:y_idx] == 20\n    @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[19])]][:id] == 7\n    @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[19])]][:lifted_constr_ref] ==\n          :(x[20] == x[12] * x[19])\n    @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[19])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[4])]][:y_idx] == 14\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[4])]][:id] == 1\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[4])]][:lifted_constr_ref] ==\n          :(x[14] == x[9] * x[4])\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[4])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:y_idx] == 17\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:id] == 4\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:lifted_constr_ref] ==\n          :(x[17] == x[1] * x[6])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[11]), :(x[5])]][:y_idx] == 16\n    @test alpine.nonconvex_terms[Expr[:(x[11]), :(x[5])]][:id] == 3\n    @test alpine.nonconvex_terms[Expr[:(x[11]), :(x[5])]][:lifted_constr_ref] ==\n          :(x[16] == x[11] * x[5])\n    @test alpine.nonconvex_terms[Expr[:(x[11]), :(x[5])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[11])]][:y_idx] == 30\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[11])]][:id] == 17\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[11])]][:lifted_constr_ref] ==\n          :(x[30] == x[10] * x[11])\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[11])]][:nonlinear_type] == :BINPROD\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[11])]][:y_idx] == 29\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[11])]][:id] == 16\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[11])]][:lifted_constr_ref] ==\n          :(x[29] == x[9] * x[10] * x[11])\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[11])]][:nonlinear_type] ==\n          :BINPROD\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:y_idx] == 21\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:id] == 8\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:lifted_constr_ref] ==\n          :(x[21] == x[2] * x[7])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[13])]][:y_idx] == 32\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[13])]][:id] == 19\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[13])]][:lifted_constr_ref] ==\n          :(x[32] == x[9] * x[13])\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[13])]][:nonlinear_type] == :BINPROD\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:y_idx] == 15\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:id] == 2\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:lifted_constr_ref] ==\n          :(x[15] == x[10] * x[6])\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[12])]][:y_idx] == 33\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[12])]][:id] == 20\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[12])]][:lifted_constr_ref] ==\n          :(x[33] == x[10] * x[12])\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[12])]][:nonlinear_type] == :BINPROD\n    @test alpine.nonconvex_terms[Expr[:(x[27]), :(x[5])]][:y_idx] == 28\n    @test alpine.nonconvex_terms[Expr[:(x[27]), :(x[5])]][:id] == 15\n    @test alpine.nonconvex_terms[Expr[:(x[27]), :(x[5])]][:lifted_constr_ref] ==\n          :(x[28] == x[27] * x[5])\n    @test alpine.nonconvex_terms[Expr[:(x[27]), :(x[5])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[25])]][:y_idx] == 26\n    @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[25])]][:id] == 13\n    @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[25])]][:lifted_constr_ref] ==\n          :(x[26] == x[13] * x[25])\n    @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[25])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[12])]][:y_idx] == 27\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[12])]][:id] == 14\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[12])]][:lifted_constr_ref] ==\n          :(x[27] == x[9] * x[12])\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[12])]][:nonlinear_type] == :BINPROD\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[13])]][:y_idx] == 23\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[13])]][:id] == 10\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[13])]][:lifted_constr_ref] ==\n          :(x[23] == x[10] * x[13])\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[13])]][:nonlinear_type] == :BINPROD\n    @test alpine.nonconvex_terms[Expr[:(x[23]), :(x[22])]][:y_idx] == 24\n    @test alpine.nonconvex_terms[Expr[:(x[23]), :(x[22])]][:id] == 11\n    @test alpine.nonconvex_terms[Expr[:(x[23]), :(x[22])]][:lifted_constr_ref] ==\n          :(x[24] == x[23] * x[22])\n    @test alpine.nonconvex_terms[Expr[:(x[23]), :(x[22])]][:nonlinear_type] == :BINLIN\n    @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[13])]][:y_idx] == 31\n    @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[13])]][:id] == 18\n    @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[13])]][:lifted_constr_ref] ==\n          :(x[31] == x[12] * x[13])\n    @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[13])]][:nonlinear_type] == :BINPROD\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[17])]][:y_idx] == 18\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[17])]][:id] == 5\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[17])]][:lifted_constr_ref] ==\n          :(x[18] == x[9] * x[17])\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[17])]][:nonlinear_type] == :BINLIN\n    @test alpine.bounding_constr_mip[1][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[14]), :(x[15])]\n    @test alpine.bounding_constr_mip[1][:coefs] == Any[0.0025, 0.0025]\n    @test alpine.bounding_constr_mip[1][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[1][:cnt] == 2\n    @test alpine.bounding_constr_mip[2][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[2][:vars] == Any[:(x[14]), :(x[5]), :(x[7])]\n    @test alpine.bounding_constr_mip[2][:coefs] == Any[-0.0025, 0.0025, 0.0025]\n    @test alpine.bounding_constr_mip[2][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[2][:cnt] == 3\n    @test alpine.bounding_constr_mip[3][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[3][:vars] == Any[:(x[16]), :(x[8])]\n    @test alpine.bounding_constr_mip[3][:coefs] == Any[-0.01, 0.01]\n    @test alpine.bounding_constr_mip[3][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[3][:cnt] == 2\n    @test alpine.bounding_constr_mip[4][:rhs] == 83333.333\n    @test alpine.bounding_constr_mip[4][:vars] == Any[:(x[1]), :(x[18]), :(x[14])]\n    @test alpine.bounding_constr_mip[4][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[4][:cnt] == 3\n    @test alpine.bounding_constr_mip[5][:rhs] == 0.0\n    @test alpine.bounding_constr_mip[5][:vars] ==\n          Any[:(x[20]), :(x[21]), :(x[4]), :(x[5])]\n    @test alpine.bounding_constr_mip[5][:coefs] == Any[1.0, -1.0, -1250.0, 1250.0]\n    @test alpine.bounding_constr_mip[5][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[5][:cnt] == 4\n    @test alpine.bounding_constr_mip[6][:rhs] == -1.25e6\n    @test alpine.bounding_constr_mip[6][:vars] == Any[:(x[24]), :(x[26]), :(x[28])]\n    @test alpine.bounding_constr_mip[6][:coefs] == Any[1.0, -1.0, -2500.0]\n    @test alpine.bounding_constr_mip[6][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[6][:cnt] == 3\n    @test alpine.bounding_constr_mip[7][:rhs] == 0.0\n    @test alpine.bounding_constr_mip[7][:vars] == Any[:(x[29])]\n    @test alpine.bounding_constr_mip[7][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[7][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[7][:cnt] == 1\n    @test alpine.bounding_constr_mip[8][:rhs] == 0.0\n    @test alpine.bounding_constr_mip[8][:vars] == Any[:(x[30]), :(x[31])]\n    @test alpine.bounding_constr_mip[8][:coefs] == Any[1.0, -1.0]\n    @test alpine.bounding_constr_mip[8][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[8][:cnt] == 2\n    @test alpine.bounding_constr_mip[9][:rhs] == 0.0\n    @test alpine.bounding_constr_mip[9][:vars] == Any[:(x[32]), :(x[33])]\n    @test alpine.bounding_constr_mip[9][:coefs] == Any[1.0, -1.0]\n    @test alpine.bounding_constr_mip[9][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[9][:cnt] == 2\nend\n\n@testset \"TESTS for closing the optimality gap in OBBT\" begin\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        \"presolve_bt\" => true,\n        \"presolve_bt_max_iter\" => 2,\n        \"log_level\" => 1,\n    )\n    m = JuMP.Model(test_solver)\n\n    # From issue #108\n    @variable(m, -2 <= x[1:2] <= 2)\n    @variable(m, -10 <= y[1:3] <= 10)\n    @NLobjective(m, Min, y[2] + y[1] * y[2] * y[3])\n    @constraint(m, y[1] == x[1])\n    @constraint(m, y[2] == x[2])\n    @NLconstraint(m, y[3] == x[2]^2)\n\n    JuMP.optimize!(m)\n    alp = JuMP.backend(m).optimizer.model\n    @test isapprox(JuMP.objective_value(m), -18, atol = 1E-6)\n    @test isapprox(value.(m[:x]), [2, -2], atol = 1E-6)\n    @test alp.logs[:n_iter] == 0\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 0\nend\n\n@testset \"Linking constraints for multilinear terms\" begin\n\n    # Without linking constraints\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"presolve_bt\" => false,\n        \"apply_partitioning\" => true,\n        \"linking_constraints\" => false,\n    )\n    m = linking_constraints_testing(solver = test_solver)\n    JuMP.optimize!(m)\n    alp = JuMP.backend(m).optimizer.model\n    @test isapprox(JuMP.objective_value(m), -0.5294000135, atol = 1E-5)\n    @test isnothing(alp.linking_constraints_info)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 2\n\n    # With linking constraints\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"presolve_bt\" => false,\n        \"apply_partitioning\" => true,\n        \"linking_constraints\" => true,\n    )\n    m = linking_constraints_testing(solver = test_solver)\n    JuMP.optimize!(m)\n    alp = JuMP.backend(m).optimizer.model\n    @test isapprox(JuMP.objective_value(m), -0.5294000135, atol = 1E-5)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n    @test in(Set{Any}([1, 2]), alp.linking_constraints_info[[1, 2]])\n    @test in(Set{Any}([1, 2, 3]), alp.linking_constraints_info[[1, 2]])\n    @test in(Set{Any}([1, 2, 4]), alp.linking_constraints_info[[1, 2]])\n    @test in(Set{Any}([1, 3]), alp.linking_constraints_info[[1, 3]])\n    @test in(Set{Any}([1, 2, 3]), alp.linking_constraints_info[[1, 3]])\n    @test in(Set{Any}([1, 3, 4]), alp.linking_constraints_info[[1, 3]])\n    @test in(Set{Any}([1, 4]), alp.linking_constraints_info[[1, 4]])\n    @test in(Set{Any}([1, 2, 4]), alp.linking_constraints_info[[1, 4]])\n    @test in(Set{Any}([1, 3, 4]), alp.linking_constraints_info[[1, 4]])\nend\n\n@testset \"Warm start value used as the incumbent solution\" begin\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 1,\n        \"use_start_as_incumbent\" => false,\n    )\n    sol = [\n        579.30669,\n        1359.97066,\n        5109.97054,\n        182.0177,\n        295.60118,\n        217.9823,\n        286.41653,\n        395.60118,\n    ]\n\n    m = nlp3(solver = test_solver)\n    for i in 1:length(m[:x])\n        JuMP.set_start_value(m[:x][i], sol[i])\n    end\n\n    JuMP.optimize!(m)\n    alp = JuMP.backend(m).optimizer.model\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(objective_value(m), 7049.247897696512, atol = 1e-6)\n    @test isapprox(alp.best_bound, 3834.978106740535, atol = 1E-6)\n    @test alp.options.use_start_as_incumbent == false\n\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"presolve_bt\" => true,\n        \"max_iter\" => 1,\n        \"use_start_as_incumbent\" => true,\n    )\n\n    m = nlp3(solver = test_solver)\n    for i in 1:length(m[:x])\n        JuMP.set_start_value(m[:x][i], sol[i])\n    end\n\n    JuMP.optimize!(m)\n    alp = JuMP.backend(m).optimizer.model\n\n    @test termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(alp.best_bound, 4810.212866711817, atol = 1E-3)\n    @test alp.warm_start_value == sol\n    @test alp.options.use_start_as_incumbent == true\nend\n\n@testset \"Test binary multilinear product linearization\" begin\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"minlp_solver\" => JUNIPER,\n        \"presolve_bt\" => false,\n    )\n\n    m = hmittelman(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OPTIMAL\n    @test isapprox(objective_value(m), 13; atol = 1e-4)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 1\n\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"minlp_solver\" => JUNIPER,\n        \"presolve_bt\" => true,\n    )\n\n    m = hmittelman(solver = test_solver)\n    JuMP.optimize!(m)\n\n    @test termination_status(m) == MOI.OPTIMAL\n    @test isapprox(objective_value(m), 13; atol = 1e-4)\n    @test MOI.get(m, Alpine.NumberOfIterations()) == 0\nend\n\n@testset \"Test integer variable support via IntegerToZeroOneBridge\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"minlp_solver\" => JUNIPER,\n    )\n    model = JuMP.Model(test_solver)\n    @variable(model, -10 <= x <= 20, Int)\n    @objective(model, Min, x)\n    JuMP.optimize!(model)\n    @test termination_status(model) == MOI.OPTIMAL\n    @test isapprox(objective_value(model), -10; atol = 1e-4)\n    @test isapprox(value(x), -10, atol = 1e-6)\n    @test MOI.get(model, Alpine.NumberOfIterations()) == 0\nend\n\n@testset \"Test integer variable support 0\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"minlp_solver\" => JUNIPER,\n    )\n    model = JuMP.Model(test_solver)\n    @variable(model, x, Int)\n    @objective(model, Min, x)\n    @test_throws Exception JuMP.optimize!(model)\nend\n\n@testset \"Test integer variable support 1\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"minlp_solver\" => JUNIPER,\n    )\n    model = JuMP.Model(test_solver)\n    @variable(model, -10 <= x, Int)\n    @objective(model, Min, x)\n    @test_throws Exception JuMP.optimize!(model)\nend\n\n@testset \"Test integer variable support 2\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"minlp_solver\" => JUNIPER,\n    )\n    model = JuMP.Model(test_solver)\n    @variable(model, x <= 20, Int)\n    @objective(model, Min, x)\n    @test_throws Exception JuMP.optimize!(model)\nend\n"
  },
  {
    "path": "test/test_expression.jl",
    "content": "@testset \"Expression Parsing || bilinear || Affine || exprs.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n\n    m = exprstest(solver = test_solver)\n\n    alpine = _build(m)\n\n    ex = alpine.bounding_constr_expr_mip[1]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [-1.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[1][:coefs]\n    @test affdict[:vars] == [:(x[1])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[1][:vars]\n    @test isapprox(affdict[:rhs], 109.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[1][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[1][:sense]\n\n    ex = alpine.bounding_constr_expr_mip[2]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [3.0, 3.0, 3.0, 3.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[2][:coefs]\n    @test affdict[:vars] == [:(x[8]), :(x[9]), :(x[10]), :(x[11])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[2][:vars]\n    @test isapprox(affdict[:rhs], 111.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[2][:rhs]\n    @test affdict[:sense] == :(>=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[2][:sense]\n\n    ex = alpine.bounding_constr_expr_mip[3]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [-1.0, 20.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[3][:coefs]\n    @test affdict[:vars] == [:(x[12]), :(x[13])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[3][:vars]\n    @test isapprox(affdict[:rhs], 222.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[3][:rhs]\n    @test affdict[:sense] == :(>=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[3][:sense]\n\n    # 1.0 * x[12] - 115.0 >= 0.0\n    ex = alpine.bounding_constr_expr_mip[4]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [-1.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[4][:coefs]\n    @test affdict[:vars] == [:(x[12])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[4][:vars]\n    @test isapprox(affdict[:rhs], 115.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[4][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[4][:sense]\n\n    # 1.0 * x[12] - 115.0 <= 0.0\n    ex = alpine.bounding_constr_expr_mip[5]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [1.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[5][:coefs]\n    @test affdict[:vars] == [:(x[12])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[5][:vars]\n    @test isapprox(affdict[:rhs], 115.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[5][:rhs]\n    @test affdict[:sense] == :(>=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[5][:sense]\n\n    # -1.0 * x[12] - 115.0 >= 0.0\n    ex = alpine.bounding_constr_expr_mip[6]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [-1.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[6][:coefs]\n    @test affdict[:vars] == [:(x[12])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[6][:vars]\n    @test isapprox(affdict[:rhs], 115.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[6][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[6][:sense]\n\n    # (x[1] + 1.0 * x[14]) - 555.0 >= 0.0\n    ex = alpine.bounding_constr_expr_mip[7]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [1.0, 1.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[7][:coefs]\n    @test affdict[:vars] == [:(x[1]), :(x[14])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[7][:vars]\n    @test isapprox(affdict[:rhs], 555.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[7][:rhs]\n    @test affdict[:sense] == :(>=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[7][:sense]\n\n    # ((x[8] - 7.0 * x[9]) + x[10] + x[4]) - 6666.0 <= 0.0\n    ex = alpine.bounding_constr_expr_mip[8]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [1.0, -7.0, 1.0, 1.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[8][:coefs]\n    @test affdict[:vars] == [:(x[8]), :(x[9]), :(x[10]), :(x[4])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[8][:vars]\n    @test isapprox(affdict[:rhs], 6666.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[8][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[8][:sense]\n\n    # ((13.0 * x[1] - x[2]) + 30.0 * x[3] + x[4]) - 77.0 >= 0.0\n    ex = alpine.bounding_constr_expr_mip[9]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [13.0, -1.0, 30.0, 1.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[9][:coefs]\n    @test affdict[:vars] == [:(x[1]), :(x[2]), :(x[3]), :(x[4])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[9][:vars]\n    @test isapprox(affdict[:rhs], 77.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[9][:rhs]\n    @test affdict[:sense] == :(>=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[9][:sense]\nend\n\n@testset \"Expression Parsing || bilinear || Affine || nlp1.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n    m = nlp1(solver = test_solver)\n\n    alpine = _build(m)\n\n    ex = alpine.bounding_constr_expr_mip[1]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [1.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[1][:coefs]\n    @test affdict[:vars] == [:(x[5])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[1][:vars]\n    @test isapprox(affdict[:rhs], 8.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[1][:rhs]\n    @test affdict[:sense] == :(>=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[1][:sense]\nend\n\n@testset \"Expression Parsing || bilinear || Affine || nlp3.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n\n    m = nlp3(solver = test_solver)\n\n    alpine = _build(m)\n\n    ex = alpine.bounding_constr_expr_mip[1]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [0.0025, 0.0025]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[1][:coefs]\n    @test affdict[:vars] == [:(x[4]), :(x[6])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[1][:vars]\n    @test isapprox(affdict[:rhs], 1.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[1][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[1][:sense]\n\n    ex = alpine.bounding_constr_expr_mip[2]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [-0.0025, 0.0025, 0.0025]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[2][:coefs]\n    @test affdict[:vars] == [:(x[4]), :(x[5]), :(x[7])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[2][:vars]\n    @test isapprox(affdict[:rhs], 1.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[2][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[2][:sense]\n\n    ex = alpine.bounding_constr_expr_mip[3]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [-0.01, 0.01]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[3][:coefs]\n    @test affdict[:vars] == [:(x[5]), :(x[8])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[3][:vars]\n    @test isapprox(affdict[:rhs], 1.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[3][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[3][:sense]\n\n    ex = alpine.bounding_constr_expr_mip[4]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test (affdict[:coefs] .== [100.0, -1.0, 833.33252]) == [true, true, true]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[4][:coefs]\n    @test affdict[:vars] == [:(x[1]), :(x[9]), :(x[4])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[4][:vars]\n    @test isapprox(affdict[:rhs], 83333.333; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[4][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[4][:sense]\n\n    ex = alpine.bounding_constr_expr_mip[5]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [1.0, -1.0, -1250.0, 1250.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[5][:coefs]\n    @test affdict[:vars] == [:(x[10]), :(x[11]), :(x[4]), :(x[5])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[5][:vars]\n    @test isapprox(affdict[:rhs], 0.0; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[5][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[5][:sense]\n\n    ex = alpine.bounding_constr_expr_mip[6]\n    affdict = Alpine.expr_linear_to_affine(ex)\n    @test affdict[:coefs] == [1.0, -1.0, -2500.0]\n    @test affdict[:coefs] == alpine.bounding_constr_mip[6][:coefs]\n    @test affdict[:vars] == [:(x[12]), :(x[13]), :(x[5])]\n    @test affdict[:vars] == alpine.bounding_constr_mip[6][:vars]\n    @test isapprox(affdict[:rhs], -1.25e6; atol = 1e-3)\n    @test affdict[:rhs] == alpine.bounding_constr_mip[6][:rhs]\n    @test affdict[:sense] == :(<=)\n    @test affdict[:sense] == alpine.bounding_constr_mip[6][:sense]\nend\n\n@testset \"Expression Parsing || bilinear || Simple || bi1.jl \" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n\n    m = operator_c(solver = test_solver)\n\n    alpine = _build(m) # Setup internal model\n\n    @test length(keys(alpine.nonconvex_terms)) == 8\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 1), Expr(:ref, :x, 1)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 2), Expr(:ref, :x, 2)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 3), Expr(:ref, :x, 3)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 4), Expr(:ref, :x, 4)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 2), Expr(:ref, :x, 3)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 3), Expr(:ref, :x, 4)])\n\n    # TODO setup detailed check on this problem\nend\n@testset \"Expression Parsing || bilinear || Complex || blend029.jl \" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => JUNIPER,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n\n    m = blend029(solver = test_solver)\n\n    alpine = _build(m) # Setup internal model\n\n    @test length(keys(alpine.nonconvex_terms)) == 28\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 37), Expr(:ref, :x, 55)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 38), Expr(:ref, :x, 56)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 37), Expr(:ref, :x, 26)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 43), Expr(:ref, :x, 26)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 47), Expr(:ref, :x, 59)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 48), Expr(:ref, :x, 60)])\n    @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 47), Expr(:ref, :x, 36)])\n\n    @test alpine.bounding_constr_mip[1][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[1][:vars] ==\n          Any[:(x[1]), :(x[4]), :(x[7]), :(x[10]), :(x[49])]\n    @test alpine.bounding_constr_mip[1][:sense] == :(==)\n    @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0, 1.0, 1.0, 1.0]\n    @test alpine.bounding_constr_mip[1][:cnt] == 5\n\n    @test alpine.bounding_constr_mip[4][:rhs] == 0.1\n    @test alpine.bounding_constr_mip[4][:vars] ==\n          Any[:(x[4]), :(x[16]), :(x[25]), :(x[34]), :(x[58])]\n    @test alpine.bounding_constr_mip[4][:sense] == :(==)\n    @test alpine.bounding_constr_mip[4][:coefs] == Any[-1.0, -1.0, -1.0, 1.0, 1.0]\n    @test alpine.bounding_constr_mip[4][:cnt] == 5\n\n    @test alpine.bounding_constr_mip[17][:rhs] == -0.14\n    @test alpine.bounding_constr_mip[17][:vars] ==\n          Any[:(x[11]), :(x[23]), :(x[32]), :(x[64]), :(x[65])]\n    @test alpine.bounding_constr_mip[17][:sense] == :(==)\n    @test alpine.bounding_constr_mip[17][:coefs] == Any[-1.0, -1.0, -1.0, -1.0, 1.0]\n    @test alpine.bounding_constr_mip[17][:cnt] == 5\n\n    @test alpine.bounding_constr_mip[31][:rhs] == 0.0\n    @test alpine.bounding_constr_mip[31][:vars] == Any[:(x[13])]\n    @test alpine.bounding_constr_mip[31][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[31][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[31][:cnt] == 1\n\n    @test alpine.bounding_constr_mip[145][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[145][:vars] == Any[:(x[73])]\n    @test alpine.bounding_constr_mip[145][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[145][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[145][:cnt] == 1\n\n    @test alpine.bounding_constr_mip[67][:rhs] == -1.0\n    @test alpine.bounding_constr_mip[67][:vars] == Any[:(x[73])]\n    @test alpine.bounding_constr_mip[67][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[67][:coefs] == Any[-1.0]\n    @test alpine.bounding_constr_mip[67][:cnt] == 1\n\n    @test alpine.bounding_constr_mip[187][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[187][:vars] == Any[:(x[79]), :(x[94])]\n    @test alpine.bounding_constr_mip[187][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[187][:coefs] == Any[1.0, 1.0]\n    @test alpine.bounding_constr_mip[187][:cnt] == 2\n\n    @test alpine.bounding_constr_mip[202][:rhs] == 0.04\n    @test alpine.bounding_constr_mip[202][:vars] ==\n          Any[:(x[103]), :(x[1]), :(x[13]), :(x[25]), :(x[28]), :(x[31])]\n    @test alpine.bounding_constr_mip[202][:sense] == :(==)\n    @test alpine.bounding_constr_mip[202][:coefs] == Any[1.0, -0.6, -0.2, 0.2, 0.2, 0.2]\n    @test alpine.bounding_constr_mip[202][:cnt] == 6\n\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[55])]][:id] == 1\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[55])]][:lifted_var_ref] == :(x[103])\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[55])]][:convexified] == false\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[55])]][:nonlinear_type] == :BILINEAR\n\n    @test alpine.bounding_constr_mip[206][:rhs] == 0.0\n    @test alpine.bounding_constr_mip[206][:vars] ==\n          Any[:(x[107]), :(x[103]), :(x[108]), :(x[109]), :(x[110]), :(x[2]), :(x[14])]\n    @test alpine.bounding_constr_mip[206][:sense] == :(==)\n    @test alpine.bounding_constr_mip[206][:coefs] ==\n          Any[1.0, -1.0, 1.0, 1.0, 1.0, -0.6, -0.2]\n    @test alpine.bounding_constr_mip[206][:cnt] == 7\n\n    @test alpine.nonconvex_terms[[:(x[38]), :(x[56])]][:id] == 5\n    @test alpine.nonconvex_terms[[:(x[38]), :(x[56])]][:lifted_var_ref] == :(x[107])\n    @test alpine.nonconvex_terms[[:(x[38]), :(x[56])]][:convexified] == false\n    @test alpine.nonconvex_terms[[:(x[38]), :(x[56])]][:nonlinear_type] == :BILINEAR\n\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[26])]][:id] == 6\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[26])]][:lifted_var_ref] == :(x[108])\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[26])]][:convexified] == false\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[26])]][:nonlinear_type] == :BILINEAR\n\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[32])]][:id] == 8\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[32])]][:lifted_var_ref] == :(x[110])\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[32])]][:convexified] == false\n    @test alpine.nonconvex_terms[[:(x[37]), :(x[32])]][:nonlinear_type] == :BILINEAR\n\n    @test alpine.bounding_constr_mip[213][:rhs] == 0.0\n    @test alpine.bounding_constr_mip[213][:vars] ==\n          Any[:(x[129]), :(x[127]), :(x[124]), :(x[130]), :(x[6]), :(x[18])]\n    @test alpine.bounding_constr_mip[213][:sense] == :(==)\n    @test alpine.bounding_constr_mip[213][:coefs] == Any[1.0, -1.0, -1.0, 1.0, -0.4, -0.4]\n    @test alpine.bounding_constr_mip[213][:cnt] == 6\n\n    @test alpine.nonconvex_terms[[:(x[48]), :(x[60])]][:id] == 27\n    @test alpine.nonconvex_terms[[:(x[48]), :(x[60])]][:lifted_var_ref] == :(x[129])\n    @test alpine.nonconvex_terms[[:(x[48]), :(x[60])]][:convexified] == false\n    @test alpine.nonconvex_terms[[:(x[48]), :(x[60])]][:nonlinear_type] == :BILINEAR\n\n    @test alpine.nonconvex_terms[[:(x[47]), :(x[59])]][:id] == 25\n    @test alpine.nonconvex_terms[[:(x[47]), :(x[59])]][:lifted_var_ref] == :(x[127])\n    @test alpine.nonconvex_terms[[:(x[47]), :(x[59])]][:convexified] == false\n    @test alpine.nonconvex_terms[[:(x[47]), :(x[59])]][:nonlinear_type] == :BILINEAR\n\n    @test alpine.nonconvex_terms[[:(x[47]), :(x[36])]][:id] == 28\n    @test alpine.nonconvex_terms[[:(x[47]), :(x[36])]][:lifted_var_ref] == :(x[130])\n    @test alpine.nonconvex_terms[[:(x[47]), :(x[36])]][:convexified] == false\n    @test alpine.nonconvex_terms[[:(x[47]), :(x[36])]][:nonlinear_type] == :BILINEAR\nend\n\n@testset \"Expression Parsing || multilinear || Simple || multi.jl \" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n\n    m = multi3(solver = test_solver, exprmode = 1)\n\n    alpine = _build(m) # Setup internal model\n\n    @test length(keys(alpine.nonconvex_terms)) == 1\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:id] == 1\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:lifted_var_ref] == :(x[4])\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:nonlinear_type] ==\n          :MULTILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[4])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    @test alpine.bounding_constr_mip[1][:rhs] == 3.0\n    @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2]), :(x[3])]\n    @test alpine.bounding_constr_mip[1][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0, 1.0]\n    @test alpine.bounding_constr_mip[1][:cnt] == 3\n\n    m = multi3(solver = test_solver, exprmode = 2)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] ==\n          :(x[4])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 3)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 3)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 3)]][:nonlinear_type] ==\n          :BILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[5])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi3(solver = test_solver, exprmode = 3)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:lifted_var_ref] ==\n          :(x[4])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 4)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 4)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 4)]][:nonlinear_type] ==\n          :BILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[5])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 1)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 1\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[5])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:id] == 1\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:nonlinear_type] ==\n          :MULTILINEAR\n\n    @test alpine.bounding_constr_mip[1][:rhs] == 4.0\n    @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2]), :(x[3]), :(x[4])]\n    @test alpine.bounding_constr_mip[1][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0, 1.0, 1.0]\n    @test alpine.bounding_constr_mip[1][:cnt] == 4\n\n    m = multi4(solver = test_solver, exprmode = 2)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 3\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:lifted_var_ref] ==\n          :(x[6])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 6)]][:id] == 3\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 6)]][:lifted_var_ref] ==\n          :(x[7])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 6)]][:nonlinear_type] ==\n          :BILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 3)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 2\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[:(x[5]), :(x[3]), :(x[4])]][:id] == 2\n    @test alpine.nonconvex_terms[[:(x[5]), :(x[3]), :(x[4])]][:lifted_var_ref] == :(x[6])\n    @test alpine.nonconvex_terms[[:(x[5]), :(x[3]), :(x[4])]][:nonlinear_type] ==\n          :MULTILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 4)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 2\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[5])]][:id] == 2\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[5])]][:lifted_var_ref] == :(x[6])\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[5])]][:nonlinear_type] ==\n          :MULTILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 5)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 3\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 5)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 5)]][:lifted_var_ref] ==\n          :(x[6])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 5)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:id] == 3\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:lifted_var_ref] ==\n          :(x[7])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:nonlinear_type] ==\n          :BILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 6)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 2\n\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:id] == 1\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:lifted_var_ref] == :(x[5])\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 4)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 4)]][:lifted_var_ref] ==\n          :(x[6])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 4)]][:nonlinear_type] ==\n          :BILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 7)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 3\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 5)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 5)]][:lifted_var_ref] ==\n          :(x[6])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 5)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:id] == 3\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:lifted_var_ref] ==\n          :(x[7])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:nonlinear_type] ==\n          :BILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 8)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 2\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[5]), :(x[4])]][:id] == 2\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[5]), :(x[4])]][:lifted_var_ref] == :(x[6])\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[5]), :(x[4])]][:nonlinear_type] ==\n          :MULTILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 9)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 2\n\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[4])]][:id] == 1\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[4])]][:lifted_var_ref] == :(x[5])\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[4])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:lifted_var_ref] ==\n          :(x[6])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:nonlinear_type] ==\n          :BILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 10)\n\n    alpine = _build(m)\n    @test length(keys(alpine.nonconvex_terms)) == 3\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 5)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 5)]][:lifted_var_ref] ==\n          :(x[6])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 5)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:id] == 3\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:lifted_var_ref] ==\n          :(x[7])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:nonlinear_type] ==\n          :BILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\n\n    m = multi4(solver = test_solver, exprmode = 11)\n\n    alpine = _build(m)\n\n    @test length(keys(alpine.nonconvex_terms)) == 3\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:lifted_var_ref] ==\n          :(x[6])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:nonlinear_type] ==\n          :BILINEAR\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:id] == 3\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:lifted_var_ref] ==\n          :(x[7])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:nonlinear_type] ==\n          :BILINEAR\n\n    @test alpine.bounding_obj_mip[:rhs] == 0\n    @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])]\n    @test alpine.bounding_obj_mip[:coefs] == [1.0]\n    @test alpine.bounding_obj_mip[:cnt] == 1\n    @test alpine.bounding_obj_mip[:sense] === nothing\nend\n\n@testset \"Expression Parsing || bilinear || Complex-div || div.jl\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n\n    m = div(solver = test_solver)\n\n    alpine = _build(m) # Setup internal model\n\n    @test length(keys(alpine.nonconvex_terms)) == 3\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 1)]][:id] == 1\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 1)]][:lifted_var_ref] ==\n          :(x[3])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 1)]][:nonlinear_type] ==\n          :MONOMIAL\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 2)]][:id] == 2\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 2)]][:lifted_var_ref] ==\n          :(x[4])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 2)]][:nonlinear_type] ==\n          :MONOMIAL\n\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 3\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] ==\n          :(x[5])\n    @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] ==\n          :BILINEAR\n\n    aff_mip = alpine.bounding_constr_mip\n\n    @test aff_mip[1][:rhs] == 0.0\n    @test aff_mip[1][:vars] == Any[:(x[1])]\n    @test aff_mip[1][:sense] == :(>=)\n    @test round(aff_mip[1][:coefs][1]; digits = 1) == -3.0\n    @test aff_mip[1][:cnt] == 1\n\n    @test aff_mip[2][:rhs] == 0.0\n    @test aff_mip[2][:vars] == Any[:(x[2])]\n    @test aff_mip[2][:sense] == :(>=)\n    @test aff_mip[2][:coefs] == Any[0.25]\n    @test aff_mip[2][:cnt] == 1\n\n    @test aff_mip[3][:rhs] == 0.0\n    @test aff_mip[3][:vars] == Any[:(x[2])]\n    @test aff_mip[3][:sense] == :(>=)\n    @test aff_mip[3][:coefs] == Any[5.0]\n    @test aff_mip[3][:cnt] == 1\n\n    @test aff_mip[4][:rhs] == 0.0\n    @test aff_mip[4][:vars] == Any[:(x[2])]\n    @test aff_mip[4][:sense] == :(>=)\n    @test aff_mip[4][:coefs] == Any[-120.0]\n    @test aff_mip[4][:cnt] == 1\n\n    @test aff_mip[5][:rhs] == 0.0\n    @test aff_mip[5][:vars] == Any[:(x[2])]\n    @test aff_mip[5][:sense] == :(>=)\n    @test aff_mip[5][:coefs] == Any[72000.0]\n    @test aff_mip[5][:cnt] == 1\n\n    @test aff_mip[6][:rhs] == 0.0\n    @test aff_mip[6][:vars] == Any[:(x[1])]\n    @test aff_mip[6][:sense] == :(>=)\n    @test aff_mip[6][:coefs] == Any[72000.0]\n    @test aff_mip[6][:cnt] == 1\n\n    @test aff_mip[7][:rhs] == 8.0\n    @test aff_mip[7][:vars] == Any[:(x[5])]\n    @test aff_mip[7][:sense] == :(>=)\n    @test aff_mip[7][:coefs] == Any[0.6]\n    @test aff_mip[7][:cnt] == 1\n\n    @test aff_mip[8][:rhs] == 0.0\n    @test aff_mip[8][:vars] == Any[:(x[2]), :(x[5])]\n    @test aff_mip[8][:sense] == :(>=)\n    @test aff_mip[8][:coefs] == Any[5.6, -72000.0]\n    @test aff_mip[8][:cnt] == 2\n\n    @test aff_mip[9][:rhs] == 0.0\n    @test aff_mip[9][:vars] == Any[:(x[2]), :(x[5])]\n    @test aff_mip[9][:sense] == :(>=)\n    @test aff_mip[9][:coefs] == Any[5.6, -36000.0]\n    @test aff_mip[9][:cnt] == 2\n\n    @test aff_mip[10][:rhs] == 0.0\n    @test aff_mip[10][:vars] == Any[:(x[2]), :(x[5]), :(x[2])]\n    @test aff_mip[10][:sense] == :(>=)\n    @test aff_mip[10][:coefs] == Any[5.6, -300.0, -1.75]\n    @test aff_mip[10][:cnt] == 3\n\n    @test aff_mip[11][:rhs] == 0.0\n    @test aff_mip[11][:vars] == Any[:(x[2]), :(x[1]), :(x[5])]\n    @test aff_mip[11][:sense] == :(>=)\n    @test aff_mip[11][:coefs] == Any[5.6, -0.5, 0.5]\n    @test aff_mip[11][:cnt] == 3\nend\n\n@testset \"Expression Parsing || part1 \" begin\n    m = Model(\n        optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        ),\n    )\n    @variable(m, x[1:4] >= 0)\n    @NLconstraint(m, x[1]^2 >= 1)    # Basic monomial x[5]=x[1]^2\n    @NLconstraint(m, x[1] * x[2] <= 1)  # x[6] <= 1 : x[6] = x[1]*x[2]\n    @NLconstraint(m, x[1]^2 * x[2]^2 <= 1)          # x[5] + x[7] <= 1 : x[7] = x[2]^2\n    @NLconstraint(m, x[1] * (x[2] * x[3]) >= 1)         # x[9] >= 1 : x[8] = x[2] * x[3] && x[9] = x[1]*x[8]\n    @NLconstraint(m, x[1]^2 * (x[2]^2 * x[3]^2) <= 1) # x[12] <= 1 : x[10] = x[3] ^ 2 && x[11] = x[7] * x[10] && x[12] = x[11]*[5]\n\n    alpine = _build(m)\n\n    @test alpine.bounding_constr_expr_mip[1] == :(x[5] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[2] == :(x[6] - 1.0 <= 0.0)\n    @test alpine.bounding_constr_expr_mip[3] == :(x[8] - 1.0 <= 0.0)\n    @test alpine.bounding_constr_expr_mip[4] == :(x[10] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[5] == :(x[13] - 1.0 <= 0.0)\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])])\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])])\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])])\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3])])\n    @test haskey(alpine.nonconvex_terms, [:(x[5]), :(x[7])])\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[9])])\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])])\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])])\n    @test haskey(alpine.nonconvex_terms, [:(x[5]), :(x[12])])\n\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 1\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2])]][:id] == 2\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 3\n    @test alpine.nonconvex_terms[[:(x[5]), :(x[7])]][:id] == 4\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[3])]][:id] == 5\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[9])]][:id] == 6\n    @test alpine.nonconvex_terms[[:(x[3]), :(x[3])]][:id] == 7\n    @test alpine.nonconvex_terms[[:(x[7]), :(x[11])]][:id] == 8\n    @test alpine.nonconvex_terms[[:(x[5]), :(x[12])]][:id] == 9\nend\n\n@testset \"Expression Parsing || part2\" begin\n    m = Model(\n        optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        ),\n    )\n\n    @variable(m, x[1:4] >= 0)\n    @NLconstraint(m, (x[1] * x[2]) * x[3] >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]^2) * x[3]^2 <= 1)\n\n    @NLconstraint(m, x[1] * (x[2]^2 * x[3]^2) >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]) * x[3]^2 <= 1)\n    @NLconstraint(m, x[1]^2 * (x[2] * x[3]) >= 1)\n    @NLconstraint(m, (x[1] * x[2]^2) * x[3] <= 1)\n\n    alpine = _build(m)\n\n    @test alpine.bounding_constr_expr_mip[1] == :(x[6] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[2] == :(x[11] - 1.0 <= 0.0)\n    @test alpine.bounding_constr_expr_mip[3] == :(x[13] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[4] == :(x[15] - 1.0 <= 0.0)\n    @test alpine.bounding_constr_expr_mip[5] == :(x[17] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[6] == :(x[19] - 1.0 <= 0.0)\n\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])]) #5\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[5])]) #6\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) #7\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) #8\n    @test haskey(alpine.nonconvex_terms, [:(x[7]), :(x[8])]) #9\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])]) #10\n    @test haskey(alpine.nonconvex_terms, [:(x[9]), :(x[10])]) #11\n    @test haskey(alpine.nonconvex_terms, [:(x[8]), :(x[10])]) #12\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[12])]) #13\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[7])])  #14\n    @test haskey(alpine.nonconvex_terms, [:(x[14]), :(x[10])]) #15\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3])]) #16\n    @test haskey(alpine.nonconvex_terms, [:(x[7]), :(x[16])]) #17\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[8])]) #18\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[18])]) #19\n\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2])]][:id] == 1\n    @test alpine.nonconvex_terms[[:(x[3]), :(x[5])]][:id] == 2\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 3\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 4\n    @test alpine.nonconvex_terms[[:(x[7]), :(x[8])]][:id] == 5\n    @test alpine.nonconvex_terms[[:(x[3]), :(x[3])]][:id] == 6\n    @test alpine.nonconvex_terms[[:(x[9]), :(x[10])]][:id] == 7\n    @test alpine.nonconvex_terms[[:(x[8]), :(x[10])]][:id] == 8\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[12])]][:id] == 9\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[7])]][:id] == 10\n    @test alpine.nonconvex_terms[[:(x[14]), :(x[10])]][:id] == 11\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[3])]][:id] == 12\n    @test alpine.nonconvex_terms[[:(x[7]), :(x[16])]][:id] == 13\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[8])]][:id] == 14\n    @test alpine.nonconvex_terms[[:(x[3]), :(x[18])]][:id] == 15\nend\n\n@testset \"Expression Parsing || part3\" begin\n    m = Model(\n        optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        ),\n    )\n\n    @variable(m, x[1:4] >= 0)\n    @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4] >= 1)\n    @NLconstraint(m, ((x[1]^2 * x[2]) * x[3]) * x[4] <= 1)\n    @NLconstraint(m, ((x[1] * x[2]^2) * x[3]) * x[4] >= 1)\n    @NLconstraint(m, ((x[1] * x[2]) * x[3]^2) * x[4] <= 1)\n    @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4]^2 >= 1)\n    @NLconstraint(m, ((x[1]^2 * x[2]^2) * x[3]^2) * x[4]^2 <= 1)\n\n    alpine = _build(m)\n\n    @test alpine.bounding_constr_expr_mip[1] == :(x[7] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[2] == :(x[11] - 1.0 <= 0.0)\n    @test alpine.bounding_constr_expr_mip[3] == :(x[15] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[4] == :(x[18] - 1.0 <= 0.0)\n    @test alpine.bounding_constr_expr_mip[5] == :(x[20] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[6] == :(x[23] - 1.0 <= 0.0)\n\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])]) #5\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[5])]) #6\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[6])]) #7\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) #8\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[8])]) #9\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[9])]) #10\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[10])]) #11\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) #12\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[12])])  #13\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[13])]) #14\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[14])]) #15\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])]) #16\n    @test haskey(alpine.nonconvex_terms, [:(x[5]), :(x[16])]) #17\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[17])]) #18\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[4])]) #19\n    @test haskey(alpine.nonconvex_terms, [:(x[6]), :(x[19])]) #20\n    @test haskey(alpine.nonconvex_terms, [:(x[8]), :(x[12])]) #21\n    @test haskey(alpine.nonconvex_terms, [:(x[21]), :(x[16])]) #22\n    @test haskey(alpine.nonconvex_terms, [:(x[22]), :(x[19])]) #23\n\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2])]][:id] == 1\n    @test alpine.nonconvex_terms[[:(x[3]), :(x[5])]][:id] == 2\n    @test alpine.nonconvex_terms[[:(x[4]), :(x[6])]][:id] == 3\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 4\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[8])]][:id] == 5\n    @test alpine.nonconvex_terms[[:(x[3]), :(x[9])]][:id] == 6\n    @test alpine.nonconvex_terms[[:(x[4]), :(x[10])]][:id] == 7\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 8\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[12])]][:id] == 9\n    @test alpine.nonconvex_terms[[:(x[3]), :(x[13])]][:id] == 10\n    @test alpine.nonconvex_terms[[:(x[4]), :(x[14])]][:id] == 11\n    @test alpine.nonconvex_terms[[:(x[3]), :(x[3])]][:id] == 12\n    @test alpine.nonconvex_terms[[:(x[5]), :(x[16])]][:id] == 13\n    @test alpine.nonconvex_terms[[:(x[4]), :(x[17])]][:id] == 14\n    @test alpine.nonconvex_terms[[:(x[4]), :(x[4])]][:id] == 15\n    @test alpine.nonconvex_terms[[:(x[6]), :(x[19])]][:id] == 16\n    @test alpine.nonconvex_terms[[:(x[8]), :(x[12])]][:id] == 17\n    @test alpine.nonconvex_terms[[:(x[21]), :(x[16])]][:id] == 18\n    @test alpine.nonconvex_terms[[:(x[22]), :(x[19])]][:id] == 19\nend\n\n@testset \"Expression Parsing || part7\" begin\n    m = Model(\n        optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        ),\n    )\n    @variable(m, x[1:4] >= 0)\n\n    @NLconstraint(m, x[1] * x[2] * x[3] * x[4] >= 1)\n    @NLconstraint(m, x[1]^2 * x[2] * x[3] * x[4] >= 1)\n    @NLconstraint(m, x[1] * x[2]^2 * x[3] * x[4] >= 1)\n    @NLconstraint(m, x[1] * x[2] * x[3]^2 * x[4]^2 >= 1)\n    @NLconstraint(m, x[1] * x[2]^2 * x[3]^2 * x[4] >= 1)\n    @NLconstraint(m, x[1]^2 * x[2] * x[3] * x[4]^2 >= 1)\n    @NLconstraint(m, x[1]^2 * x[2]^2 * x[3]^2 * x[4]^2 >= 1)\n\n    alpine = _build(m)\n\n    @test alpine.bounding_constr_expr_mip[1] == :(x[5] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[2] == :(x[7] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[3] == :(x[9] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[4] == :(x[12] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[5] == :(x[13] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[6] == :(x[14] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[7] == :(x[15] - 1.0 >= 0.0)\n\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2]), :(x[3]), :(x[4])]) #5\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) #6\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3]), :(x[4]), :(x[6])]) #7\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) #8\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[3]), :(x[4]), :(x[8])]) #9\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])]) #10\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[4])]) #11\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2]), :(x[10]), :(x[11])]) #12\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[4]), :(x[8]), :(x[10])]) #13\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3]), :(x[6]), :(x[11])]) #14\n    @test haskey(alpine.nonconvex_terms, [:(x[6]), :(x[8]), :(x[10]), :(x[11])]) #15\n\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:id] == 1 #5\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 2 #6\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[4]), :(x[6])]][:id] == 3 #7\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 4 #8\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[3]), :(x[4]), :(x[8])]][:id] == 5 #9\n    @test alpine.nonconvex_terms[[:(x[3]), :(x[3])]][:id] == 6 #10\n    @test alpine.nonconvex_terms[[:(x[4]), :(x[4])]][:id] == 7 #11\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[10]), :(x[11])]][:id] == 8  #12\n    @test alpine.nonconvex_terms[[:(x[1]), :(x[4]), :(x[8]), :(x[10])]][:id] == 9 #13\n    @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[6]), :(x[11])]][:id] == 10 #14\n    @test alpine.nonconvex_terms[[:(x[6]), :(x[8]), :(x[10]), :(x[11])]][:id] == 11 #15\nend\n\n@testset \"Expression Parsing || part8\" begin\n    m = Model(\n        optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        ),\n    )\n    @variable(m, x[1:4] >= 0)\n\n    @NLconstraint(m, (x[1] * x[2] * x[3]) * x[4] >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2] * x[3]) * x[4] >= 1)\n    @NLconstraint(m, x[1] * (x[2]^2 * x[3]) * x[4] >= 1)\n    @NLconstraint(m, x[1] * (x[2] * x[3]^2) * x[4] >= 1)\n    @NLconstraint(m, (x[1] * x[2]^2) * x[3] * x[4] >= 1)\n    @NLconstraint(m, (x[1] * x[2]) * x[3]^2 * x[4] >= 1)\n    @NLconstraint(m, (x[1] * x[2]) * x[3] * x[4]^2 >= 1)\n    @NLconstraint(m, (x[1] * x[2]) * x[3]^2 * x[4]^2 >= 1)\n    @NLconstraint(m, (x[1]^2 * x[2]^2 * x[3]^2) * x[4]^2 >= 1)\n\n    alpine = _build(m)\n\n    @test alpine.bounding_constr_expr_mip[1] == :(x[6] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[2] == :(x[9] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[3] == :(x[12] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[4] == :(x[15] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[5] == :(x[17] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[6] == :(x[19] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[7] == :(x[21] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[8] == :(x[22] - 1.0 >= 0.0)\n    @test alpine.bounding_constr_expr_mip[9] == :(x[24] - 1.0 >= 0.0)\n\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2]), :(x[3])]) #5\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[5])]) #6\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) #7\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3]), :(x[7])]) #8\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[8])]) #9\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) #10\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[10])]) #11\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[4]), :(x[11])]) #12\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])]) #13\n    @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[13])]) #14\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[4]), :(x[14])]) #15\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[10])]) #16\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[4]), :(x[16])]) #17\n    @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])]) #18\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[18]), :(x[13])]) #19\n    @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[4])]) #20\n    @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[18]), :(x[20])]) #21\n    @test haskey(alpine.nonconvex_terms, [:(x[18]), :(x[13]), :(x[20])]) #22\n    @test haskey(alpine.nonconvex_terms, [:(x[7]), :(x[10]), :(x[13])]) #23\n    @test haskey(alpine.nonconvex_terms, [:(x[23]), :(x[20])]) #24\nend\n\n@testset \"Expression Parsing || Convex\" begin\n    @testset \"Convex Parsing :: PART I\" begin\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        )\n        m = convex_test(solver = test_solver)\n\n        alpine = _build(m)\n\n        @test alpine.num_constr_convex == 19\n\n        # 0 : OBJ\n        @test alpine.obj_structure == :convex\n        @test alpine.nonlinear_constrs[0][:expr_orig] == :objective\n        @test alpine.nonlinear_constrs[0][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[0][:convexified] == false\n\n        @test alpine.bounding_obj_mip[:sense] === nothing\n        @test alpine.bounding_obj_mip[:coefs] == [1.0, 1.0]\n        @test alpine.bounding_obj_mip[:vars] == [:(x[1]), :(x[3])]\n        @test alpine.bounding_obj_mip[:rhs] == 0.0\n        @test alpine.bounding_obj_mip[:powers] == [2, 2]\n        @test alpine.bounding_obj_mip[:cnt] == 2\n\n        # 1\n        @test alpine.constr_structure[1] == :convex\n        @test alpine.nonlinear_constrs[1][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[1][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[1][:convexified] == false\n        @test alpine.bounding_constr_mip[1][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[1][:coefs] == [3.0, 4.0]\n        @test alpine.bounding_constr_mip[1][:vars] == [:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[1][:rhs] == 25.0\n        @test alpine.bounding_constr_mip[1][:powers] == [2, 2]\n        @test alpine.bounding_constr_mip[1][:cnt] == 2\n\n        # 2\n        @test alpine.constr_structure[2] == :convex\n        @test alpine.nonlinear_constrs[2][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[2][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[2][:convexified] == false\n        @test alpine.bounding_constr_mip[2][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[2][:coefs] == [3.0, 4.0]\n        @test alpine.bounding_constr_mip[2][:vars] == [:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[2][:rhs] == 25.0\n        @test alpine.bounding_constr_mip[2][:powers] == [2, 2]\n        @test alpine.bounding_constr_mip[2][:cnt] == 2\n\n        # 4\n        @test alpine.constr_structure[4] == :convex\n        @test alpine.nonlinear_constrs[4][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[4][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[4][:convexified] == false\n        @test alpine.bounding_constr_mip[4][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[4][:coefs] == [3.0, 4.0]\n        @test alpine.bounding_constr_mip[4][:vars] == [:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[4][:rhs] == 10.0\n        @test alpine.bounding_constr_mip[4][:powers] == [2, 2]\n        @test alpine.bounding_constr_mip[4][:cnt] == 2\n\n        # 5\n        @test alpine.constr_structure[5] == :convex\n        @test alpine.nonlinear_constrs[5][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[5][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[5][:convexified] == :false\n        @test alpine.bounding_constr_mip[5][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[5][:coefs] == [3.0, 4.0, 6.0]\n        @test alpine.bounding_constr_mip[5][:vars] == [:(x[1]), :(x[2]), :(x[3])]\n        @test alpine.bounding_constr_mip[5][:rhs] == 10.0\n        @test alpine.bounding_constr_mip[5][:powers] == [2, 2, 2]\n        @test alpine.bounding_constr_mip[5][:cnt] == 3\n\n        #6,7 excluded \n\n        # 8\n        @test alpine.constr_structure[8] == :convex\n        @test alpine.nonlinear_constrs[8][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[8][:convex_type] == :convexB\n        @test alpine.nonlinear_constrs[8][:convexified] == :false\n        @test alpine.bounding_constr_mip[8][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[8][:coefs] == [3.0, 1.0, 5.0]\n        @test alpine.bounding_constr_mip[8][:vars] == [:(x[1]), :(x[2]), :(x[3])]\n        @test alpine.bounding_constr_mip[8][:rhs] == 200.0\n        @test alpine.bounding_constr_mip[8][:powers] == [3.0, 3.0, 3.0]\n        @test alpine.bounding_constr_mip[8][:cnt] == 3\n\n        # 9\n        @test alpine.constr_structure[9] == :convex\n        @test alpine.nonlinear_constrs[9][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[9][:convex_type] == :convexB\n        @test alpine.nonlinear_constrs[9][:convexified] == :false\n        @test alpine.bounding_constr_mip[9][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[9][:coefs] == [1.0, 1.0, 1.0, 100.0]\n        @test alpine.bounding_constr_mip[9][:vars] == [:(x[1]), :(x[2]), :(x[3]), :(x[4])]\n        @test alpine.bounding_constr_mip[9][:rhs] == 200.0\n        @test alpine.bounding_constr_mip[9][:powers] == [3, 3, 3, 3]\n        @test alpine.bounding_constr_mip[9][:cnt] == 4\n\n        # 11\n        @test alpine.constr_structure[11] == :convex\n        @test alpine.nonlinear_constrs[11][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[11][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[11][:convexified] == :false\n        @test alpine.bounding_constr_mip[11][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[11][:coefs] == [3.0, 4.0]\n        @test alpine.bounding_constr_mip[11][:vars] == [:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[11][:rhs] == 25.0\n        @test alpine.bounding_constr_mip[11][:powers] == [2, 2]\n        @test alpine.bounding_constr_mip[11][:cnt] == 2\n\n        # 14\n        @test alpine.constr_structure[14] == :convex\n        @test alpine.nonlinear_constrs[14][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[14][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[14][:convexified] == :false\n        @test alpine.bounding_constr_mip[14][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[14][:coefs] == [3.0, 5.0]\n        @test alpine.bounding_constr_mip[14][:vars] == [:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[14][:rhs] == 25.0\n        @test alpine.bounding_constr_mip[14][:powers] == [2, 2]\n        @test alpine.bounding_constr_mip[14][:cnt] == 2\n\n        # 15\n        @test alpine.constr_structure[15] == :convex\n        @test alpine.nonlinear_constrs[15][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[15][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[15][:convexified] == :false\n        @test alpine.bounding_constr_mip[15][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[15][:coefs] == [3.0, 5.0, 1.0]\n        @test alpine.bounding_constr_mip[15][:vars] == [:(x[1]), :(x[2]), :(x[4])]\n        @test alpine.bounding_constr_mip[15][:rhs] == 25.0\n        @test alpine.bounding_constr_mip[15][:powers] == [2, 2, 2]\n        @test alpine.bounding_constr_mip[15][:cnt] == 3\n\n        # 19\n        @test alpine.constr_structure[19] == :convex\n        @test alpine.nonlinear_constrs[19][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[19][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[19][:convexified] == :false\n        @test alpine.bounding_constr_mip[19][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[19][:coefs] == [3.0, 16.0]\n        @test alpine.bounding_constr_mip[19][:vars] == [:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[19][:rhs] == 40.0\n        @test alpine.bounding_constr_mip[19][:powers] == [2, 2]\n        @test alpine.bounding_constr_mip[19][:cnt] == 2\n\n        # 22\n        @test alpine.constr_structure[22] == :convex\n        @test alpine.nonlinear_constrs[22][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[22][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[22][:convexified] == :false\n        @test alpine.bounding_constr_mip[22][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[22][:coefs] == [3.0, 4.0, 5.0, 6.0]\n        @test alpine.bounding_constr_mip[22][:vars] ==\n              [:(x[1]), :(x[2]), :(x[3]), :(x[4])]\n        @test alpine.bounding_constr_mip[22][:rhs] == 15.0\n        @test alpine.bounding_constr_mip[22][:powers] == [2, 2, 2, 2]\n        @test alpine.bounding_constr_mip[22][:cnt] == 4\n\n        # 25\n        @test alpine.constr_structure[25] == :convex\n        @test alpine.nonlinear_constrs[25][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[25][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[25][:convexified] == :false\n        @test alpine.bounding_constr_mip[25][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[25][:coefs] == [1.0, 1.0, 1.0, 1.0, 1.0]\n        @test alpine.bounding_constr_mip[25][:vars] ==\n              [:(x[1]), :(x[2]), :(x[3]), :(x[4]), :(x[5])]\n        @test alpine.bounding_constr_mip[25][:rhs] == 99999.0\n        @test alpine.bounding_constr_mip[25][:powers] == [2, 2, 2, 2, 2]\n        @test alpine.bounding_constr_mip[25][:cnt] == 5\n\n        # 26\n        @test alpine.constr_structure[26] == :convex\n        @test alpine.nonlinear_constrs[26][:expr_orig] == :constraints\n        @test alpine.nonlinear_constrs[26][:convex_type] == :convexA\n        @test alpine.nonlinear_constrs[26][:convexified] == :false\n        @test alpine.bounding_constr_mip[26][:sense] == :(<=)\n        @test alpine.bounding_constr_mip[26][:coefs] == [3.0, 4.0]\n        @test alpine.bounding_constr_mip[26][:vars] == [:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[26][:rhs] == 200.0\n        @test alpine.bounding_constr_mip[26][:powers] == [4, 4]\n        @test alpine.bounding_constr_mip[26][:cnt] == 2\n    end\nend\n\n@testset \"Expression Prasing || Linear Lifting\" begin\n    @testset \"Expression Parsing || Linear Lifting || nlp2\" begin\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"partition_scaling_factor\" => 8,\n            \"log_level\" => 100,\n        )\n\n        m = nlp2(solver = test_solver)\n\n        alpine = _build(m)\n\n        @test length(alpine.linear_terms) == 2\n        @test length(alpine.nonconvex_terms) == 4\n\n        lk = Vector{Any}(undef, 2)\n        lk[1] = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, -1.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3)])),\n        )\n        lk[2] = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, -2.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6)])),\n        )\n\n        @test length(keys(alpine.linear_terms)) == 2\n        yids = [4, 7]\n        for i in 1:length(keys(alpine.linear_terms))\n            for j in keys(alpine.linear_terms)\n                if alpine.linear_terms[j][:id] == i\n                    @test j == lk[i]\n                    @test j[:sign] == :+\n                    @test j[:scalar] == lk[i][:scalar]\n                    @test j[:coef_var] == lk[i][:coef_var]\n                    @test alpine.linear_terms[j][:y_idx] == yids[i]\n                end\n            end\n        end\n\n        @test haskey(alpine.linear_terms, lk[1])\n        @test haskey(alpine.linear_terms, lk[2])\n\n        @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])])\n        @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[4])])\n        @test haskey(alpine.nonconvex_terms, [:(x[7]), :(x[7])])\n        @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])])\n        @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 1\n        @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 3\n        @test alpine.nonconvex_terms[[:(x[4]), :(x[4])]][:id] == 2\n        @test alpine.nonconvex_terms[[:(x[7]), :(x[7])]][:id] == 4\n        @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:lifted_var_ref].args[2] == 3\n        @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:lifted_var_ref].args[2] == 6\n        @test alpine.nonconvex_terms[[:(x[4]), :(x[4])]][:lifted_var_ref].args[2] == 5\n        @test alpine.nonconvex_terms[[:(x[7]), :(x[7])]][:lifted_var_ref].args[2] == 8\n    end\n\n    @testset \"Expression Parsing || Linear Lifting || general\" begin\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        )\n\n        m = basic_linear_lift(solver = test_solver)\n\n        alpine = _build(m) # Setup internal model\n\n        lk = Vector{Any}(undef, 5)\n        lk[1] = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1), (-1.0, 2)])),\n        )\n        lk[2] = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(3.0, 2), (-1.0, 3)])),\n        )\n        lk[3] = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1), (1.0, 3)])),\n        )\n        lk[4] = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2), (1.0, 1)])),\n        )\n        lk[5] = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 3.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2), (1.0, 1), (1.0, 3)])),\n        )\n\n        @test length(keys(alpine.linear_terms)) == 5\n        yids = [8, 9, 12, 14, 16]\n        for i in 1:length(keys(alpine.linear_terms))\n            for j in keys(alpine.linear_terms)\n                if alpine.linear_terms[j][:id] == i\n                    @test j == lk[i]\n                    @test j[:sign] == :+\n                    @test j[:scalar] == lk[i][:scalar]\n                    @test j[:coef_var] == lk[i][:coef_var]\n                    @test alpine.linear_terms[j][:y_idx] == yids[i]\n                end\n            end\n        end\n\n        nlk1 = [:(x[8]), :(x[9]), :(x[12])]\n        nlk2 = [:(x[2]), :(x[2])]\n        nlk3 = [:(x[2]), :(x[3])]\n        nlk4 = [:(x[8]), :(x[8])]\n        nlk5 = [:(x[1]), :(x[3])]\n        nlk6 = [:(x[8]), :(x[9])]\n        nlk7 = [:(x[1]), :(x[2])]\n        nlk8 = [:(x[16]), :(x[15])]\n        nlk9 = [:(x[14]), :(x[14])]\n\n        @test alpine.nonconvex_terms[nlk1][:id] == 7\n        @test alpine.nonconvex_terms[nlk2][:id] == 3\n        @test alpine.nonconvex_terms[nlk3][:id] == 4\n        @test alpine.nonconvex_terms[nlk4][:id] == 6\n        @test alpine.nonconvex_terms[nlk5][:id] == 2\n        @test alpine.nonconvex_terms[nlk6][:id] == 5\n        @test alpine.nonconvex_terms[nlk7][:id] == 1\n        @test alpine.nonconvex_terms[nlk8][:id] == 9\n        @test alpine.nonconvex_terms[nlk9][:id] == 8\n\n        @test alpine.nonconvex_terms[nlk1][:lifted_var_ref].args[2] == 13\n        @test alpine.nonconvex_terms[nlk2][:lifted_var_ref].args[2] == 6\n        @test alpine.nonconvex_terms[nlk3][:lifted_var_ref].args[2] == 7\n        @test alpine.nonconvex_terms[nlk4][:lifted_var_ref].args[2] == 11\n        @test alpine.nonconvex_terms[nlk5][:lifted_var_ref].args[2] == 5\n        @test alpine.nonconvex_terms[nlk6][:lifted_var_ref].args[2] == 10\n        @test alpine.nonconvex_terms[nlk7][:lifted_var_ref].args[2] == 4\n        @test alpine.nonconvex_terms[nlk8][:lifted_var_ref].args[2] == 17\n        @test alpine.nonconvex_terms[nlk9][:lifted_var_ref].args[2] == 15\n\n        @test alpine.nonconvex_terms[nlk1][:nonlinear_type] == :MULTILINEAR\n        @test alpine.nonconvex_terms[nlk2][:nonlinear_type] == :MONOMIAL\n        @test alpine.nonconvex_terms[nlk3][:nonlinear_type] == :BILINEAR\n        @test alpine.nonconvex_terms[nlk4][:nonlinear_type] == :MONOMIAL\n        @test alpine.nonconvex_terms[nlk5][:nonlinear_type] == :BILINEAR\n        @test alpine.nonconvex_terms[nlk6][:nonlinear_type] == :BILINEAR\n        @test alpine.nonconvex_terms[nlk7][:nonlinear_type] == :BILINEAR\n        @test alpine.nonconvex_terms[nlk8][:nonlinear_type] == :BILINEAR\n        @test alpine.nonconvex_terms[nlk9][:nonlinear_type] == :MONOMIAL\n\n        @test alpine.nonconvex_terms[nlk1][:var_idxs] == [8, 9, 12]\n        @test alpine.nonconvex_terms[nlk2][:var_idxs] == [2, 2]\n        @test alpine.nonconvex_terms[nlk3][:var_idxs] == [2, 3]\n        @test alpine.nonconvex_terms[nlk4][:var_idxs] == [8]\n        @test alpine.nonconvex_terms[nlk5][:var_idxs] == [1, 3]\n        @test alpine.nonconvex_terms[nlk6][:var_idxs] == [8, 9]\n        @test alpine.nonconvex_terms[nlk7][:var_idxs] == [1, 2]\n        @test alpine.nonconvex_terms[nlk8][:var_idxs] == [16, 15]\n        @test alpine.nonconvex_terms[nlk9][:var_idxs] == [14]\n    end\n\n    @testset \"Expression Parsing || Linear Lifting || brainpc3\" begin\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"partition_scaling_factor\" => 8,\n            \"log_level\" => 100,\n        )\n\n        m = brainpc3(solver = test_solver)\n\n        alpine = _build(m)\n\n        @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:y_idx] == 6913\n        @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:id] == 2\n        @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:lifted_constr_ref] ==\n              :(x[6913] == (*)(x[6912]))\n        @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:y_idx] == 6970\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:id] == 25\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:lifted_constr_ref] ==\n              :(x[6970] == x[6903] * x[6969])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:y_idx] == 6915\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:id] == 3\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:lifted_constr_ref] ==\n              :(x[6915] == x[6903] * x[6914])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:y_idx] == 6920\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:id] == 5\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:lifted_constr_ref] ==\n              :(x[6920] == x[6903] * x[6919])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:y_idx] == 6928\n        @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:id] == 8\n        @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:lifted_constr_ref] ==\n              :(x[6928] == (*)(x[6927]))\n        @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:y_idx] == 6953\n        @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:id] == 18\n        @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:lifted_constr_ref] ==\n              :(x[6953] == (*)(x[6952]))\n        @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:y_idx] == 6963\n        @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:id] == 22\n        @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:lifted_constr_ref] ==\n              :(x[6963] == (*)(x[6962]))\n        @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:y_idx] == 6975\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:id] == 27\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:lifted_constr_ref] ==\n              :(x[6975] == x[6903] * x[6974])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:y_idx] == 6935\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:id] == 11\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:lifted_constr_ref] ==\n              :(x[6935] == x[6903] * x[6934])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:y_idx] == 6960\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:id] == 21\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:lifted_constr_ref] ==\n              :(x[6960] == x[6903] * x[6959])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:y_idx] == 7015\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:id] == 43\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:lifted_constr_ref] ==\n              :(x[7015] == x[6903] * x[7014])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:y_idx] == 6940\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:id] == 13\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:lifted_constr_ref] ==\n              :(x[6940] == x[6903] * x[6939])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:y_idx] == 7018\n        @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:id] == 44\n        @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:lifted_constr_ref] ==\n              :(x[7018] == (*)(x[7017]))\n        @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:y_idx] == 6930\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:id] == 9\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:lifted_constr_ref] ==\n              :(x[6930] == x[6903] * x[6929])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:y_idx] == 7013\n        @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:id] == 42\n        @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:lifted_constr_ref] ==\n              :(x[7013] == (*)(x[7012]))\n        @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:y_idx] == 6948\n        @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:id] == 16\n        @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:lifted_constr_ref] ==\n              :(x[6948] == (*)(x[6947]))\n        @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:y_idx] == 7033\n        @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:id] == 50\n        @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:lifted_constr_ref] ==\n              :(x[7033] == (*)(x[7032]))\n        @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:y_idx] == 6998\n        @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:id] == 36\n        @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:lifted_constr_ref] ==\n              :(x[6998] == (*)(x[6997]))\n        @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:y_idx] == 7028\n        @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:id] == 48\n        @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:lifted_constr_ref] ==\n              :(x[7028] == (*)(x[7027]))\n        @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:y_idx] == 7038\n        @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:id] == 52\n        @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:lifted_constr_ref] ==\n              :(x[7038] == (*)(x[7037]))\n        @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:y_idx] == 7008\n        @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:id] == 40\n        @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:lifted_constr_ref] ==\n              :(x[7008] == (*)(x[7007]))\n        @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:y_idx] == 6965\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:id] == 23\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:lifted_constr_ref] ==\n              :(x[6965] == x[6903] * x[6964])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:y_idx] == 6925\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:id] == 7\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:lifted_constr_ref] ==\n              :(x[6925] == x[6903] * x[6924])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:y_idx] == 6980\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:id] == 29\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:lifted_constr_ref] ==\n              :(x[6980] == x[6903] * x[6979])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:y_idx] == 6995\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:id] == 35\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:lifted_constr_ref] ==\n              :(x[6995] == x[6903] * x[6994])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:y_idx] == 6973\n        @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:id] == 26\n        @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:lifted_constr_ref] ==\n              :(x[6973] == (*)(x[6972]))\n        @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:y_idx] == 7020\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:id] == 45\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:lifted_constr_ref] ==\n              :(x[7020] == x[6903] * x[7019])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:y_idx] == 6993\n        @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:id] == 34\n        @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:lifted_constr_ref] ==\n              :(x[6993] == (*)(x[6992]))\n        @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:y_idx] == 7003\n        @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:id] == 38\n        @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:lifted_constr_ref] ==\n              :(x[7003] == (*)(x[7002]))\n        @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:y_idx] == 7023\n        @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:id] == 46\n        @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:lifted_constr_ref] ==\n              :(x[7023] == (*)(x[7022]))\n        @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:y_idx] == 6909\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:id] == 1\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:lifted_constr_ref] ==\n              :(x[6909] == x[6903] * x[6908])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:y_idx] == 6950\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:id] == 17\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:lifted_constr_ref] ==\n              :(x[6950] == x[6903] * x[6949])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:y_idx] == 7005\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:id] == 39\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:lifted_constr_ref] ==\n              :(x[7005] == x[6903] * x[7004])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:y_idx] == 6918\n        @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:id] == 4\n        @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:lifted_constr_ref] ==\n              :(x[6918] == (*)(x[6917]))\n        @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:y_idx] == 6938\n        @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:id] == 12\n        @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:lifted_constr_ref] ==\n              :(x[6938] == (*)(x[6937]))\n        @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:y_idx] == 6933\n        @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:id] == 10\n        @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:lifted_constr_ref] ==\n              :(x[6933] == (*)(x[6932]))\n        @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:y_idx] == 6990\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:id] == 33\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:lifted_constr_ref] ==\n              :(x[6990] == x[6903] * x[6989])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:y_idx] == 6978\n        @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:id] == 28\n        @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:lifted_constr_ref] ==\n              :(x[6978] == (*)(x[6977]))\n        @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:y_idx] == 6988\n        @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:id] == 32\n        @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:lifted_constr_ref] ==\n              :(x[6988] == (*)(x[6987]))\n        @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:y_idx] == 7035\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:id] == 51\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:lifted_constr_ref] ==\n              :(x[7035] == x[6903] * x[7034])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:y_idx] == 6968\n        @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:id] == 24\n        @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:lifted_constr_ref] ==\n              :(x[6968] == (*)(x[6967]))\n        @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:y_idx] == 6958\n        @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:id] == 20\n        @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:lifted_constr_ref] ==\n              :(x[6958] == (*)(x[6957]))\n        @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:y_idx] == 7010\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:id] == 41\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:lifted_constr_ref] ==\n              :(x[7010] == x[6903] * x[7009])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:y_idx] == 6943\n        @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:id] == 14\n        @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:lifted_constr_ref] ==\n              :(x[6943] == (*)(x[6942]))\n        @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:y_idx] == 6983\n        @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:id] == 30\n        @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:lifted_constr_ref] ==\n              :(x[6983] == (*)(x[6982]))\n        @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:y_idx] == 7000\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:id] == 37\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:lifted_constr_ref] ==\n              :(x[7000] == x[6903] * x[6999])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:y_idx] == 6945\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:id] == 15\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:lifted_constr_ref] ==\n              :(x[6945] == x[6903] * x[6944])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:y_idx] == 7025\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:id] == 47\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:lifted_constr_ref] ==\n              :(x[7025] == x[6903] * x[7024])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:y_idx] == 6955\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:id] == 19\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:lifted_constr_ref] ==\n              :(x[6955] == x[6903] * x[6954])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:y_idx] == 6923\n        @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:id] == 6\n        @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:lifted_constr_ref] ==\n              :(x[6923] == (*)(x[6922]))\n        @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:nonlinear_type] ==\n              :MONOMIAL\n        @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:y_idx] == 6985\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:id] == 31\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:lifted_constr_ref] ==\n              :(x[6985] == x[6903] * x[6984])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:constr_id] ==\n              Set(Any[0])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:y_idx] == 7030\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:id] == 49\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:lifted_constr_ref] ==\n              :(x[7030] == x[6903] * x[7029])\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:nonlinear_type] ==\n              :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:y_type] == :Cont\n        @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:constr_id] ==\n              Set(Any[0])\n        lk1 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6910), (-1.0, 6909)])),\n        )\n        @test alpine.linear_terms[lk1][:y_idx] == 6911\n        @test alpine.linear_terms[lk1][:id] == 3\n        @test alpine.linear_terms[lk1][:y_type] == :(Cont)\n        lk2 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3467), (1.0, 16)])),\n        )\n        @test alpine.linear_terms[lk2][:y_idx] == 6908\n        @test alpine.linear_terms[lk2][:id] == 1\n        @test alpine.linear_terms[lk2][:y_type] == :(Cont)\n        lk3 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(0.001548, 6903), (1.0, 7016), (1.0, 5702)]),\n            ),\n        )\n        @test alpine.linear_terms[lk3][:y_idx] == 7017\n        @test alpine.linear_terms[lk3][:id] == 67\n        @test alpine.linear_terms[lk3][:y_type] == :(Cont)\n        lk4 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 5162), (1.0, 1711)])),\n        )\n        @test alpine.linear_terms[lk4][:y_idx] == 7004\n        @test alpine.linear_terms[lk4][:id] == 59\n        @test alpine.linear_terms[lk4][:y_type] == :(Cont)\n        lk5 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 7021), (0.001435, 6903), (1.0, 6002)]),\n            ),\n        )\n        @test alpine.linear_terms[lk5][:y_idx] == 7022\n        @test alpine.linear_terms[lk5][:id] == 70\n        @test alpine.linear_terms[lk5][:y_type] == :(Cont)\n        lk6 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6935), (1.0, 166)])),\n        )\n        @test alpine.linear_terms[lk6][:y_idx] == 6936\n        @test alpine.linear_terms[lk6][:id] == 18\n        @test alpine.linear_terms[lk6][:y_type] == :(Cont)\n        lk7 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 4262), (0.00247, 6903), (1.0, 6981)]),\n            ),\n        )\n        @test alpine.linear_terms[lk7][:y_idx] == 6982\n        @test alpine.linear_terms[lk7][:id] == 46\n        @test alpine.linear_terms[lk7][:y_type] == :(Cont)\n        lk8 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7005), (1.0, 1711)])),\n        )\n        @test alpine.linear_terms[lk8][:y_idx] == 7006\n        @test alpine.linear_terms[lk8][:id] == 60\n        @test alpine.linear_terms[lk8][:y_type] == :(Cont)\n        lk9 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1951), (1.0, 5402)])),\n        )\n        @test alpine.linear_terms[lk9][:y_idx] == 7009\n        @test alpine.linear_terms[lk9][:id] == 62\n        @test alpine.linear_terms[lk9][:y_type] == :(Cont)\n        lk10 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 226), (-1.0, 6945)])),\n        )\n        @test alpine.linear_terms[lk10][:y_idx] == 6946\n        @test alpine.linear_terms[lk10][:id] == 24\n        @test alpine.linear_terms[lk10][:y_type] == :(Cont)\n        lk11 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7030), (1.0, 3151)])),\n        )\n        @test alpine.linear_terms[lk11][:y_idx] == 7031\n        @test alpine.linear_terms[lk11][:id] == 75\n        @test alpine.linear_terms[lk11][:y_type] == :(Cont)\n        lk12 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 6991), (1.0, 4622), (0.002066, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk12][:y_idx] == 6992\n        @test alpine.linear_terms[lk12][:id] == 52\n        @test alpine.linear_terms[lk12][:y_type] == :(Cont)\n        lk13 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 7026), (1.0, 6302), (0.001323, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk13][:y_idx] == 7027\n        @test alpine.linear_terms[lk13][:id] == 73\n        @test alpine.linear_terms[lk13][:y_type] == :(Cont)\n        lk14 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 46), (1.0, 3497)])),\n        )\n        @test alpine.linear_terms[lk14][:y_idx] == 6914\n        @test alpine.linear_terms[lk14][:id] == 5\n        @test alpine.linear_terms[lk14][:y_type] == :(Cont)\n        lk15 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6960), (1.0, 391)])),\n        )\n        @test alpine.linear_terms[lk15][:y_idx] == 6961\n        @test alpine.linear_terms[lk15][:id] == 33\n        @test alpine.linear_terms[lk15][:y_type] == :(Cont)\n        lk16 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 631), (-1.0, 6975)])),\n        )\n        @test alpine.linear_terms[lk16][:y_idx] == 6976\n        @test alpine.linear_terms[lk16][:id] == 42\n        @test alpine.linear_terms[lk16][:y_type] == :(Cont)\n        lk17 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1351), (-1.0, 6995)])),\n        )\n        @test alpine.linear_terms[lk17][:y_idx] == 6996\n        @test alpine.linear_terms[lk17][:id] == 54\n        @test alpine.linear_terms[lk17][:y_type] == :(Cont)\n        lk18 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3557), (1.0, 106)])),\n        )\n        @test alpine.linear_terms[lk18][:y_idx] == 6924\n        @test alpine.linear_terms[lk18][:id] == 11\n        @test alpine.linear_terms[lk18][:y_type] == :(Cont)\n        lk19 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 3647), (1.0, 6941), (0.004795, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk19][:y_idx] == 6942\n        @test alpine.linear_terms[lk19][:id] == 22\n        @test alpine.linear_terms[lk19][:y_type] == :(Cont)\n        lk20 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3722), (1.0, 271)])),\n        )\n        @test alpine.linear_terms[lk20][:y_idx] == 6949\n        @test alpine.linear_terms[lk20][:id] == 26\n        @test alpine.linear_terms[lk20][:y_type] == :(Cont)\n        lk21 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3647), (1.0, 196)])),\n        )\n        @test alpine.linear_terms[lk21][:y_idx] == 6939\n        @test alpine.linear_terms[lk21][:id] == 20\n        @test alpine.linear_terms[lk21][:y_type] == :(Cont)\n        lk22 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 3467), (1.0, 6911), (6.34e-6, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk22][:y_idx] == 6912\n        @test alpine.linear_terms[lk22][:id] == 4\n        @test alpine.linear_terms[lk22][:y_type] == :(Cont)\n        lk23 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1531), (1.0, 4982)])),\n        )\n        @test alpine.linear_terms[lk23][:y_idx] == 6999\n        @test alpine.linear_terms[lk23][:id] == 56\n        @test alpine.linear_terms[lk23][:y_type] == :(Cont)\n        lk24 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 106), (-1.0, 6925)])),\n        )\n        @test alpine.linear_terms[lk24][:y_idx] == 6926\n        @test alpine.linear_terms[lk24][:id] == 12\n        @test alpine.linear_terms[lk24][:y_type] == :(Cont)\n        lk25 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2251), (-1.0, 7015)])),\n        )\n        @test alpine.linear_terms[lk25][:y_idx] == 7016\n        @test alpine.linear_terms[lk25][:id] == 66\n        @test alpine.linear_terms[lk25][:y_type] == :(Cont)\n        lk26 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 6936), (0.004985, 6903), (1.0, 3617)]),\n            ),\n        )\n        @test alpine.linear_terms[lk26][:y_idx] == 6937\n        @test alpine.linear_terms[lk26][:id] == 19\n        @test alpine.linear_terms[lk26][:y_type] == :(Cont)\n        lk27 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6915), (1.0, 46)])),\n        )\n        @test alpine.linear_terms[lk27][:y_idx] == 6916\n        @test alpine.linear_terms[lk27][:id] == 6\n        @test alpine.linear_terms[lk27][:y_type] == :(Cont)\n        lk28 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 3557), (0.005968, 6903), (1.0, 6926)]),\n            ),\n        )\n        @test alpine.linear_terms[lk28][:y_idx] == 6927\n        @test alpine.linear_terms[lk28][:id] == 13\n        @test alpine.linear_terms[lk28][:y_type] == :(Cont)\n        lk29 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 271), (-1.0, 6950)])),\n        )\n        @test alpine.linear_terms[lk29][:y_idx] == 6951\n        @test alpine.linear_terms[lk29][:id] == 27\n        @test alpine.linear_terms[lk29][:y_type] == :(Cont)\n        lk30 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(0.002971, 6903), (1.0, 6971), (1.0, 3962)]),\n            ),\n        )\n        @test alpine.linear_terms[lk30][:y_idx] == 6972\n        @test alpine.linear_terms[lk30][:id] == 40\n        @test alpine.linear_terms[lk30][:y_type] == :(Cont)\n        lk31 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 511), (-1.0, 6970)])),\n        )\n        @test alpine.linear_terms[lk31][:y_idx] == 6971\n        @test alpine.linear_terms[lk31][:id] == 39\n        @test alpine.linear_terms[lk31][:y_type] == :(Cont)\n        lk32 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 7031), (1.0, 6602), (0.00121, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk32][:y_idx] == 7032\n        @test alpine.linear_terms[lk32][:id] == 76\n        @test alpine.linear_terms[lk32][:y_type] == :(Cont)\n        lk33 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(0.00166, 6903), (1.0, 7011), (1.0, 5402)]),\n            ),\n        )\n        @test alpine.linear_terms[lk33][:y_idx] == 7012\n        @test alpine.linear_terms[lk33][:id] == 64\n        @test alpine.linear_terms[lk33][:y_type] == :(Cont)\n        lk34 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, -0.003214),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 16)])),\n        )\n        @test alpine.linear_terms[lk34][:y_idx] == 6910\n        @test alpine.linear_terms[lk34][:id] == 2\n        @test alpine.linear_terms[lk34][:y_type] == :(Cont)\n        lk35 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7035), (1.0, 3451)])),\n        )\n        @test alpine.linear_terms[lk35][:y_idx] == 7036\n        @test alpine.linear_terms[lk35][:id] == 78\n        @test alpine.linear_terms[lk35][:y_type] == :(Cont)\n        lk36 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2551), (1.0, 6002)])),\n        )\n        @test alpine.linear_terms[lk36][:y_idx] == 7019\n        @test alpine.linear_terms[lk36][:id] == 68\n        @test alpine.linear_terms[lk36][:y_type] == :(Cont)\n        lk37 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3842), (1.0, 391)])),\n        )\n        @test alpine.linear_terms[lk37][:y_idx] == 6959\n        @test alpine.linear_terms[lk37][:id] == 32\n        @test alpine.linear_terms[lk37][:y_type] == :(Cont)\n        lk38 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 6966), (0.00307, 6903), (1.0, 3902)]),\n            ),\n        )\n        @test alpine.linear_terms[lk38][:y_idx] == 6967\n        @test alpine.linear_terms[lk38][:id] == 37\n        @test alpine.linear_terms[lk38][:y_type] == :(Cont)\n        lk39 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 3722), (0.003829, 6903), (1.0, 6951)]),\n            ),\n        )\n        @test alpine.linear_terms[lk39][:y_idx] == 6952\n        @test alpine.linear_terms[lk39][:id] == 28\n        @test alpine.linear_terms[lk39][:y_type] == :(Cont)\n        lk40 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 451), (1.0, 3902)])),\n        )\n        @test alpine.linear_terms[lk40][:y_idx] == 6964\n        @test alpine.linear_terms[lk40][:id] == 35\n        @test alpine.linear_terms[lk40][:y_type] == :(Cont)\n        lk41 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 7006), (1.0, 5162), (0.001713, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk41][:y_idx] == 7007\n        @test alpine.linear_terms[lk41][:id] == 61\n        @test alpine.linear_terms[lk41][:y_type] == :(Cont)\n        lk42 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 811), (-1.0, 6980)])),\n        )\n        @test alpine.linear_terms[lk42][:y_idx] == 6981\n        @test alpine.linear_terms[lk42][:id] == 45\n        @test alpine.linear_terms[lk42][:y_type] == :(Cont)\n        lk43 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 7001), (1.0, 4982), (0.00173, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk43][:y_idx] == 7002\n        @test alpine.linear_terms[lk43][:id] == 58\n        @test alpine.linear_terms[lk43][:y_type] == :(Cont)\n        lk44 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6920), (1.0, 76)])),\n        )\n        @test alpine.linear_terms[lk44][:y_idx] == 6921\n        @test alpine.linear_terms[lk44][:id] == 9\n        @test alpine.linear_terms[lk44][:y_type] == :(Cont)\n        lk45 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 4622), (1.0, 1171)])),\n        )\n        @test alpine.linear_terms[lk45][:y_idx] == 6989\n        @test alpine.linear_terms[lk45][:id] == 50\n        @test alpine.linear_terms[lk45][:y_type] == :(Cont)\n        lk46 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 991), (1.0, 4442)])),\n        )\n        @test alpine.linear_terms[lk46][:y_idx] == 6984\n        @test alpine.linear_terms[lk46][:id] == 47\n        @test alpine.linear_terms[lk46][:y_type] == :(Cont)\n        lk47 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6930), (1.0, 136)])),\n        )\n        @test alpine.linear_terms[lk47][:y_idx] == 6931\n        @test alpine.linear_terms[lk47][:id] == 15\n        @test alpine.linear_terms[lk47][:y_type] == :(Cont)\n        lk48 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 4802), (0.001891, 6903), (1.0, 6996)]),\n            ),\n        )\n        @test alpine.linear_terms[lk48][:y_idx] == 6997\n        @test alpine.linear_terms[lk48][:id] == 55\n        @test alpine.linear_terms[lk48][:y_type] == :(Cont)\n        lk49 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 511), (1.0, 3962)])),\n        )\n        @test alpine.linear_terms[lk49][:y_idx] == 6969\n        @test alpine.linear_terms[lk49][:id] == 38\n        @test alpine.linear_terms[lk49][:y_type] == :(Cont)\n        lk50 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 811), (1.0, 4262)])),\n        )\n        @test alpine.linear_terms[lk50][:y_idx] == 6979\n        @test alpine.linear_terms[lk50][:id] == 44\n        @test alpine.linear_terms[lk50][:y_type] == :(Cont)\n        lk51 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(0.01551, 6903), (1.0, 6916), (1.0, 3497)]),\n            ),\n        )\n        @test alpine.linear_terms[lk51][:y_idx] == 6917\n        @test alpine.linear_terms[lk51][:id] == 7\n        @test alpine.linear_terms[lk51][:y_type] == :(Cont)\n        lk52 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 451), (-1.0, 6965)])),\n        )\n        @test alpine.linear_terms[lk52][:y_idx] == 6966\n        @test alpine.linear_terms[lk52][:id] == 36\n        @test alpine.linear_terms[lk52][:y_type] == :(Cont)\n        lk53 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(0.005773, 6903), (1.0, 3587), (1.0, 6931)]),\n            ),\n        )\n        @test alpine.linear_terms[lk53][:y_idx] == 6932\n        @test alpine.linear_terms[lk53][:id] == 16\n        @test alpine.linear_terms[lk53][:y_type] == :(Cont)\n        lk54 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 631), (1.0, 4082)])),\n        )\n        @test alpine.linear_terms[lk54][:y_idx] == 6974\n        @test alpine.linear_terms[lk54][:id] == 41\n        @test alpine.linear_terms[lk54][:y_type] == :(Cont)\n        lk55 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 991), (-1.0, 6985)])),\n        )\n        @test alpine.linear_terms[lk55][:y_idx] == 6986\n        @test alpine.linear_terms[lk55][:id] == 48\n        @test alpine.linear_terms[lk55][:y_type] == :(Cont)\n        lk56 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 4802), (1.0, 1351)])),\n        )\n        @test alpine.linear_terms[lk56][:y_idx] == 6994\n        @test alpine.linear_terms[lk56][:id] == 53\n        @test alpine.linear_terms[lk56][:y_type] == :(Cont)\n        lk57 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 6946), (0.004409, 6903), (1.0, 3677)]),\n            ),\n        )\n        @test alpine.linear_terms[lk57][:y_idx] == 6947\n        @test alpine.linear_terms[lk57][:id] == 25\n        @test alpine.linear_terms[lk57][:y_type] == :(Cont)\n        lk58 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2251), (1.0, 5702)])),\n        )\n        @test alpine.linear_terms[lk58][:y_idx] == 7014\n        @test alpine.linear_terms[lk58][:id] == 65\n        @test alpine.linear_terms[lk58][:y_type] == :(Cont)\n        lk59 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7020), (1.0, 2551)])),\n        )\n        @test alpine.linear_terms[lk59][:y_idx] == 7021\n        @test alpine.linear_terms[lk59][:id] == 69\n        @test alpine.linear_terms[lk59][:y_type] == :(Cont)\n        lk60 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6940), (1.0, 196)])),\n        )\n        @test alpine.linear_terms[lk60][:y_idx] == 6941\n        @test alpine.linear_terms[lk60][:id] == 21\n        @test alpine.linear_terms[lk60][:y_type] == :(Cont)\n        lk61 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 3527), (1.0, 6921), (0.008919, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk61][:y_idx] == 6922\n        @test alpine.linear_terms[lk61][:id] == 10\n        @test alpine.linear_terms[lk61][:y_type] == :(Cont)\n        lk62 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7025), (1.0, 2851)])),\n        )\n        @test alpine.linear_terms[lk62][:y_idx] == 7026\n        @test alpine.linear_terms[lk62][:id] == 72\n        @test alpine.linear_terms[lk62][:y_type] == :(Cont)\n        lk63 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 6986), (1.0, 4442), (0.002252, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk63][:y_idx] == 6987\n        @test alpine.linear_terms[lk63][:id] == 49\n        @test alpine.linear_terms[lk63][:y_type] == :(Cont)\n        lk64 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(0.002765, 6903), (1.0, 6976), (1.0, 4082)]),\n            ),\n        )\n        @test alpine.linear_terms[lk64][:y_idx] == 6977\n        @test alpine.linear_terms[lk64][:id] == 43\n        @test alpine.linear_terms[lk64][:y_type] == :(Cont)\n        lk65 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 6956), (0.003269, 6903), (1.0, 3782)]),\n            ),\n        )\n        @test alpine.linear_terms[lk65][:y_idx] == 6957\n        @test alpine.linear_terms[lk65][:id] == 31\n        @test alpine.linear_terms[lk65][:y_type] == :(Cont)\n        lk66 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3587), (1.0, 136)])),\n        )\n        @test alpine.linear_terms[lk66][:y_idx] == 6929\n        @test alpine.linear_terms[lk66][:id] == 14\n        @test alpine.linear_terms[lk66][:y_type] == :(Cont)\n        lk67 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 166), (1.0, 3617)])),\n        )\n        @test alpine.linear_terms[lk67][:y_idx] == 6934\n        @test alpine.linear_terms[lk67][:id] == 17\n        @test alpine.linear_terms[lk67][:y_type] == :(Cont)\n        lk68 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7010), (1.0, 1951)])),\n        )\n        @test alpine.linear_terms[lk68][:y_idx] == 7011\n        @test alpine.linear_terms[lk68][:id] == 63\n        @test alpine.linear_terms[lk68][:y_type] == :(Cont)\n        lk69 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 7036), (0.001098, 6903), (1.0, 6902)]),\n            ),\n        )\n        @test alpine.linear_terms[lk69][:y_idx] == 7037\n        @test alpine.linear_terms[lk69][:id] == 79\n        @test alpine.linear_terms[lk69][:y_type] == :(Cont)\n        lk70 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3527), (1.0, 76)])),\n        )\n        @test alpine.linear_terms[lk70][:y_idx] == 6919\n        @test alpine.linear_terms[lk70][:id] == 8\n        @test alpine.linear_terms[lk70][:y_type] == :(Cont)\n        lk71 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(\n                :coef_var,\n                Set(Any[(1.0, 6961), (1.0, 3842), (0.00317, 6903)]),\n            ),\n        )\n        @test alpine.linear_terms[lk71][:y_idx] == 6962\n        @test alpine.linear_terms[lk71][:id] == 34\n        @test alpine.linear_terms[lk71][:y_type] == :(Cont)\n        lk72 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6990), (1.0, 1171)])),\n        )\n        @test alpine.linear_terms[lk72][:y_idx] == 6991\n        @test alpine.linear_terms[lk72][:id] == 51\n        @test alpine.linear_terms[lk72][:y_type] == :(Cont)\n        lk73 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3451), (1.0, 6902)])),\n        )\n        @test alpine.linear_terms[lk73][:y_idx] == 7034\n        @test alpine.linear_terms[lk73][:id] == 77\n        @test alpine.linear_terms[lk73][:y_type] == :(Cont)\n        lk74 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6302), (1.0, 2851)])),\n        )\n        @test alpine.linear_terms[lk74][:y_idx] == 7024\n        @test alpine.linear_terms[lk74][:id] == 71\n        @test alpine.linear_terms[lk74][:y_type] == :(Cont)\n        lk75 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1531), (-1.0, 7000)])),\n        )\n        @test alpine.linear_terms[lk75][:y_idx] == 7001\n        @test alpine.linear_terms[lk75][:id] == 57\n        @test alpine.linear_terms[lk75][:y_type] == :(Cont)\n        lk76 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3151), (1.0, 6602)])),\n        )\n        @test alpine.linear_terms[lk76][:y_idx] == 7029\n        @test alpine.linear_terms[lk76][:id] == 74\n        @test alpine.linear_terms[lk76][:y_type] == :(Cont)\n        lk77 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3782), (1.0, 331)])),\n        )\n        @test alpine.linear_terms[lk77][:y_idx] == 6954\n        @test alpine.linear_terms[lk77][:id] == 29\n        @test alpine.linear_terms[lk77][:y_type] == :(Cont)\n        lk78 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6955), (1.0, 331)])),\n        )\n        @test alpine.linear_terms[lk78][:y_idx] == 6956\n        @test alpine.linear_terms[lk78][:id] == 30\n        @test alpine.linear_terms[lk78][:y_type] == :(Cont)\n        lk79 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 226), (1.0, 3677)])),\n        )\n        @test alpine.linear_terms[lk79][:y_idx] == 6944\n        @test alpine.linear_terms[lk79][:id] == 23\n        @test alpine.linear_terms[lk79][:y_type] == :(Cont)\n    end\nend\n\n@testset \"Expression Parsing || Basic Multiplication Operators (Machine Generated for diffs)\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => JUNIPER,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n\n    m = operator_basic(solver = test_solver)\n    JuMP.set_optimize_hook(m, MOI.Utilities.attach_optimizer)\n    JuMP.optimize!(m)\n    JuMP.set_optimize_hook(m, nothing)\n    alpine = JuMP.backend(m).optimizer.model\n    Alpine.load!(alpine)\n\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4])]][:y_idx] == 31\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4])]][:id] == 27\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4])]][:lifted_constr_ref] ==\n          :(x[31] == x[3] * x[4])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[76])]][:y_idx] == 83\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[76])]][:id] == 79\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[76])]][:lifted_constr_ref] ==\n          :(x[83] == x[4] * x[5] * x[76])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[76])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[2])]][:y_idx] == 9\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[2])]][:id] == 5\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[2])]][:lifted_constr_ref] ==\n          :(x[9] == (*)(x[2]))\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[2])]][:nonlinear_type] == :MONOMIAL\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7])]][:y_idx] == 19\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7])]][:id] == 15\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7])]][:lifted_constr_ref] ==\n          :(x[19] == x[5] * x[7])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[31])]][:y_idx] == 32\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[31])]][:id] == 28\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[31])]][:lifted_constr_ref] ==\n          :(x[32] == x[2] * x[31])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[31])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10])]][:y_idx] == 49\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10])]][:id] == 45\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[49] == x[1] * x[2] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5]), :(x[9])]][:y_idx] == 50\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5]), :(x[9])]][:id] == 46\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5]), :(x[9])]][:lifted_constr_ref] ==\n          :(x[50] == x[3] * x[5] * x[9])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5]), :(x[9])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[47])]][:y_idx] == 69\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[47])]][:id] == 65\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[47])]][:lifted_constr_ref] ==\n          :(x[69] == x[4] * x[47])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[47])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[4])]][:y_idx] == 28\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[4])]][:id] == 24\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[4])]][:lifted_constr_ref] ==\n          :(x[28] == (*)(x[4]))\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[4])]][:nonlinear_type] == :MONOMIAL\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[10])]][:y_idx] == 37\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[10])]][:id] == 33\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[37] == x[4] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[10])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[1])]][:y_idx] == 5\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[1])]][:id] == 1\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[1])]][:lifted_constr_ref] ==\n          :(x[5] == (*)(x[1]))\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[1])]][:nonlinear_type] == :MONOMIAL\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[95])]][:y_idx] == 96\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[95])]][:id] == 92\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[95])]][:lifted_constr_ref] ==\n          :(x[96] == x[5] * x[95])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[95])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[40])]][:y_idx] == 41\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[40])]][:id] == 37\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[40])]][:lifted_constr_ref] ==\n          :(x[41] == x[2] * x[40])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[40])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10])]][:y_idx] == 26\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10])]][:id] == 22\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[26] == x[6] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[78]), :(x[28])]][:y_idx] == 84\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[78]), :(x[28])]][:id] == 80\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[78]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[84] == x[1] * x[78] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[78]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[43])]][:y_idx] == 58\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[43])]][:id] == 54\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[43])]][:lifted_constr_ref] ==\n          :(x[58] == x[6] * x[43])\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[43])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[6]), :(x[10])]][:y_idx] == 106\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[6]), :(x[10])]][:id] == 102\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[6]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[106] == x[4] * x[6] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[6]), :(x[10])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4]), :(x[10])]][:y_idx] == 90\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4]), :(x[10])]][:id] == 86\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[90] == x[2] * x[4] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4]), :(x[10])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[41])]][:y_idx] == 42\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[41])]][:id] == 38\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[41])]][:lifted_constr_ref] ==\n          :(x[42] == x[1] * x[41])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[41])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[37])]][:y_idx] == 38\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[37])]][:id] == 34\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[37])]][:lifted_constr_ref] ==\n          :(x[38] == x[2] * x[37])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[37])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[85])]][:y_idx] == 87\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[85])]][:id] == 83\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[85])]][:lifted_constr_ref] ==\n          :(x[87] == x[5] * x[85])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[85])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5]), :(x[28])]][:y_idx] == 66\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5]), :(x[28])]][:id] == 62\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[66] == x[2] * x[3] * x[5] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10])]][:y_idx] == 53\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10])]][:id] == 49\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[53] == x[5] * x[9] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6]), :(x[28])]][:y_idx] == 107\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6]), :(x[28])]][:id] == 103\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[107] == x[3] * x[6] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5])]][:y_idx] == 17\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5])]][:id] == 13\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5])]][:lifted_constr_ref] ==\n          :(x[17] == x[2] * x[5])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[37])]][:y_idx] == 57\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[37])]][:id] == 53\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[37])]][:lifted_constr_ref] ==\n          :(x[57] == x[6] * x[37])\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[37])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7]), :(x[28])]][:y_idx] == 81\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7]), :(x[28])]][:id] == 77\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[81] == x[5] * x[7] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[38])]][:y_idx] == 39\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[38])]][:id] == 35\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[38])]][:lifted_constr_ref] ==\n          :(x[39] == x[1] * x[38])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[38])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[9])]][:y_idx] == 48\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[9])]][:id] == 44\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[9])]][:lifted_constr_ref] ==\n          :(x[48] == x[1] * x[3] * x[9])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[9])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[23])]][:y_idx] == 24\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[23])]][:id] == 20\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[23])]][:lifted_constr_ref] ==\n          :(x[24] == x[4] * x[23])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[23])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[17])]][:y_idx] == 23\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[17])]][:id] == 19\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[17])]][:lifted_constr_ref] ==\n          :(x[23] == x[3] * x[17])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[17])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[10])]][:y_idx] == 51\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[10])]][:id] == 47\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[51] == x[1] * x[9] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[10])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[7])]][:y_idx] == 75\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[7])]][:id] == 71\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[7])]][:lifted_constr_ref] ==\n          :(x[75] == x[4] * x[5] * x[7])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[7])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[28])]][:y_idx] == 95\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[28])]][:id] == 91\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[95] == x[9] * x[10] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:y_idx] == 11\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:id] == 7\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[11] == x[9] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[37])]][:y_idx] == 100\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[37])]][:id] == 96\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[37])]][:lifted_constr_ref] ==\n          :(x[100] == x[1] * x[2] * x[37])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[37])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4]), :(x[5])]][:y_idx] == 62\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4]), :(x[5])]][:id] == 58\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4]), :(x[5])]][:lifted_constr_ref] ==\n          :(x[62] == x[2] * x[3] * x[4] * x[5])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4]), :(x[5])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[9]), :(x[10])]][:y_idx] == 65\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[9]), :(x[10])]][:id] == 61\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[9]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[65] == x[1] * x[4] * x[9] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[9]), :(x[10])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7]), :(x[28])]][:y_idx] == 80\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7]), :(x[28])]][:id] == 76\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[80] == x[1] * x[7] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:y_idx] == 46\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:id] == 42\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:lifted_constr_ref] ==\n          :(x[46] == x[1] * x[2] * x[3])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[40])]][:y_idx] == 59\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[40])]][:id] == 55\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[40])]][:lifted_constr_ref] ==\n          :(x[59] == x[17] * x[40])\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[40])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[85])]][:y_idx] == 86\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[85])]][:id] == 82\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[85])]][:lifted_constr_ref] ==\n          :(x[86] == x[1] * x[85])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[85])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[31])]][:y_idx] == 97\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[31])]][:id] == 93\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[31])]][:lifted_constr_ref] ==\n          :(x[97] == x[1] * x[2] * x[31])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[31])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[28])]][:y_idx] == 29\n    @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[28])]][:id] == 25\n    @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[29] == x[13] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[28])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[28])]][:y_idx] == 92\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[28])]][:id] == 88\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[92] == x[2] * x[3] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9])]][:y_idx] == 20\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9])]][:id] == 16\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9])]][:lifted_constr_ref] ==\n          :(x[20] == x[1] * x[9])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10]), :(x[28])]][:y_idx] == 109\n    @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10]), :(x[28])]][:id] == 105\n    @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[109] == x[14] * x[10] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[92])]][:y_idx] == 93\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[92])]][:id] == 89\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[92])]][:lifted_constr_ref] ==\n          :(x[93] == x[1] * x[92])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[92])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4])]][:y_idx] == 85\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4])]][:id] == 81\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4])]][:lifted_constr_ref] ==\n          :(x[85] == x[2] * x[3] * x[4])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:y_idx] == 16\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:id] == 12\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:lifted_constr_ref] ==\n          :(x[16] == x[1] * x[11])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[21])]][:y_idx] == 25\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[21])]][:id] == 21\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[21])]][:lifted_constr_ref] ==\n          :(x[25] == x[4] * x[21])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[21])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[53]), :(x[28])]][:y_idx] == 73\n    @test alpine.nonconvex_terms[Expr[:(x[53]), :(x[28])]][:id] == 69\n    @test alpine.nonconvex_terms[Expr[:(x[53]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[73] == x[53] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[53]), :(x[28])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[32])]][:y_idx] == 34\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[32])]][:id] == 30\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[32])]][:lifted_constr_ref] ==\n          :(x[34] == x[5] * x[32])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[32])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[28])]][:y_idx] == 40\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[28])]][:id] == 36\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[40] == x[3] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[28])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10]), :(x[28])]][:y_idx] == 67\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10]), :(x[28])]][:id] == 63\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[67] == x[5] * x[9] * x[10] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[43])]][:y_idx] == 102\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[43])]][:id] == 98\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[43])]][:lifted_constr_ref] ==\n          :(x[102] == x[5] * x[9] * x[43])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[43])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[26])]][:y_idx] == 27\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[26])]][:id] == 23\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[26])]][:lifted_constr_ref] ==\n          :(x[27] == x[4] * x[26])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[26])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[20]), :(x[31])]][:y_idx] == 56\n    @test alpine.nonconvex_terms[Expr[:(x[20]), :(x[31])]][:id] == 52\n    @test alpine.nonconvex_terms[Expr[:(x[20]), :(x[31])]][:lifted_constr_ref] ==\n          :(x[56] == x[20] * x[31])\n    @test alpine.nonconvex_terms[Expr[:(x[20]), :(x[31])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[4]), :(x[9])]][:y_idx] == 63\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[4]), :(x[9])]][:id] == 59\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[4]), :(x[9])]][:lifted_constr_ref] ==\n          :(x[63] == x[1] * x[3] * x[4] * x[9])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[4]), :(x[9])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10])]][:y_idx] == 15\n    @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10])]][:id] == 11\n    @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[15] == x[14] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[76])]][:y_idx] == 77\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[76])]][:id] == 73\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[76])]][:lifted_constr_ref] ==\n          :(x[77] == x[1] * x[4] * x[76])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[76])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[88])]][:y_idx] == 89\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[88])]][:id] == 85\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[88])]][:lifted_constr_ref] ==\n          :(x[89] == x[1] * x[88])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[88])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[90])]][:y_idx] == 94\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[90])]][:id] == 90\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[90])]][:lifted_constr_ref] ==\n          :(x[94] == x[5] * x[90])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[90])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10]), :(x[28])]][:y_idx] == 108\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10]), :(x[28])]][:id] == 104\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[108] == x[6] * x[10] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[48])]][:y_idx] == 70\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[48])]][:id] == 66\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[48])]][:lifted_constr_ref] ==\n          :(x[70] == x[4] * x[48])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[48])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[31])]][:y_idx] == 54\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[31])]][:id] == 50\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[31])]][:lifted_constr_ref] ==\n          :(x[54] == x[6] * x[31])\n    @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[31])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[31])]][:y_idx] == 99\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[31])]][:id] == 95\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[31])]][:lifted_constr_ref] ==\n          :(x[99] == x[1] * x[9] * x[31])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[31])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[35])]][:y_idx] == 36\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[35])]][:id] == 32\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[35])]][:lifted_constr_ref] ==\n          :(x[36] == x[1] * x[35])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[35])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9])]][:y_idx] == 14\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9])]][:id] == 10\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9])]][:lifted_constr_ref] ==\n          :(x[14] == x[5] * x[9])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[13])]][:y_idx] == 22\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[13])]][:id] == 18\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[13])]][:lifted_constr_ref] ==\n          :(x[22] == x[4] * x[13])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[13])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10]), :(x[28])]][:y_idx] == 64\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10]), :(x[28])]][:id] == 60\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[64] == x[1] * x[2] * x[10] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10]), :(x[28])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[46]), :(x[28])]][:y_idx] == 72\n    @test alpine.nonconvex_terms[Expr[:(x[46]), :(x[28])]][:id] == 68\n    @test alpine.nonconvex_terms[Expr[:(x[46]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[72] == x[46] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[46]), :(x[28])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[31])]][:y_idx] == 55\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[31])]][:id] == 51\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[31])]][:lifted_constr_ref] ==\n          :(x[55] == x[17] * x[31])\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[31])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[31])]][:y_idx] == 98\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[31])]][:id] == 94\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[31])]][:lifted_constr_ref] ==\n          :(x[98] == x[2] * x[5] * x[31])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[31])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[28])]][:y_idx] == 43\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[28])]][:id] == 39\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[43] == x[10] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[28])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[10])]][:y_idx] == 78\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[10])]][:id] == 74\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[78] == x[2] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[10])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[10])]][:y_idx] == 52\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[10])]][:id] == 48\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[52] == x[2] * x[5] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[10])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[90])]][:y_idx] == 91\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[90])]][:id] == 87\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[90])]][:lifted_constr_ref] ==\n          :(x[91] == x[1] * x[90])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[90])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[17])]][:y_idx] == 104\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[17])]][:id] == 100\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[17])]][:lifted_constr_ref] ==\n          :(x[104] == x[3] * x[4] * x[17])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[17])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[9])]][:y_idx] == 76\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[9])]][:id] == 72\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[9])]][:lifted_constr_ref] ==\n          :(x[76] == x[3] * x[9])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[9])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[78])]][:y_idx] == 79\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[78])]][:id] == 75\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[78])]][:lifted_constr_ref] ==\n          :(x[79] == x[1] * x[4] * x[78])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[78])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[3])]][:y_idx] == 10\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[3])]][:id] == 6\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[3])]][:lifted_constr_ref] ==\n          :(x[10] == (*)(x[3]))\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[3])]][:nonlinear_type] == :MONOMIAL\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[49])]][:y_idx] == 71\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[49])]][:id] == 67\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[49])]][:lifted_constr_ref] ==\n          :(x[71] == x[4] * x[49])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[49])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[9])]][:y_idx] == 88\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[9])]][:id] == 84\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[9])]][:lifted_constr_ref] ==\n          :(x[88] == x[3] * x[4] * x[9])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[9])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[15]), :(x[28])]][:y_idx] == 30\n    @test alpine.nonconvex_terms[Expr[:(x[15]), :(x[28])]][:id] == 26\n    @test alpine.nonconvex_terms[Expr[:(x[15]), :(x[28])]][:lifted_constr_ref] ==\n          :(x[30] == x[15] * x[28])\n    @test alpine.nonconvex_terms[Expr[:(x[15]), :(x[28])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[46])]][:y_idx] == 68\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[46])]][:id] == 64\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[46])]][:lifted_constr_ref] ==\n          :(x[68] == x[4] * x[46])\n    @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[46])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[11])]][:y_idx] == 12\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[11])]][:id] == 8\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[11])]][:lifted_constr_ref] ==\n          :(x[12] == x[5] * x[11])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[11])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[7])]][:y_idx] == 74\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[7])]][:id] == 70\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[7])]][:lifted_constr_ref] ==\n          :(x[74] == x[1] * x[4] * x[7])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[7])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[20])]][:y_idx] == 105\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[20])]][:id] == 101\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[20])]][:lifted_constr_ref] ==\n          :(x[105] == x[3] * x[4] * x[20])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[20])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[11])]][:y_idx] == 82\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[11])]][:id] == 78\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[11])]][:lifted_constr_ref] ==\n          :(x[82] == x[1] * x[4] * x[11])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[11])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[43])]][:y_idx] == 44\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[43])]][:id] == 40\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[43])]][:lifted_constr_ref] ==\n          :(x[44] == x[9] * x[43])\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[43])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:y_idx] == 61\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:id] == 57\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:lifted_constr_ref] ==\n          :(x[61] == x[1] * x[2] * x[3] * x[4])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[10])]][:y_idx] == 18\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[10])]][:id] == 14\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[10])]][:lifted_constr_ref] ==\n          :(x[18] == x[17] * x[10])\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[10])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7])]][:y_idx] == 8\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7])]][:id] == 4\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7])]][:lifted_constr_ref] ==\n          :(x[8] == x[1] * x[7])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:y_idx] == 6\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:id] == 2\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:lifted_constr_ref] ==\n          :(x[6] == x[1] * x[2])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[40])]][:y_idx] == 101\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[40])]][:id] == 97\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[40])]][:lifted_constr_ref] ==\n          :(x[101] == x[1] * x[2] * x[40])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[40])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[37])]][:y_idx] == 60\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[37])]][:id] == 56\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[37])]][:lifted_constr_ref] ==\n          :(x[60] == x[17] * x[37])\n    @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[37])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[6])]][:y_idx] == 103\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[6])]][:id] == 99\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[6])]][:lifted_constr_ref] ==\n          :(x[103] == x[3] * x[4] * x[6])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[6])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3])]][:y_idx] == 7\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3])]][:id] == 3\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3])]][:lifted_constr_ref] ==\n          :(x[7] == x[2] * x[3])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5])]][:y_idx] == 47\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5])]][:id] == 43\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5])]][:lifted_constr_ref] ==\n          :(x[47] == x[2] * x[3] * x[5])\n    @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5])]][:nonlinear_type] ==\n          :MULTILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6])]][:y_idx] == 13\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6])]][:id] == 9\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6])]][:lifted_constr_ref] ==\n          :(x[13] == x[3] * x[6])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[31])]][:y_idx] == 35\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[31])]][:id] == 31\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[31])]][:lifted_constr_ref] ==\n          :(x[35] == x[9] * x[31])\n    @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[31])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[32])]][:y_idx] == 33\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[32])]][:id] == 29\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[32])]][:lifted_constr_ref] ==\n          :(x[33] == x[1] * x[32])\n    @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[32])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[20])]][:y_idx] == 21\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[20])]][:id] == 17\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[20])]][:lifted_constr_ref] ==\n          :(x[21] == x[3] * x[20])\n    @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[20])]][:nonlinear_type] == :BILINEAR\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[44])]][:y_idx] == 45\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[44])]][:id] == 41\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[44])]][:lifted_constr_ref] ==\n          :(x[45] == x[5] * x[44])\n    @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[44])]][:nonlinear_type] == :BILINEAR\n\n    @test alpine.bounding_constr_mip[1][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[5])]\n    @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[1][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[1][:cnt] == 1\n    @test alpine.bounding_constr_mip[2][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[2][:vars] == Any[:(x[6])]\n    @test alpine.bounding_constr_mip[2][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[2][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[2][:cnt] == 1\n    @test alpine.bounding_constr_mip[3][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[3][:vars] == Any[:(x[5]), :(x[7])]\n    @test alpine.bounding_constr_mip[3][:coefs] == Any[1.0, 1.0]\n    @test alpine.bounding_constr_mip[3][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[3][:cnt] == 2\n    @test alpine.bounding_constr_mip[4][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[4][:vars] == Any[:(x[8])]\n    @test alpine.bounding_constr_mip[4][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[4][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[4][:cnt] == 1\n    @test alpine.bounding_constr_mip[5][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[5][:vars] == Any[:(x[12])]\n    @test alpine.bounding_constr_mip[5][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[5][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[5][:cnt] == 1\n    @test alpine.bounding_constr_mip[6][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[6][:vars] == Any[:(x[13])]\n    @test alpine.bounding_constr_mip[6][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[6][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[6][:cnt] == 1\n    @test alpine.bounding_constr_mip[7][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[7][:vars] == Any[:(x[15])]\n    @test alpine.bounding_constr_mip[7][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[7][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[7][:cnt] == 1\n    @test alpine.bounding_constr_mip[8][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[8][:vars] == Any[:(x[16])]\n    @test alpine.bounding_constr_mip[8][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[8][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[8][:cnt] == 1\n    @test alpine.bounding_constr_mip[9][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[9][:vars] == Any[:(x[18])]\n    @test alpine.bounding_constr_mip[9][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[9][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[9][:cnt] == 1\n    @test alpine.bounding_constr_mip[10][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[10][:vars] == Any[:(x[19])]\n    @test alpine.bounding_constr_mip[10][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[10][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[10][:cnt] == 1\n    @test alpine.bounding_constr_mip[11][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[11][:vars] == Any[:(x[21])]\n    @test alpine.bounding_constr_mip[11][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[11][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[11][:cnt] == 1\n    @test alpine.bounding_constr_mip[12][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[12][:vars] == Any[:(x[22])]\n    @test alpine.bounding_constr_mip[12][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[12][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[12][:cnt] == 1\n    @test alpine.bounding_constr_mip[13][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[13][:vars] == Any[:(x[24])]\n    @test alpine.bounding_constr_mip[13][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[13][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[13][:cnt] == 1\n    @test alpine.bounding_constr_mip[14][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[14][:vars] == Any[:(x[25])]\n    @test alpine.bounding_constr_mip[14][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[14][:sense] == :(>=)\n    @test alpine.bounding_constr_mip[14][:cnt] == 1\n    @test alpine.bounding_constr_mip[15][:rhs] == 1.0\n    @test alpine.bounding_constr_mip[15][:vars] == Any[:(x[27])]\n    @test alpine.bounding_constr_mip[15][:coefs] == Any[1.0]\n    @test alpine.bounding_constr_mip[15][:sense] == :(<=)\n    @test alpine.bounding_constr_mip[15][:cnt] == 1\nend\n\n@testset \"Expression Parsing || corner cases\" begin\n    @testset \"Corner Cases - 1 : sign convertor special case\" begin\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"minlp_solver\" => JUNIPER,\n            \"log_level\" => 100,\n        )\n\n        m = Model(test_solver)\n        @variable(m, 0 <= x[1:5] <= 1, Bin)\n        @NLconstraint(m, x[1] + -x[2] >= 2)\n        @objective(m, Min, x[1] + x[2])\n        alpine = _build(m)\n\n        @test alpine.bounding_constr_mip[1][:rhs] == 2.0\n        @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, -1.0]\n        @test alpine.bounding_constr_mip[1][:sense] == :(>=)\n        @test alpine.bounding_constr_mip[1][:cnt] == 2\n    end\n\n    @testset \"Corner Cases - 2 : full sub-expression\" begin\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        )\n\n        m = Model(test_solver)\n        @variable(m, x[1:5] >= 0)\n        @NLconstraint(m, (x[1] + 10 + 4 * x[2] + 200) * 5 >= 2 * 5)\n        @constraint(m, x[1] + x[2] + 200 >= 2)\n        @objective(m, Min, x[1] + x[2])\n        alpine = _build(m)\n\n        @test alpine.bounding_constr_mip[1][:rhs] == -198.0\n        @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0]\n        @test alpine.bounding_constr_mip[1][:sense] == :(>=)\n        @test alpine.bounding_constr_mip[1][:cnt] == 2\n        @test alpine.bounding_constr_mip[2][:rhs] == -1040.0\n        @test alpine.bounding_constr_mip[2][:vars] == Any[:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[2][:coefs] == Any[5.0, 20.0]\n        @test alpine.bounding_constr_mip[2][:sense] == :(>=)\n        @test alpine.bounding_constr_mip[2][:cnt] == 2\n    end\n\n    @testset \"Corner Cases - 2 : full sub-expression\" begin\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        )\n\n        m = Model(test_solver)\n        @variable(m, x[1:5] >= 0)\n        @NLconstraint(m, (x[1] + 10 + 4 * x[2] + 200) * 5 >= 2 * 5)\n        @constraint(m, x[1] + x[2] + 200 >= 2)\n        @objective(m, Min, x[1] + x[2])\n        alpine = _build(m)\n\n        @test alpine.bounding_constr_mip[1][:rhs] == -198.0\n        @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0]\n        @test alpine.bounding_constr_mip[1][:sense] == :(>=)\n        @test alpine.bounding_constr_mip[1][:cnt] == 2\n        @test alpine.bounding_constr_mip[2][:rhs] == -1040.0\n        @test alpine.bounding_constr_mip[2][:vars] == Any[:(x[1]), :(x[2])]\n        @test alpine.bounding_constr_mip[2][:coefs] == Any[5.0, 20.0]\n        @test alpine.bounding_constr_mip[2][:sense] == :(>=)\n        @test alpine.bounding_constr_mip[2][:cnt] == 2\n    end\nend\n\n@testset \"Expression Parsing || Discrete Multilinear\" begin\n    @testset \"Expression Parsing || bmpl && binlin && binprod\" begin\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"minlp_solver\" => JUNIPER,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        )\n\n        m = bpml(solver = test_solver)\n\n        alpine = _build(m) # Setup internal model\n\n        @test length(keys(alpine.nonconvex_terms)) == 12\n\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:y_idx] == 11\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:y_idx] == 12\n        @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[6])]][:y_idx] == 13\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:y_idx] == 14\n        @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[6])]][:y_idx] == 15\n        @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7])]][:y_idx] == 16\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[16])]][:y_idx] == 17\n        @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7]), :(x[8])]][:y_idx] == 18\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[18])]][:y_idx] == 19\n        @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[18])]][:y_idx] == 20\n        @test alpine.nonconvex_terms[Expr[\n            :(x[1]),\n            :(x[2]),\n            :(x[3]),\n            :(x[4]),\n            :(x[5]),\n        ]][:y_idx] == 21\n        @test alpine.nonconvex_terms[Expr[\n            :(x[6]),\n            :(x[7]),\n            :(x[9]),\n            :(x[10]),\n            :(x[6]),\n        ]][:y_idx] == 22\n\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:nonlinear_type] == :BINPROD\n        @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[6])]][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:nonlinear_type] ==\n              :BINPROD\n        @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[6])]][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7])]][:nonlinear_type] == :BILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[16])]][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7]), :(x[8])]][:nonlinear_type] ==\n              :MULTILINEAR\n        @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[18])]][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[18])]][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[Expr[\n            :(x[1]),\n            :(x[2]),\n            :(x[3]),\n            :(x[4]),\n            :(x[5]),\n        ]][:nonlinear_type] == :BINPROD\n        @test alpine.nonconvex_terms[Expr[\n            :(x[6]),\n            :(x[7]),\n            :(x[9]),\n            :(x[10]),\n            :(x[6]),\n        ]][:nonlinear_type] == :MULTILINEAR\n\n        @test length(alpine.var_type) == 22\n        @test alpine.var_type[11] == :Cont\n        @test alpine.var_type[12] == :Bin\n        @test alpine.var_type[13] == :Cont\n        @test alpine.var_type[14] == :Bin\n        @test alpine.var_type[15] == :Cont\n        @test alpine.var_type[16] == :Cont\n        @test alpine.var_type[17] == :Cont\n        @test alpine.var_type[18] == :Cont\n        @test alpine.var_type[19] == :Cont\n        @test alpine.var_type[20] == :Cont\n        @test alpine.var_type[21] == :Bin\n        @test alpine.var_type[22] == :Cont\n    end\n\n    @testset \"Expression Parsing || bmpl && binlin && binprod with linear lifting and coefficients\" begin\n        test_solver = optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"minlp_solver\" => JUNIPER,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n            \"log_level\" => 100,\n        )\n\n        m = bmpl_linearlifting(solver = test_solver)\n\n        alpine = _build(m)\n\n        lk1 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1), (1.0, 17)])),\n        )\n        lk2 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 11), (1.0, 12)])),\n        )\n        lk3 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 7), (2.0, 6)])),\n        )\n        lk4 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6), (1.0, 19)])),\n        )\n        lk5 = Dict{Symbol,Any}(\n            Pair{Symbol,Any}(:sign, :+),\n            Pair{Symbol,Any}(:scalar, 0.0),\n            Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6), (1.0, 25)])),\n        )\n\n        @test haskey(alpine.linear_terms, lk1)\n        @test haskey(alpine.linear_terms, lk2)\n        @test haskey(alpine.linear_terms, lk3)\n        @test haskey(alpine.linear_terms, lk4)\n        @test haskey(alpine.linear_terms, lk5)\n\n        @test alpine.linear_terms[lk1][:lifted_constr_ref] == :(x[20] == x[1] + x[17])\n        @test alpine.linear_terms[lk2][:lifted_constr_ref] == :(x[13] == x[11] + x[12])\n        @test alpine.linear_terms[lk3][:lifted_constr_ref] == :(x[15] == 2 * x[6] + x[7])\n        @test alpine.linear_terms[lk4][:lifted_constr_ref] == :(x[21] == x[6] + x[19])\n        @test alpine.linear_terms[lk5][:lifted_constr_ref] == :(x[26] == x[6] + x[25])\n\n        @test alpine.linear_terms[lk1][:y_idx] == 20\n        @test alpine.linear_terms[lk2][:y_idx] == 13\n        @test alpine.linear_terms[lk3][:y_idx] == 15\n        @test alpine.linear_terms[lk4][:y_idx] == 21\n        @test alpine.linear_terms[lk5][:y_idx] == 26\n\n        @test alpine.linear_terms[lk1][:y_type] == :Cont\n        @test alpine.linear_terms[lk2][:y_type] == :Cont\n        @test alpine.linear_terms[lk3][:y_type] == :Cont\n        @test alpine.linear_terms[lk4][:y_type] == :Cont\n        @test alpine.linear_terms[lk5][:y_type] == :Cont\n\n        nlk1 = Expr[:(x[18]), :(x[7])]\n        nlk2 = Expr[:(x[6]), :(x[7]), :(x[8])]\n        nlk3 = Expr[:(x[7]), :(x[10])]\n        nlk4 = Expr[:(x[2]), :(x[26])]\n        nlk5 = Expr[:(x[1]), :(x[13])]\n        nlk6 = Expr[:(x[1]), :(x[15])]\n        nlk7 = Expr[:(x[2]), :(x[6])]\n        nlk8 = Expr[:(x[24]), :(x[23])]\n        nlk9 = Expr[:(x[1]), :(x[2])]\n        nlk10 = Expr[:(x[2]), :(x[3])]\n        nlk11 = Expr[:(x[20]), :(x[21])]\n        nlk12 = Expr[:(x[3]), :(x[4])]\n\n        @test haskey(alpine.nonconvex_terms, nlk1)\n        @test haskey(alpine.nonconvex_terms, nlk2)\n        @test haskey(alpine.nonconvex_terms, nlk3)\n        @test haskey(alpine.nonconvex_terms, nlk4)\n        @test haskey(alpine.nonconvex_terms, nlk5)\n        @test haskey(alpine.nonconvex_terms, nlk6)\n        @test haskey(alpine.nonconvex_terms, nlk7)\n        @test haskey(alpine.nonconvex_terms, nlk8)\n        @test haskey(alpine.nonconvex_terms, nlk9)\n        @test haskey(alpine.nonconvex_terms, nlk10)\n        @test haskey(alpine.nonconvex_terms, nlk11)\n        @test haskey(alpine.nonconvex_terms, nlk12)\n\n        @test alpine.nonconvex_terms[nlk1][:id] == 7\n        @test alpine.nonconvex_terms[nlk2][:id] == 1\n        @test alpine.nonconvex_terms[nlk3][:id] == 9\n        @test alpine.nonconvex_terms[nlk4][:id] == 12\n        @test alpine.nonconvex_terms[nlk5][:id] == 3\n        @test alpine.nonconvex_terms[nlk6][:id] == 4\n        @test alpine.nonconvex_terms[nlk7][:id] == 5\n        @test alpine.nonconvex_terms[nlk8][:id] == 11\n        @test alpine.nonconvex_terms[nlk9][:id] == 6\n        @test alpine.nonconvex_terms[nlk10][:id] == 2\n        @test alpine.nonconvex_terms[nlk11][:id] == 8\n        @test alpine.nonconvex_terms[nlk12][:id] == 10\n\n        @test alpine.nonconvex_terms[nlk1][:y_type] == :Cont\n        @test alpine.nonconvex_terms[nlk2][:y_type] == :Cont\n        @test alpine.nonconvex_terms[nlk3][:y_type] == :Cont\n        @test alpine.nonconvex_terms[nlk4][:y_type] == :Cont\n        @test alpine.nonconvex_terms[nlk5][:y_type] == :Cont\n        @test alpine.nonconvex_terms[nlk6][:y_type] == :Cont\n        @test alpine.nonconvex_terms[nlk7][:y_type] == :Cont\n        @test alpine.nonconvex_terms[nlk8][:y_type] == :Cont\n        @test alpine.nonconvex_terms[nlk9][:y_type] == :Bin\n        @test alpine.nonconvex_terms[nlk10][:y_type] == :Bin\n        @test alpine.nonconvex_terms[nlk11][:y_type] == :Cont\n        @test alpine.nonconvex_terms[nlk12][:y_type] == :Bin\n\n        @test alpine.nonconvex_terms[nlk1][:y_idx] == 19\n        @test alpine.nonconvex_terms[nlk2][:y_idx] == 11\n        @test alpine.nonconvex_terms[nlk3][:y_idx] == 23\n        @test alpine.nonconvex_terms[nlk4][:y_idx] == 27\n        @test alpine.nonconvex_terms[nlk5][:y_idx] == 14\n        @test alpine.nonconvex_terms[nlk6][:y_idx] == 16\n        @test alpine.nonconvex_terms[nlk7][:y_idx] == 17\n        @test alpine.nonconvex_terms[nlk8][:y_idx] == 25\n        @test alpine.nonconvex_terms[nlk9][:y_idx] == 18\n        @test alpine.nonconvex_terms[nlk10][:y_idx] == 12\n        @test alpine.nonconvex_terms[nlk11][:y_idx] == 22\n        @test alpine.nonconvex_terms[nlk12][:y_idx] == 24\n\n        @test alpine.nonconvex_terms[nlk1][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[nlk2][:nonlinear_type] == :MULTILINEAR\n        @test alpine.nonconvex_terms[nlk3][:nonlinear_type] == :BILINEAR\n        @test alpine.nonconvex_terms[nlk4][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[nlk5][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[nlk6][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[nlk7][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[nlk8][:nonlinear_type] == :BINLIN\n        @test alpine.nonconvex_terms[nlk9][:nonlinear_type] == :BINPROD\n        @test alpine.nonconvex_terms[nlk10][:nonlinear_type] == :BINPROD\n        @test alpine.nonconvex_terms[nlk11][:nonlinear_type] == :BILINEAR\n        @test alpine.nonconvex_terms[nlk12][:nonlinear_type] == :BINPROD\n    end\nend\n\n@testset \"Expr dereferencing for @NLexpression\" begin\n    # Taken from Juniper.jl\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => JUNIPER,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"presolve_bt\" => true,\n    )\n\n    m = Model(test_solver)\n    @variable(m, 0 <= x <= 1)\n    @variable(m, 0 <= z <= 1, Bin)\n    b_expr = @NLexpression(m, z / 1)\n    @NLconstraint(m, 1.1 >= b_expr)\n    an_expr = @NLexpression(m, x / 1)\n    @NLobjective(m, Max, z + an_expr)\n    JuMP.optimize!(m)\n\n    @test isapprox(JuMP.objective_value(m), 2.0; atol = 1E-6)\n    @test isapprox(JuMP.value(z), 1; atol = 1e-6)\n    @test isapprox(JuMP.value(x), 1; atol = 1e-6)\nend\n\n@testset \"@NLexpression from quadratic @expression (Issue #221)\" begin\n    @testset \"Unit tests for `expr_is_emptysum`\" begin\n        # Empty sum\n        @test Alpine.expr_is_emptysum(:(+()))\n        # Not empty sum zero int\n        @test !Alpine.expr_is_emptysum(:(+(0, 0)))\n        # Not empty sum zero float\n        @test !Alpine.expr_is_emptysum(:(+(0.0, 0.0)))\n        # Not empty sum int with zero\n        @test !Alpine.expr_is_emptysum(:(+(1, 0)))\n        # Not empty sum int\n        @test !Alpine.expr_is_emptysum(:(+(1, 2)))\n        # Not empty sum float with zero\n        @test !Alpine.expr_is_emptysum(:(+(1.0, 0.0)))\n        # Not empty sum float\n        @test !Alpine.expr_is_emptysum(:(+(1.0, 3.0)))\n        # Not empty sum of variables\n        @test !Alpine.expr_is_emptysum(:(x + y))\n        # Not empty sum of variable with int\n        @test !Alpine.expr_is_emptysum(:(x + 1))\n        # Not empty sum of variable with float\n        @test !Alpine.expr_is_emptysum(:(x + 3.0))\n        # Not empty expression with non-linear function evaluation\n        @test !Alpine.expr_is_emptysum(:(sin(x)))\n        # Not empty expression with anonimus function\n        @test !Alpine.expr_is_emptysum(:(x -> log(x)))\n        # Not empty expression with anonimus function\n        @test !Alpine.expr_is_emptysum(:(x -> log(x)))\n        # Not empty expression with empty sum\n        @test !Alpine.expr_is_emptysum(:($(:(+())) + 1))\n    end\n\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        \"presolve_bt\" => true,\n        \"apply_partitioning\" => true,\n    )\n\n    m = JuMP.Model(test_solver)\n\n    @variable(m, -2 ≤ x ≤ 2, start = 1)\n    @expression(m, expr, x^2)\n    @NLconstraint(m, expr >= 1)\n    @NLconstraint(m, expr <= 2)\n    @NLobjective(m, Min, x^3)\n\n    JuMP.optimize!(m)\n    @test JuMP.termination_status(m) == JuMP.MOI.OPTIMAL\n    @test isapprox(JuMP.objective_value(m), -(sqrt(2))^3; atol = 1E-6)\n    @test isapprox(JuMP.value(m[:x]), -sqrt(2); atol = 1E-6)\nend\n"
  },
  {
    "path": "test/test_solver.jl",
    "content": "@testset \"Optimizer loading tests\" begin\n    # Random Model 1\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n    m = operator_c(solver = test_solver)\n\n    alpine = _build(m)\n    @test isa(alpine, Alpine.Optimizer)\n\n    # Expression Model 1\n    m = exprstest(solver = test_solver)\n    alpine = _build(m)\n    @test isa(alpine, Alpine.Optimizer)\nend\n\n@testset \"Partitioning variable selection tests :: nlp3\" begin\n    # Select all NL variable\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 0,\n        \"disc_uniform_rate\" => 10,\n        \"presolve_bp\" => false,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 1,\n        \"log_level\" => 100,\n    )\n\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n    alpine = JuMP.backend(m).optimizer.model\n\n    @test JuMP.termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(JuMP.objective_value(m), 7049.2478976; atol = 1e-3)\n    @test length(alpine.candidate_disc_vars) == 8\n    @test length(alpine.disc_vars) == 8\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 0\n\n    # Select all NL variable\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 2,\n        \"disc_uniform_rate\" => 10,\n        \"presolve_bp\" => false,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 1,\n        \"log_level\" => 100,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n    alpine = JuMP.backend(m).optimizer.model\n\n    @test JuMP.termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(JuMP.objective_value(m), 7049.2478976; atol = 1e-3)\n    @test length(alpine.candidate_disc_vars) == 8\n    @test length(alpine.disc_vars) == 8\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 2\n\n    # Minimum vertex cover algorithm\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 1,\n        \"disc_uniform_rate\" => 10,\n        \"presolve_bp\" => false,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 1,\n        \"log_level\" => 100,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n    alpine = JuMP.backend(m).optimizer.model\n\n    @test JuMP.termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(JuMP.objective_value(m), 7049.2478976; atol = 1e-3)\n    @test length(alpine.candidate_disc_vars) == 8\n    @test length(alpine.disc_vars) == 3\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 1\n\n    # Adaptive variable selection scheme :: disc_var_pick = 3\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 3,\n        \"presolve_bp\" => false,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 2,\n        \"log_level\" => 100,\n    )\n    m = nlp3(solver = test_solver)\n    JuMP.optimize!(m)\n    alpine = JuMP.backend(m).optimizer.model\n\n    @test JuMP.termination_status(m) == MOI.OTHER_LIMIT\n    @test isapprox(JuMP.objective_value(m), 7049.2478976; atol = 1e-3)\n    @test length(alpine.candidate_disc_vars) == 8\n    @test length(alpine.disc_vars) == 8\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 3\nend\n\n@testset \"Partitioning variable selection tests :: castro2m2\" begin\n\n    # Select all NL variables\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 0,\n        \"disc_uniform_rate\" => 10,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 0,\n    )\n\n    m = castro2m2(solver = test_solver)\n    JuMP.optimize!(m)\n    alpine = JuMP.backend(m).optimizer.model\n\n    @test JuMP.termination_status(m) == MOI.LOCALLY_SOLVED\n\n    @test length(alpine.candidate_disc_vars) == 10\n    @test length(alpine.disc_vars) == 10\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 0\n\n    # Select minimum vertex cover\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 1,\n        \"disc_uniform_rate\" => 10,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 0,\n    )\n\n    m = castro2m2(solver = test_solver)\n    JuMP.optimize!(m)\n    alpine = JuMP.backend(m).optimizer.model\n\n    @test JuMP.termination_status(m) == MOI.LOCALLY_SOLVED\n    @test length(alpine.candidate_disc_vars) == 10\n    @test length(alpine.disc_vars) == 4\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 1\n\n    # Criteria 15 static selection\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 2,\n        \"disc_uniform_rate\" => 15,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 0,\n    )\n\n    m = castro2m2(solver = test_solver)\n    JuMP.optimize!(m)\n    alpine = JuMP.backend(m).optimizer.model\n\n    @test JuMP.termination_status(m) == MOI.LOCALLY_SOLVED\n\n    @test length(alpine.candidate_disc_vars) == 10\n    @test length(alpine.disc_vars) == 10\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 2\nend\n\n@testset \"Partitioning variable selection tests :: blend029\" begin\n\n    # Select all NL variable\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => PAVITO,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 0,\n        \"disc_uniform_rate\" => 10,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 1,\n        \"log_level\" => 100,\n    )\n\n    m = blend029_gl(solver = test_solver)\n    alpine = _build(m)\n\n    @test length(alpine.candidate_disc_vars) == 26\n    @test Set(alpine.candidate_disc_vars) == Set([\n        26,\n        27,\n        29,\n        30,\n        32,\n        33,\n        35,\n        36,\n        37,\n        38,\n        39,\n        40,\n        41,\n        42,\n        43,\n        44,\n        45,\n        46,\n        47,\n        48,\n        55,\n        56,\n        57,\n        58,\n        59,\n        60,\n    ])\n    @test length(alpine.disc_vars) == 26\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 0\n\n    # Minimum vertex cover\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => PAVITO,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 1,\n        \"disc_uniform_rate\" => 10,\n        \"presolve_bp\" => false,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 1,\n        \"log_level\" => 100,\n    )\n\n    m = blend029_gl(solver = test_solver)\n    alpine = _build(m)\n\n    @test length(alpine.candidate_disc_vars) == 26\n    @test Set(alpine.candidate_disc_vars) == Set([\n        26,\n        27,\n        29,\n        30,\n        32,\n        33,\n        35,\n        36,\n        37,\n        38,\n        39,\n        40,\n        41,\n        42,\n        43,\n        44,\n        45,\n        46,\n        47,\n        48,\n        55,\n        56,\n        57,\n        58,\n        59,\n        60,\n    ])\n    @test length(alpine.disc_vars) == 10\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 1\n\n    # Adaptive Scheme vertex cover\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => PAVITO,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"disc_var_pick\" => 2,\n        \"disc_uniform_rate\" => 10,\n        \"presolve_bp\" => false,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 1,\n        \"log_level\" => 100,\n    )\n\n    m = blend029_gl(solver = test_solver)\n    alpine = _build(m)\n\n    @test length(alpine.candidate_disc_vars) == 26\n    @test length(Set(alpine.candidate_disc_vars)) == 26\n    # TODO provide a check to see if candidate_disc_vars are all covered\n    @test length(alpine.disc_vars) == 10\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 2\nend\n\n@testset \"Partitioning variable selection tests :: castro6m2\" begin\n\n    # Dynamic Scheme step 1\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        # We don't use the default HiGHS because it struggles with the numerical\n        # scaling of this example.\n        # \"mip_solver\" => HIGHS,\n        \"mip_solver\" => optimizer_with_attributes(\n            HiGHS.Optimizer,\n            MOI.Silent() => true,\n            \"presolve\" => \"off\",\n        ),\n        \"disc_var_pick\" => 3,\n        \"presolve_bp\" => true,\n        \"presolve_bt\" => false,\n        \"max_iter\" => 2,\n        \"log_level\" => 100,\n    )\n\n    m = castro6m2(solver = test_solver)\n    JuMP.optimize!(m)\n    alpine = JuMP.backend(m).optimizer.model\n\n    @test JuMP.termination_status(m) == MOI.OTHER_LIMIT\n    @test JuMP.objective_value(m) <= 228.87\n\n    @test length(alpine.candidate_disc_vars) == 24\n    @test length(Set(alpine.candidate_disc_vars)) == 24\n    @test length(alpine.disc_vars) == 12\n    @test length(Set(alpine.disc_vars)) == 12\n    @test MOI.get(m, MOI.RawOptimizerAttribute(\"disc_var_pick\")) == 3\nend\n\n@testset \"Hessians disabled with user-defined multivariate functions\" begin\n    test_solver = JuMP.optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"log_level\" => 100,\n    )\n    m = Model(test_solver)\n    my_f(x, y) = (x - 1)^2 + (y - 2)^2\n    JuMP.register(m, :my_f, 2, my_f, autodiff = true)\n    @variable(m, x[1:2])\n    @NLobjective(m, Min, my_f(x[1], x[2]))\n\n    JuMP.set_optimize_hook(m, MOI.Utilities.attach_optimizer)\n    JuMP.optimize!(m)\n    JuMP.set_optimize_hook(m, nothing)\n    alpine = JuMP.backend(m).optimizer.model\n    @test !(:Hess in Alpine.features_available(alpine))\nend\n\n@testset \"test_scalar_nonlinear_function\" begin\n    model = Model(\n        optimizer_with_attributes(\n            Alpine.Optimizer,\n            \"nlp_solver\" => IPOPT,\n            \"mip_solver\" => HIGHS,\n        ),\n    )\n    @variable(model, -1 <= x[i in 1:3] <= 2)\n    @objective(model, Max, prod(x))\n    @constraint(model, x[1]^3 <= 1)\n    @constraint(model, x[2]^4 >= 1)\n    @constraint(model, x[3]^3 == 1)\n    optimize!(model)\n    @test isapprox(value.(x), [1, 2, 1]; atol = 1e-6)\n    @test isapprox(objective_value(model), 2; atol = 1e-6)\nend\n"
  },
  {
    "path": "test/test_utility.jl",
    "content": "@testset \"Utility Function Tests: Solver identifier fetch\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"minlp_solver\" => PAVITO,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => HIGHS,\n        \"presolve_bp\" => true,\n        \"disc_var_pick\" => 1,\n        \"log_level\" => 100,\n        \"max_iter\" => 2,\n    )\n\n    m = blend029_gl(solver = test_solver)\n    alpine = JuMP.backend(m).optimizer.model\n\n    Alpine._fetch_mip_solver_identifier(\n        alpine;\n        override = \"Gurobi.GurobiSolver(nothing, Any[])\",\n    )\n    @test alpine.mip_solver_id == \"Gurobi\"\n    Alpine._fetch_mip_solver_identifier(alpine; override = \"CPLEX.CplexSolver(Any[])\")\n    @test alpine.mip_solver_id == \"CPLEX\"\n    Alpine._fetch_nlp_solver_identifier(alpine; override = \"Ipopt.IpoptSolver(Any[])\")\n    @test alpine.nlp_solver_id == \"Ipopt\"\nend\n\n@testset \"Solver Funtion Tests :: Embedding\" begin\n    ebdmap = Alpine.embedding_map(5)\n    @test ebdmap[:L] == 2\n    @test ebdmap[:H] == [[0, 0], [0, 1], [1, 1], [1, 0]]\n    @test ebdmap[1] == Set([4, 5])\n    @test ebdmap[2] == Set([3])\n    @test ebdmap[3] == Set([2, 1])\n    @test ebdmap[4] == Set([5, 1])\n\n    ebdmap = Alpine.embedding_map(9)\n    @test ebdmap[:L] == 3\n    @test ebdmap[:H_orig] == [\"000\", \"001\", \"011\", \"010\", \"110\", \"111\", \"101\", \"100\"]\n    @test ebdmap[:H] == [\n        [0, 0, 0],\n        [0, 0, 1],\n        [0, 1, 1],\n        [0, 1, 0],\n        [1, 1, 0],\n        [1, 1, 1],\n        [1, 0, 1],\n        [1, 0, 0],\n    ]\n    @test ebdmap[1] == Set([7, 9, 8, 6])\n    @test ebdmap[2] == Set([4, 5, 6])\n    @test ebdmap[3] == Set([7, 3])\n    @test ebdmap[4] == Set([4, 3, 2, 1])\n    @test ebdmap[5] == Set([9, 2, 8, 1])\n    @test ebdmap[6] == Set([9, 5, 1])\n\n    ebdmap = Alpine.embedding_map(12)\n    @test ebdmap[:L] == 4\n    @test ebdmap[:H_orig] == [\n        \"0000\",\n        \"0001\",\n        \"0011\",\n        \"0010\",\n        \"0110\",\n        \"0111\",\n        \"0101\",\n        \"0100\",\n        \"1100\",\n        \"1101\",\n        \"1111\",\n        \"1110\",\n        \"1010\",\n        \"1011\",\n        \"1001\",\n        \"1000\",\n    ]\n    @test ebdmap[:H] == [\n        [0, 0, 0, 0],\n        [0, 0, 0, 1],\n        [0, 0, 1, 1],\n        [0, 0, 1, 0],\n        [0, 1, 1, 0],\n        [0, 1, 1, 1],\n        [0, 1, 0, 1],\n        [0, 1, 0, 0],\n        [1, 1, 0, 0],\n        [1, 1, 0, 1],\n        [1, 1, 1, 1],\n        [1, 1, 1, 0],\n        [1, 0, 1, 0],\n        [1, 0, 1, 1],\n        [1, 0, 0, 1],\n        [1, 0, 0, 0],\n    ]\n    @test ebdmap[1] == Set([10, 11, 12])\n    @test ebdmap[2] == Set([7, 9, 10, 11, 8, 6, 12])\n    @test ebdmap[3] == Set([4, 5, 6, 12])\n    @test ebdmap[4] == Set([7, 3, 11, 12])\n    @test ebdmap[5] == Set([7, 4, 2, 3, 5, 8, 6, 1])\n    @test ebdmap[6] == Set([4, 2, 3, 1])\n    @test ebdmap[7] == Set([9, 10, 2, 8, 1])\n    @test ebdmap[8] == Set([9, 5, 1])\nend\n\n@testset \"Utility Function Tests: check_solution_history test\" begin\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        \"presolve_bt\" => false,\n        \"partition_scaling_factor\" => 10,\n        \"disc_consecutive_forbid\" => false,\n    )\n\n    m1 = mathopt(solver = test_solver)\n    JuMP.optimize!(m1)\n    alpine1 = JuMP.backend(m1).optimizer.model\n\n    Alpine.variable_values(m1)\n\n    test_solver = optimizer_with_attributes(\n        Alpine.Optimizer,\n        \"nlp_solver\" => IPOPT,\n        \"mip_solver\" => PAVITO,\n        \"presolve_bt\" => false,\n        \"partition_scaling_factor\" => 10,\n        \"disc_consecutive_forbid\" => true,\n    )\n\n    m2 = mathopt(solver = test_solver)\n    JuMP.optimize!(m2)\n    alpine2 = JuMP.backend(m2).optimizer.model\n\n    @test termination_status(m1) == MOI.OPTIMAL\n    @test termination_status(m2) == MOI.OPTIMAL\n    @test alpine1.logs[:n_iter] >= alpine2.logs[:n_iter]\n    @test isapprox(JuMP.objective_value(m1), JuMP.objective_value(m2), atol = 1E-5)\nend\n"
  }
]