Repository: lanl-ansi/Alpine.jl Branch: master Commit: b1e3664dc045 Files: 80 Total size: 2.7 MB Directory structure: gitextract__215ozn6/ ├── .JuliaFormatter.toml ├── .codecov.yml ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ └── workflows/ │ ├── CompatHelper.yml │ ├── TagBot.yml │ ├── ci.yml │ ├── documentation.yml │ └── format_check.yml ├── .gitignore ├── CHANGELOG.md ├── CITATION.bib ├── LICENSE.md ├── Project.toml ├── README.md ├── docs/ │ ├── Project.toml │ ├── README.md │ ├── make.jl │ └── src/ │ ├── algorithm.md │ ├── assets/ │ │ └── themes/ │ │ ├── dark.scss │ │ ├── darkdefs.scss │ │ ├── documenter-dark.css │ │ ├── documenter-dark.css.css │ │ ├── documenter-light.css │ │ ├── documenter-light.css.css │ │ ├── light.scss │ │ ├── lightdefs.scss │ │ └── style.scss │ ├── choosingsolver.md │ ├── functions.md │ ├── index.md │ └── parameters.md ├── examples/ │ ├── JuMP_models.jl │ ├── MINLPs/ │ │ ├── blend.jl │ │ ├── bnlp.jl │ │ ├── brainpc3.jl │ │ ├── castro.jl │ │ ├── circle.jl │ │ ├── convex.jl │ │ ├── discretemulti.jl │ │ ├── div.jl │ │ ├── exprstest.jl │ │ ├── linearlift.jl │ │ ├── mult3.jl │ │ ├── mult4.jl │ │ ├── multi.jl │ │ ├── nlp.jl │ │ ├── rosenbrock.jl │ │ └── sincos.jl │ ├── Project.toml │ ├── README.md │ ├── optimizers.jl │ ├── random_QCQPs/ │ │ ├── README.md │ │ ├── bilinear/ │ │ │ └── generate_bilinear_instances.py │ │ ├── pooling/ │ │ │ ├── generate_pooling_instances.py │ │ │ └── haverly_15_addedges_150_attr_0_1.json │ │ └── qcqp/ │ │ └── generate_qcqp_instances.py │ └── run_examples.jl ├── src/ │ ├── Alpine.jl │ ├── MOI_wrapper/ │ │ ├── MOI_function2expr.jl │ │ └── MOI_wrapper.jl │ ├── bounding_model.jl │ ├── const.jl │ ├── embedding.jl │ ├── heuristics.jl │ ├── log.jl │ ├── main_algorithm.jl │ ├── multilinear.jl │ ├── nlexpr.jl │ ├── operators.jl │ ├── presolve.jl │ ├── relaxations.jl │ ├── solver_options.jl │ ├── utility.jl │ └── variable_bounds.jl └── test/ ├── runtests.jl ├── test_algorithm.jl ├── test_expression.jl ├── test_solver.jl └── test_utility.jl ================================================ FILE CONTENTS ================================================ ================================================ FILE: .JuliaFormatter.toml ================================================ # Configuration file for JuliaFormatter.jl # For more information, see: https://domluna.github.io/JuliaFormatter.jl/stable/config/ always_for_in = true always_use_return = true margin = 90 remove_extra_newlines = true short_to_long_function_def = true ================================================ FILE: .codecov.yml ================================================ status: project: # measuring the overall project coverage default: # context, you can create multiple ones with custom titles enabled: yes # must be yes|true to enable this status target: 80% threshold: 5% # allowed to drop X% and still result in a "success" PR status branches: threshold: 5% # allowed to drop X% and still result in a "success" commit status ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Help us track down bugs in Alpine. title: '' labels: 'bug' assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. Simple examples which reproduce the bug will be helpful. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: 'Suggest an idea for Alpine. ' title: '' labels: 'enhancement' assignees: '' --- Welcome to Alpine! You can use this Github issue to suggest a new feature for Alpine. **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. ================================================ FILE: .github/workflows/CompatHelper.yml ================================================ name: CompatHelper on: schedule: - cron: 0 0 * * * workflow_dispatch: jobs: CompatHelper: runs-on: ubuntu-latest steps: - name: Pkg.add("CompatHelper") run: julia -e 'using Pkg; Pkg.add("CompatHelper")' - name: CompatHelper.main() env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }} run: julia -e 'using CompatHelper; CompatHelper.main()' ================================================ FILE: .github/workflows/TagBot.yml ================================================ name: TagBot on: issue_comment: types: - created workflow_dispatch: jobs: TagBot: if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot' runs-on: ubuntu-latest steps: - uses: JuliaRegistries/TagBot@v1 with: token: ${{ secrets.GITHUB_TOKEN }} ssh: ${{ secrets.DOCUMENTER_KEY }} ================================================ FILE: .github/workflows/ci.yml ================================================ name: CI on: push: branches: - master - release-* pull_request: types: [opened, synchronize, reopened] # needed to allow julia-actions/cache to delete old caches that it has created permissions: actions: write contents: read jobs: test: name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: version: ['1'] os: [ubuntu-latest, macOS-latest, windows-latest] arch: [x64] steps: - uses: actions/checkout@v4 - uses: julia-actions/setup-julia@v2 with: version: ${{ matrix.version }} arch: ${{ matrix.arch }} - uses: julia-actions/cache@v2 - uses: julia-actions/julia-buildpkg@v1 - uses: julia-actions/julia-runtest@v1 with: depwarn: error - uses: julia-actions/julia-processcoverage@v1 - uses: codecov/codecov-action@v4 with: file: lcov.info ================================================ FILE: .github/workflows/documentation.yml ================================================ name: Documentation on: push: branches: [master] tags: '*' pull_request: types: [opened, synchronize, reopened] jobs: docs: if: "!contains(github.event.head_commit.message, 'skip ci')" name: Documentation runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: julia-actions/setup-julia@latest with: version: '1' - name: Install Dependencies run: julia --project=docs -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()' - name: Build and Deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} run: julia --project=docs docs/make.jl ================================================ FILE: .github/workflows/format_check.yml ================================================ name: format-check on: push: branches: - master - release-* pull_request: types: [opened, synchronize, reopened] jobs: build: runs-on: ubuntu-latest steps: - uses: julia-actions/setup-julia@latest with: version: '1' - uses: actions/checkout@v4 - name: Format check shell: julia --color=yes {0} run: | using Pkg Pkg.add(PackageSpec(name="JuliaFormatter", version="1")) using JuliaFormatter format("src/MOI_wrapper", verbose=true) format("test", verbose=true) format("docs", verbose=true) out = String(read(Cmd(`git diff`))) if isempty(out) exit(0) end @error "Some files have not been formatted !!!" write(stdout, out) exit(1) ================================================ FILE: .gitignore ================================================ # Files generated by invoking Julia with --code-coverage *.jl.cov *.jl.*.cov # Files generated by invoking Julia with --track-allocation *.jl.mem .DS_Store # Build artifacts for creating documentation generated by the Documenter package docs/build/ docs/site/ # File generated by Pkg, the package manager, based on a corresponding Project.toml # It records a fixed state of all packages used by the project. As such, it should not be # committed for packages, but should be committed for applications that require a static # environment. Manifest.toml test/examples/Manifest.toml docs/Manifest.toml .vscode ================================================ FILE: CHANGELOG.md ================================================ # Alpine.jl Change Log ## v0.5.8 - Relax tests for upcoming MOI release (#257) - Add support for `MOI.ScalarNonlinearFunction` (#258) - Relax tests that are flakey on Windows (#259) ## v0.5.7 - Fix failing tests (#241), (#250) - Update `Project.toml` (#239), (#246), (#249) - Remove unnecessary Alp module reference (#247) - Remove unnecessary `Base.eval` calls (#251) - Fix empty summations (#252), (#253) - Fix support for `MOI.Integer` variables (#245) - Loosen tolerances in tests (#254) - Update versions in GitHub actions (#255) ## v0.5.6 - Minor Readme updates (#235) - Implemented RawStatusString for solution summary (#238) - Dependency update for docs - Bug fix in LB exceeding UB outside relative tolerance bounds ## v0.5.5 - Removed use of e.g. for JuMP documentation in README (#230) - Dropped support for integer variable MINLPs in `examples` (#233) - Updated README in `examples` folder to clarify `minlp_solver` dependency (#232) ## v0.5.4 - Added `random_QCQPs` folder with python generator files for all the instances appearing in this paper: https://arxiv.org/pdf/2301.00306.pdf - Minor tweaks in docs and main README file ## v0.5.3 - Removed compatability on Pkg #225 - Added raw NL expression interface example for a dense multilinear problem ## v0.5.2 - Fixed issue with `@NLconstraint` created from a quadratic `@expression` (#221) - Fixed error message in nlexpr parsing of constraints with non-integer exponents (#223) - Clean up in `expr_is_fractional_exponent` (related to #223) - Added dependency on `Pkg` package - Added unit tests for testing multilinear binary products (`hmittelman`) ## v0.5.1 - Re-org and clean-up in partition additions within bounding MIP model - Updated to cheaper `AffExpr` evaluation within linking constraints - Minor update in gap evaluataion after OBBT termination with fixed iterations - 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) - Added unit tests for testing warm start point ## v0.5.0 - 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) - Added dependency on Combinatorics package for linking constraints - Added unit tests for linking constraints feature - Changed Cbc test dependency to HiGHS solver - Dropped a few redundant unit tests - Dropped support for (slower) piecewise McCormick formulations - Changed `disc_ratio` to `partition_scaling_factor` - Added JuliaFormatter.toml and formatting workfow ## v0.4.3 - Dropped support for checking solver availability. User can choose to use any MILP, MINLP and/or NLP solver with Alpine - `GRB_ENV` now works with Gurobi solver to avoid printing License info multiple times during iterations - Updates tests to reflect above changes - Default `convhull_warmstart` set to `true` for a MIP solver in bounding-MIP iterations ## v0.4.2 - Fix support for JuMP v1.2 (@odow) ## v0.4.1 - Added MOI attribute for tightened bounds post-OBBT (@blegat) ## v0.4.0 - Fixed OBBT convergence issue due to average bound reduction - Added new termination criteria to OBBT: max_reduction, max_width, rel_gap at every iteration of OBBT - Fixed the issue to tighten only original nonlinear variables (aux vars were counted before) - `presolve_bt_bound_tol` changed to `1E-4` (numerically stable) - `presolve_bt_obj_bound_tol` added to avoid infeasibility in OBBT iterations when bounds are tights - Parameter tuning (tolerances) for stable OBBT convergence - Fixed bug in `best_rel_gap` evaluation - Bug fixed to check any user-defined operators, and disable hessians based on availabe features. Unit test added for this - 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. - Post-OBBT optimality gap (`presolve_best_rel_gap`) user-option added to be able to extract best opt gap after OBBT when Alpine terminates - `apply_partitioning` feature added to be able to terminate Alpine without applying the MIP-based paritioning algorithm (mainly to run only OBBT) - Revised unit test (in `test_algorithm`) for reduced run times ## v0.3.0 - JuMP v1.0+ in examples - Pavito v0.3.5 support - Dropped support for redundant `run_bounding_iteration` function - Clean-up and re-org of optimizer structs and `MOI_wrapper` functions - Bug fix in `relax_integrality` under presolve - Added Rosenbrock function - Added user-definable `presolve_bt_improv_tol` for variable range reductions in OBBT - Minor update on finite values for obj-bound in `create_obbt_model` - NLP solution rounding issue resolved (now compatible with default tol, 1e-6), to avoid the variable solution outside discretization (#190) - `circleN` instance updated to `circle_MINLPLib` to eliminate Pavito's mixed-integer cycling in unit tests (#190) - Clean-up in printing variable solutions (`variable_values`) ## v0.2.10 - Add support for the HiGHS solver ## v0.2.9 - Update to JuMP v1.0 ## v0.2.8 - Update to JuMP v0.22, v0.23 - Update to MOI v1.0 - Simplify test dependencies ## v0.2.7 - Support for module shortcut `Alp` in function calls - Solver options clean up in `examples` folder - Dropped support for unsued functions: `_bound_sense` `update_boundstop_options` `amp_post_inequalities_int` `amp_pick_ratevec` `amp_collect_tight_regions` - Improved code coverage - Docs cleanup ## v0.2.6 - Bug fix in `algorithm.jl` to handle Gurobi as the MIP solver with updated MOI - Deactivated redundant functions `collect_lb_pool`, `merge_solution_pool` and `track_new_partition_idx` - Moved `examples` out of `test` folder - Updated `run_examples` to handle Gurobi as the MIP solver - Removed dependency on the `Distributed` package - Improved code coverage - Typos fixed in docs ## v0.2.5 - Cleaning up of solver logs - Time correction for local solve - Removed unused `Alpine.Optimizer` options in solver.jl ## v0.2.4 - Added unit tests for utility functions - Removed un-used functions from utility functions which aren't part of Alpine's algorithm - Dropped support for heuristic rounding algorithm (`heu_basic_rounding`) - `minlp_solver` input is a must - Dropped support for adjusting branching priority in MIP solvers (`adjust_branch_priority`) ## v0.2.3 - Migrating from Travis to Github-actions - Major documentation clean-up - Dependency packages clean-up - runtests.jl clean-up - Solver options update: `presolve_max_iter` => `presolve_bt_max_iter` and others - Added `test/examples/run_example.jl` ## v0.2.2 - README clean up Closed issues: - Constraints are not supported and cannot be bridged into supported constrained variables and constraints (#164) ## v0.2.1 - Logging clean up - Removal of redundant tests Closed issues: - Juniper's ALMOST_LOCALLY SOLVED error (#157) - unncessary eval usages (#153) - Logging issue with constants in objective (#159) ## v0.2.0 - MOI wrapper and JuMP v0.21 support - expression.jl clean up - eval() removal where unnecessary (#153) - Drop support for all trigonometric related functions (both in src and testing) - Drop support of expression parsing for generic integer variables in MINLPs (both in src and testing) Closed issues: - arc consistency partitioning pruning scheme as an example extension for POD (#37) - Generate convex relaxations for nonconvex MINLPs (#86) - Error in convexification of monomials (#104) - On variables chosen for partitioning (#121) - Travis and Documeter Maintenance (#144) - Compilation error (#146) - bound propagation buggy (#147) - Reenable test: Validation Test || PBT-AMP-TMC || basic solve || examples/nlp3.jl (#150) - Reenable test: Validation Test || AMP-CONV-FACET || basic solve || examples/nlp1.jl (#151) ## v0.1.16 - Fixed CBC version to make it compatible - Removed support for "Mini" Formulation for convex hulls - Updated tests and removed a few ## v0.1.15 - Bug fixes for issues 134 and 135 (fractional exponents, constants within integer exponents) - Added function 'expr_isolate_const' to nlexpr.jl - Meaningful optimality gaps for zero upper bound values (issue 103) - Typos in comments - Dropped support for colorful_alpine - Ole Kroger's updates to docs/make.jl ## v0.1.10 - Multiple bug fixes in expression parsing - Added support for feasibility problems with constant objectives - Typos in comments ## v0.1.9 - Drop support for Julia < v1.0. - Move to the new Registrator system. - The last supported version for Julia v0.6 is v0.1.8 - 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) ## v0.1.8 - Bug fixes in solver recognition - Updated Issue template and Readme. - Rounding bug fixed for binaries. - This version is only available for Julia v0.6 ## v0.1.7 - Bug fixes for bounds on lifted variables representing nonlinear terms - Inf bound warning issue fixed ## v0.1.6 - Bug fix in operators.jl for accounting all extreme points in the bound evaluation ## v0.1.5 - Unit exponent bug-fix - Meaningful error messages for unsupported functions - Pinned tests to JuMP 0.18.5 - Cleaner & meaningful logs ## v0.1.3 - Finite large bounds on unbounded variables ## Staged - typo fix - set Big-M values for unbounded variables ## v0.1.2 - Bug fix in bound tightening tolerance corner case ## v0.1.1 - Bug fix in Cplex solver recognition ## v0.1.0 - Alpine.jl first release ## Merged Features - `partition_scaling_factor` selection algorithm - logarithm embedding formulation - bounding model warm starting and no-good-cuts using solution pool - `disc_vars` selection algorithm based on weighted minimum vertex cover - more support for binary problem - rounding heuristic and multi-start heuristic for feasible solutions - recursive linear lifting - some attempts to reason bounds for variables with infinite bounds ## New Operators - `BINPROD`: product of binary vars - `BINLIN`: product of a binary var and continuous var ## Data Structure - Some refactoring to shorten the attribute names - Eliminated unnecessary/obsolete user options - Strengthen the checks to problems ## Code Structure - `Alpine.jl`: "header" file - `solver.jl`: data structure and problem loading - `algorithm.jl`: high-level algorithms and major utilities (`presolve()`, `local_solve()`, `bounding_solve()`) - `amp.jl`: algorithms for bounding formulation constructions - `presolve.jl`: algorithms for presolves - `heuristics.jl`: algorithms for heuristics - `bounds.jl`: algorithms and utilities for handling bounds including bounds propagation and reasoning with lifting - `mpb2moi.jl`: preparation for migration to `MOI` interface, a collection of all solver & modeling interface warpping functions - `multi.jl`: high-level piecewise convex relaxation formulation construction and utilities for multilinear/monomial terms - `tmc.jl`: old McCormick-based methods - `const.jl`: (experimental) tries to categorize operators for cleaner and safer operations - `embedding.jl`: logarithm embedding formulations and utilities - `nlexpr.jl`: algorithms for expression handling - `operators.jl`: operator detection algorithm and associated utilities for bounds, discretization variable selection, etc. - `log.jl`: logging utilities - `utility.jl`: general utility functions ## Debugs - Fixed multiple bugs in recursive expression handling - Fixed duplicates in constructing convex relaxations - Fixed bound reasoning steps for complex terms - Fixed many other things ## Tests & Coverage - Most new features are covered (embedding, `partition_scaling_factor` algorithm, etc.) - Stronger expression parsing tests with new operators covered - Coverage should be more than `~90%` ================================================ FILE: CITATION.bib ================================================ @article{alpine_JOGO2019, author = {Nagarajan, Harsha and Lu, Mowen and Wang, Site and Bent, Russell and Sundar, Kaarthik}, title = {An adaptive, multivariate partitioning algorithm for global optimization of nonconvex programs}, journal = {Journal of Global Optimization}, year = {2019}, issn = {1573-2916}, doi = {10.1007/s10898-018-00734-1}, } ================================================ FILE: LICENSE.md ================================================ Copyright (c) 2017, Triad National Security, LLC All rights reserved. Copyright 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. Additionally, redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions 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. 3. Neither 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. ================================================ FILE: Project.toml ================================================ name = "Alpine" uuid = "07493b3f-dabb-5b16-a503-4139292d7dd4" authors = ["Harsha Nagarajan, Site Wang, Kaarthik Sundar and contributors"] repo = "https://github.com/lanl-ansi/Alpine.jl.git" version = "0.5.8" [deps] Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" JuMP = "4076af6c-e467-56ae-b986-b466b2749572" MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [compat] Combinatorics = "1" HiGHS = "1" Ipopt = "0.8, 0.9, 1" JuMP = "0.22, 0.23, 1" Juniper = "0.8, 0.9" MathOptInterface = "0.10, 1" Pavito = "0.3.4, 0.3.5" Statistics = "1" julia = "1" [extras] HiGHS = "87dc4568-4c63-4d18-b0c0-bb2238e4078b" Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" Juniper = "2ddba703-00a4-53a7-87a5-e8b9971dde84" Pavito = "cd433a01-47d1-575d-afb7-6db927ee8d8f" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] test = ["HiGHS", "Ipopt", "Juniper", "Pavito", "Random", "Test"] ================================================ FILE: README.md ================================================ # Alpine, a global solver for non-convex MINLPs [![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) [![codecov](https://codecov.io/gh/lanl-ansi/Alpine.jl/branch/master/badge.svg)](https://codecov.io/gh/lanl-ansi/Alpine.jl) [![Documentation](https://github.com/lanl-ansi/Alpine.jl/actions/workflows/documentation.yml/badge.svg)](https://lanl-ansi.github.io/Alpine.jl/latest/) [![version](https://juliahub.com/docs/Alpine/version.svg)](https://juliahub.com/ui/Packages/Alpine/TRSJF) ALPINE (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)). Alpine 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. Alpine globally solves a given MINLP by: * Analyzing the problem's expressions (objective & constraints) and applies appropriate convex relaxations and polyhedral outer-approximations * 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 Upon 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. ## Installation Install Alpine using the Julia package manager: ```julia import Pkg Pkg.add("Alpine") ``` ## Usage with JuMP Use Alpine with [JuMP](https://github.com/jump-dev/JuMP.jl) as follows: ```julia using JuMP, Alpine, Ipopt, HiGHS ipopt = optimizer_with_attributes(Ipopt.Optimizer, "print_level" => 0) highs = optimizer_with_attributes(HiGHS.Optimizer, "output_flag" => false) model = Model( optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => ipopt, "mip_solver" => highs, ), ) ``` ## Documentation For more details, see the [online documentation](https://lanl-ansi.github.io/Alpine.jl/latest/). ## Support problem types 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, for example, Mixed-Integer Quadratically Constrained Quadratic Programs (MIQCQPs), Non-Linear Programs (NLPs), etc. For 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/). ## Underlying solvers Though 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: | Solver | Julia Package | |--------------------------------------------------------------------------------|--------------------------------------------------------------| | [Gurobi](http://gurobi.com/) | [Gurobi.jl](https://github.com/jump-dev/Gurobi.jl) | | [CPLEX](https://www.ibm.com/analytics/cplex-optimizer) | [CPLEX.jl](https://github.com/jump-dev/CPLEX.jl) | | [HiGHS](https://highs.dev/) | [HiGHS.jl](https://github.com/jump-dev/HiGHS.jl) | [Cbc](https://projects.coin-or.org/Cbc) | [Cbc.jl](https://github.com/jump-dev/Cbc.jl) | | [Ipopt](https://projects.coin-or.org/Ipopt) | [Ipopt.jl](https://github.com/jump-dev/Ipopt.jl) | | [Bonmin](https://projects.coin-or.org/Bonmin) | [Bonmin.jl](https://github.com/jump-dev/AmplNLWriter.jl) | | [Artelys KNITRO](http://artelys.com/en/optimization-tools/knitro) | [KNITRO.jl](https://github.com/jump-dev/KNITRO.jl) | | [Xpress](https://www.fico.com/en/products/fico-xpress-optimization) | [Xpress.jl](https://github.com/jump-dev/Xpress.jl) ## Bug reports and support Please report any issues via the GitHub [issue tracker](https://github.com/lanl-ansi/Alpine.jl/issues). All types of issues are welcome and encouraged; this includes bug reports, documentation typos, feature requests, etc. ## Challenging Problems We 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. ## Citing Alpine If 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)) ```bibtex @article{alpine_JOGO2019, title = {An adaptive, multivariate partitioning algorithm for global optimization of nonconvex programs}, author = {Nagarajan, Harsha and Lu, Mowen and Wang, Site and Bent, Russell and Sundar, Kaarthik}, journal = {Journal of Global Optimization}, year = {2019}, issn = {1573-2916}, doi = {10.1007/s10898-018-00734-1}, } @inproceedings{alpine_CP2016, title = {Tightening {McCormick} relaxations for nonlinear programs via dynamic multivariate partitioning}, author = {Nagarajan, Harsha and Lu, Mowen and Yamangil, Emre and Bent, Russell}, booktitle = {International Conference on Principles and Practice of Constraint Programming}, pages = {369--387}, year = {2016}, organization = {Springer}, doi = {10.1007/978-3-319-44953-1_24}, } ``` If 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)): ```bibtex @article{alpine_ORL2021, title = {Piecewise polyhedral formulations for a multilinear term}, author = {Sundar, Kaarthik and Nagarajan, Harsha and Linderoth, Jeff and Wang, Site and Bent, Russell}, journal = {Operations Research Letters}, volume = {49}, number = {1}, pages = {144--149}, year = {2021}, publisher = {Elsevier} } @article{alpine_OptOnline2022, title={Piecewise Polyhedral Relaxations of Multilinear Optimization}, author={Kim, Jongeun and Richard, Jean-Philippe P. and Tawarmalani, Mohit}, eprinttype={Optimization Online}, date={2022} } ``` ================================================ FILE: docs/Project.toml ================================================ [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" DocumenterTools = "35a29f4d-8980-5a13-9543-d66fff28ecb8" ================================================ FILE: docs/README.md ================================================ # Documentation for Alpine ## Installation Alpine's documentation is generated using [Documenter.jl](https://github.com/JuliaDocs/Documenter.jl). To install it, run the following command in a Julia session: ```julia Pkg.add("Documenter") Pkg.add("DocumenterTools") ``` ## Building the Docs To preview the `html` output of the documents, run the following command: ```julia julia --color=yes make.jl ``` You can then view the documents in `build/index.html`. ================================================ FILE: docs/make.jl ================================================ using Documenter, Alpine using DocumenterTools: Themes for w in ("light", "dark") header = read(joinpath(@__DIR__, "src/assets/themes/style.scss"), String) theme = read(joinpath(@__DIR__, "src/assets/themes/$(w)defs.scss"), String) write(joinpath(@__DIR__, "src/assets/themes/$(w).scss"), header * "\n" * theme) end Themes.compile( joinpath(@__DIR__, "src/assets/themes/documenter-light.css"), joinpath(@__DIR__, "src/assets/themes/light.scss"), ) Themes.compile( joinpath(@__DIR__, "src/assets/themes/documenter-dark.css"), joinpath(@__DIR__, "src/assets/themes/dark.scss"), ) makedocs( sitename = "Alpine", authors = "Harsha Nagarajan, Site Wang, Kaarthik Sundar and contributors", format = Documenter.HTML( mathengine = Documenter.MathJax(), prettyurls = get(ENV, "CI", nothing) == "true", ), # strict = true, pages = [ "Introduction" => "index.md", "Choosing Sub-solvers" => "choosingsolver.md", # "Algorithm" => "algorithm.md", "Solver Options" => "parameters.md", "Methods" => "functions.md", ], ) deploydocs(repo = "github.com/lanl-ansi/Alpine.jl.git", push_preview = true) ================================================ FILE: docs/src/algorithm.md ================================================ # Demo ```@meta CurrentModule = Alpine ``` Consider the following [problem](https://link.springer.com/article/10.1007/s10898-012-0022-1) as an example. ```math \min_{x}\, &c^Tx\\ s.t. &a_i^Tx \text{ sense}_i \, b_i \forall\,\, i\\ &l \leq x \leq u\\ ``` ================================================ FILE: docs/src/assets/themes/dark.scss ================================================ @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} ================================================ FILE: docs/src/assets/themes/darkdefs.scss ================================================ // This template file overrides some of the Documenter theme variables to customize the theme: $themename: "documenter-dark"; // CSS file must be called `$(themename).css` // Instruct documenter/*.scss files that this is a dark theme $documenter-is-dark-theme: true; $boldcolor: lighten-color($maincolor, 4.5); $body-background-color: $darkbg; // main page background // this is the color the links get, and also when they are hovered $link: lighten-color($secondcolor, 2); $link-hover: lighten-color($link, 3); // Main text color: $text: darken-color($mainwhite, 0.2); // Bold text color, also affects headers $text-strong: $boldcolor; // Code text color: $code: #fff; //$code-background: rgba(0.5,0,0, 0.05); $codebg: darken-color($maincolor, 3); $code-background: $codebg; // for inline code $pre-background: $codebg; // for code blocks $documenter-docstring-header-background: lighten-color($body-background-color, 0.5); // Sidebar $documenter-sidebar-background: darken-color($maincolor, 1.5); //background color for sidebar $documenter-sidebar-color: $text; //font color for sidebar $documenter-sidebar-menu-hover-color: $documenter-sidebar-color; $documenter-sidebar-menu-hover-background: darken-color($documenter-sidebar-background, 1.2); $documenter-sidebar-menu-active-background: $darkbg; $documenter-sidebar-menu-active-color: $mainwhite; $documenter-sidebar-menu-active-hover-background: darken-color($documenter-sidebar-background, 1); $documenter-sidebar-menu-active-hover-color: $documenter-sidebar-menu-active-color; // these two change what happens with input boxes (the search box): $input-hover-border-color: $secondcolor; $input-focus-border-color: $mainwhite; $documenter-docstring-shadow: 3px 3px 4px invert($shadow-color); // Admonition stuff $admbg: lighten-color($body-background-color, 0.5); $admonition-background: ( 'default': $admbg, 'info': $admbg, 'success': $admbg, 'warning': $admbg, 'danger': $admbg, 'compat': $admbg ); $admonition-header-background: ( 'default': #ba3f1f, 'warning': #a88b17, 'danger': #c7524c, 'success': #42ac68, 'info': #28c); // All secondary themes have to be nested in a theme--$(themename) class. When Documenter // switches themes, it applies this class to and then disables the primary // stylesheet. @import "documenter/utilities"; @import "documenter/variables"; @import "bulma/utilities/all"; @import "bulma/base/minireset.sass"; @import "bulma/base/helpers.sass"; html.theme--#{$themename} { @import "bulma/base/generic.sass"; @import "documenter/overrides"; @import "bulma/elements/all"; @import "bulma/form/all"; @import "bulma/components/all"; @import "bulma/grid/all"; @import "bulma/layout/all"; // Additional overrides, if need be @import "documenter/elements"; @import "documenter/components/all"; @import "documenter/patches"; @import "documenter/layout/all"; @import "documenter/theme_overrides"; // $shadow-color: #202224; #documenter .docs-sidebar { // This makes sidebar have shadow at all displays border-right: none; box-shadow: 1.2*$shadow-size 0rem 1*$shadow-blur invert($shadow-color); form.docs-search > input { // these controls are for the searchbar color: $mainwhite; background-color: darken-color($documenter-sidebar-background, 1); border-color: darken-color($documenter-sidebar-background, 2); margin-top: 1.0rem; margin-bottom: 1.0rem; // adjust the margings between search and other elements &::placeholder { color: $mainwhite; // placeholder text color ("Search here...") } } } // FIXME: Hack to get a proper theme for highlight.js in the dark theme @import "highlightjs/a11y-dark"; // Also, a11y-dark does not highlight string interpolation properly. .hljs-subst { color: #f8f8f2; } } ================================================ FILE: docs/src/assets/themes/documenter-dark.css ================================================ @charset "UTF-8"; /* Font Awesome 5 mixin. Can be included in any rule that should render Font Awesome icons. */ @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 { /* This file contain the overall layout. * * The main container is
that is identified by id #documenter. */ /* a11y-dark theme */ /* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */ /* @author: ericwbailey */ /* Comment */ /* Red */ /* Orange */ /* Yellow */ /* Green */ /* Blue */ /* Purple */ } 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:not([type]).is-lower-alpha { list-style-type: lower-alpha; } html.theme--documenter-dark .content ol:not([type]).is-lower-roman { list-style-type: lower-roman; } html.theme--documenter-dark .content ol:not([type]).is-upper-alpha { list-style-type: upper-alpha; } html.theme--documenter-dark .content ol:not([type]).is-upper-roman { 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: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 { background-color: white; color: #0a0a0a; } 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 { background-color: #0a0a0a; color: white; } 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 { background-color: whitesmoke; color: #363636; } 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) { background-color: #363636; color: whitesmoke; } 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 { background-color: #4eb5de; color: #fff; } 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 { background-color: #e37733; color: #fff; } 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 { background-color: #209cee; color: #fff; } 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 { background-color: #22c35b; color: #fff; } 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 { background-color: #ffdd57; color: rgba(0, 0, 0, 0.7); } 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 { background-color: #da0b00; color: #fff; } 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 { font-size: 0.75rem; } 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 { font-size: 1rem; } 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 { 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: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 { margin-left: 1px; padding: 0; position: relative; width: 2em; } 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 { 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: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 { height: 1px; width: 50%; } 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 { height: 50%; width: 1px; } 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 { background-color: #e8e8e8; } 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 { background-color: #dbdbdb; } 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) { 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:not([disabled]).is-hovered, 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:not([disabled]).is-hovered, html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-hovered, html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-hovered, html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-hovered { z-index: 2; } 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, 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:not([disabled]).is-focused, html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused, html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused, 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:not([disabled]).is-active, html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active, html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active, html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-focused, html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]).is-active { 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: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, 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:not([disabled]).is-focused:hover, html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-focused:hover, html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-focused: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:not([disabled]).is-active:hover, html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]).is-active:hover, html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]).is-active: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:not([disabled]).is-focused: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:not([disabled]).is-active: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; /* For Headroom.js */ transition-property: top, box-shadow; -webkit-transition-property: top, box-shadow; /* Safari */ transition-duration: 0.3s; -webkit-transition-duration: 0.3s; /* Safari */ } 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; /* Safari */ } 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; /* Safari */ } } 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; /* Setting up a nicer theme style for the scrollbar */ } 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; /* Managing collapsible submenus */ } 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; } ================================================ FILE: docs/src/assets/themes/documenter-dark.css.css ================================================ @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} ================================================ FILE: docs/src/assets/themes/documenter-light.css ================================================ @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} ================================================ FILE: docs/src/assets/themes/documenter-light.css.css ================================================ @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} ================================================ FILE: docs/src/assets/themes/light.scss ================================================ @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} ================================================ FILE: docs/src/assets/themes/lightdefs.scss ================================================ // This template file overrides some of the Documenter theme variables to customize the theme: $themename: "documenter-light"; // CSS file must be called `$(themename).css` $boldcolor: $maincolor; // darken-color($maincolor, 1); $body-background-color: $mainwhite; // main page background // Sidebar $documenter-sidebar-background: $maincolor; //background color for sidebar $documenter-sidebar-color: $mainwhite; //font color all sidebar $documenter-sidebar-menu-hover-color: $documenter-sidebar-color; // text color $documenter-sidebar-menu-hover-background: darken-color($documenter-sidebar-background, 1.5); $documenter-sidebar-menu-active-background: $mainwhite; $documenter-sidebar-menu-active-color: $mainblack; $documenter-sidebar-menu-active-hover-background: lighten-color($documenter-sidebar-background, 5.2); $documenter-sidebar-menu-active-hover-color: $documenter-sidebar-menu-active-color; // this is the color the links get, and also when they are hovered $link: $secondcolor; $link-hover: darken-color($link, 1); // Main text color: $text: $mainblack; // Bold text color, also affects headers $text-strong: $boldcolor; // Section headers (markdown ###) text color: // TODO // Code text color: $code: #000000; //$code-background: rgba(0.5,0,0, 0.05); $codebg: lighten-color($maincolor, 7); // $codebg: lighten-color($secondcolor, 8); $code-background: $codebg; // for inline code $pre-background: $codebg; // for code blocks $documenter-docstring-header-background: darken-color($body-background-color, 0.4); // main text font size $body-font-size: 1.0em; // the default is 1.0 // Sidebar text font size $documenter-sidebar-size: 1.0em; // the default is 1.0 as well // these two change what happens with input boxes (the search box): $input-hover-border-color: $secondcolor; $input-focus-border-color: $mainwhite; // Include the original theme which will now use the updated variables. // This should be the last thing in the SCSS file. @import "documenter-light"; #documenter .docs-sidebar { // This makes sidebar have shadow at all displays border-right: none; box-shadow: 1.2*$shadow-size 0rem 1*$shadow-blur $shadow-color; form.docs-search > input { // these controls are for the searchbar color: $mainwhite; background-color: darken-color($documenter-sidebar-background, 1); border-color: darken-color($documenter-sidebar-background, 2); margin-top: 1.0rem; margin-bottom: 1.0rem; // adjust the margings between search and other elements &::placeholder { color: $mainwhite; // placeholder text color ("Search here...") } } } ================================================ FILE: docs/src/assets/themes/style.scss ================================================ @charset "UTF-8"; // The customizable varibles can be found here: // https://github.com/JuliaDocs/Documenter.jl/tree/master/assets/html/scss // under documenter/_variables or documenter/_overrides. But some stuff are Bulma defaults // as well, so you may need to look them up too: https://bulma.io/documentation/customize/variables/ //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// $maincolor: #2a5398; // main color of the org theme $secondcolor: #ac5118; // secondary color that serves as accents // it is used as-is for links in light theme $mainwhite: #f0f0f0; // color representing white $mainblack: #202020; // color representing black $darkbg: #1b1f28; // dark theme main page background // These commands set up the fonts for the main text and code blocks. // the fonds must be included into the assets of the `makdocs` command, with e.g. // format = Documenter.HTML( // prettyurls = CI, // assets = [ // "assets/logo.ico", // asset("https://fonts.googleapis.com/css?family=Montserrat|Source+Code+Pro&display=swap", class=:css), // ], // ), $family-sans-serif: 'Montserrat', sans-serif; $family-monospace: 'Source Code Pro', monospace; //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// // variables controlling the siderbar's shadow $shadow-color: #bbb !default; $shadow-size: 0.2rem !default; $shadow-blur: 0.4rem !default; // Two cool helper functions: $lightness-unit: 8% !default; // Uses adjust-color to create a darker version of $color @function darken-color($color, $factor) { @return adjust-color($color, $lightness: -$factor*$lightness-unit); } // Uses adjust-color to create a lighter version of $color @function lighten-color($color, $factor) { @return adjust-color($color, $lightness: $factor*$lightness-unit); } ================================================ FILE: docs/src/choosingsolver.md ================================================ # Choosing Sub-Solvers ```@meta CurrentModule = Alpine ``` Alpine'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: | Solver | Julia Package | |--------------------------------------------------------------------------------|--------------------------------------------------------------| | [CPLEX](http://www-01.ibm.com/software/commerce/optimization/cplex-optimizer/) | [CPLEX.jl](https://github.com/JuliaOpt/CPLEX.jl) | | [Cbc](https://projects.coin-or.org/Cbc) | [Cbc.jl](https://github.com/JuliaOpt/Clp.jl) | | [Gurobi](http://gurobi.com/) | [Gurobi.jl](https://github.com/JuliaOpt/Gurobi.jl) | | [Ipopt](https://projects.coin-or.org/Ipopt) | [Ipopt.jl](https://github.com/JuliaOpt/Ipopt.jl) | | [Bonmin](https://projects.coin-or.org/Bonmin) | [Bonmin.jl](https://github.com/JackDunnNZ/AmplNLWriter.jl) | | [Artelys KNITRO](http://artelys.com/en/optimization-tools/knitro) | [KNITRO.jl](https://github.com/JuliaOpt/KNITRO.jl) | As 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. !!! tip 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. To solve any continuous nonlinear program to global optimality, here is an example to utilize different sub-solvers with default options set for Alpine: ```julia using Alpine using JuMP using Gurobi using Ipopt # MIP optimizer const gurobi = optimizer_with_attributes(Gurobi.Optimizer, MOI.Silent() => true, "Presolve" => 1) # NLP optimizer const ipopt = optimizer_with_attributes(Ipopt.Optimizer, MOI.Silent() => true, "sb" => "yes", "max_iter" => 9999) # Global optimizer const alpine = optimizer_with_attributes(Alpine.Optimizer, "nlp_solver" => ipopt, "mip_solver" => gurobi) m = Model(alpine) ``` Similarly, 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. ================================================ FILE: docs/src/functions.md ================================================ # Functions ```@meta CurrentModule = Alpine ``` ## High-level Algorithmic Functions These are the high-level algorithmic functions: ```@docs presolve global_solve local_solve bounding_solve ``` ## Adapative Partitioning Methods ```@docs create_bounding_mip pick_disc_vars fix_domains min_vertex_cover ``` ## Presolve Methods ```@docs bound_tightening_wrapper optimization_based_bound_tightening create_obbt_model solve_obbt_model resolve_var_bounds post_objective_bound ``` ## Utility Methods ```@docs update_var_bounds discretization_to_bounds init_disc _get_discretization_dict flatten_discretization add_adaptive_partition ``` ================================================ FILE: docs/src/index.md ================================================ # Alpine's Documentation ```@meta CurrentModule = Alpine ``` ## Overview **[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. **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. For 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. ## Installation To 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. The latest stable release of Alpine can be installed using the Julia package manager with ```julia import Pkg Pkg.add("Alpine") ``` At 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 ```julia import Pkg Pkg.add("Ipopt") Pkg.add("Gurobi") ``` For more details on choosing sub-solvers for Alpine, check out [here](https://lanl-ansi.github.io/Alpine.jl/latest/choosingsolver/). ## Unit Tests To run the tests in the package, run the following command after installing the Alpine package. ```julia import Pkg Pkg.test("Alpine") ``` ## Citing Alpine If 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): ```bibtex @article{alpine_JOGO2019, title = {An adaptive, multivariate partitioning algorithm for global optimization of nonconvex programs}, author = {Nagarajan, Harsha and Lu, Mowen and Wang, Site and Bent, Russell and Sundar, Kaarthik}, journal = {Journal of Global Optimization}, year = {2019}, issn = {1573-2916}, doi = {10.1007/s10898-018-00734-1}, } @inproceedings{alpine_CP2016, title = {Tightening {McCormick} relaxations for nonlinear programs via dynamic multivariate partitioning}, author = {Nagarajan, Harsha and Lu, Mowen and Yamangil, Emre and Bent, Russell}, booktitle = {International Conference on Principles and Practice of Constraint Programming}, pages = {369--387}, year = {2016}, organization = {Springer}, doi = {10.1007/978-3-319-44953-1_24}, } ``` If 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)): ```bibtex @article{alpine_ORL2021, title = {Piecewise polyhedral formulations for a multilinear term}, author = {Sundar, Kaarthik and Nagarajan, Harsha and Linderoth, Jeff and Wang, Site and Bent, Russell}, journal = {Operations Research Letters}, volume = {49}, number = {1}, pages = {144--149}, year = {2021}, publisher = {Elsevier} } @article{alpine_OptOnline2022, title={Piecewise Polyhedral Relaxations of Multilinear Optimization}, author={Kim, Jongeun and Richard, Jean-Philippe P. and Tawarmalani, Mohit}, eprinttype={Optimization Online}, date={2022} } ``` If 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): ```bibtex @article{alpine_learning_2022, title={Learning to Accelerate the Global Optimization of Quadratically-Constrained Quadratic Programs}, author={Kannan, Rohit and Nagarajan, Harsha and Deka, Deepjyoti}, journal={arXiv preprint:2301.00306}, url={https://arxiv.org/abs/2301.00306}, year={2022} } ``` ================================================ FILE: docs/src/parameters.md ================================================ # Solver options for Alpine ```@meta CurrentModule = Alpine ``` ## General Options Here are a few general solver options which control the performance of Alpine: * `log_level (default = 0)`: verbosity level of Alpine; choose `1` for turning on logging, else `100` for detailed debugging mode. * `time_limit (default = Inf)`: total limit on run time for Alpine in seconds. * `max_iter (default = 999)`: total number of iterations allowed in the [`global_solve`](@ref). * `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 \%``. * `tol (default = 1e-6)`: numerical tolerance used during the process of [`global_solve`](@ref). ## Adaptive Partitioning Options * `apply_partitioning (default = true)`: applies Alpine's built-in MIP-based partitioning algorithm only when activated; else terminates with the presolve solution. * `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. * `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. * `disc_add_partition_method`: allows functional input on how new partitions could be constructed. ## Presolve Options * `presolve_track_time (default = true)`: includes/excludes presolve run time in the total Alpine's run time. * `presolve_bt (default = false)`: performs sequential, optimization-based bound tightening (OBBT) at the presolve step. * `presolve_bt_max_iter (default = 9999)`: maximum number of iterations allowed using the sequential OBBT step. * `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. * `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. * `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. * `presolve_bt_mip_time_limit (default = Inf)`: time limit for individual MILPs solved during the sequential OBBT procedure. * `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). Note 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). ================================================ FILE: examples/JuMP_models.jl ================================================ include("MINLPs/nlp.jl") include("MINLPs/bnlp.jl") include("MINLPs/blend.jl") include("MINLPs/brainpc3.jl") include("MINLPs/castro.jl") include("MINLPs/circle.jl") include("MINLPs/convex.jl") include("MINLPs/discretemulti.jl") include("MINLPs/div.jl") include("MINLPs/exprstest.jl") include("MINLPs/linearlift.jl") include("MINLPs/multi.jl") include("MINLPs/mult3.jl") include("MINLPs/mult4.jl") include("MINLPs/rosenbrock.jl") ================================================ FILE: examples/MINLPs/blend.jl ================================================ function blend029(; solver = nothing) m = JuMP.Model(solver) @variable(m, x[1:102]) for i in 67:102 set_binary(x[i]) end for i in 1:48 set_lower_bound(x[i], 0) set_upper_bound(x[i], 1) end for i in 49:66 set_lower_bound(x[i], 0) set_upper_bound(x[i], 2) end @objective( m, Max, -1.74 * x[1] - 1.74 * x[2] - 1.74 * x[3] - 1.45 * x[4] - 1.45 * x[5] - 1.45 * x[6] + 7.38 * x[7] + 7.38 * x[8] + 7.38 * x[9] + 5.6 * x[10] + 5.6 * x[11] + 5.6 * x[12] - 1.7 * x[13] - 1.7 * x[14] - 1.7 * x[15] - 1.18 * x[16] - 1.18 * x[17] - 1.18 * x[18] + 7.21 * x[19] + 7.21 * x[20] + 7.21 * x[21] + 5.45 * x[22] + 5.45 * x[23] + 5.45 * x[24] - 0.3 * x[25] - 0.3 * x[26] - 0.3 * x[27] + 7.71 * x[28] + 7.71 * x[29] + 7.71 * x[30] + 6.28 * x[31] + 6.28 * x[32] + 6.28 * x[33] + 7.74 * x[34] + 7.74 * x[35] + 7.74 * x[36] - 0.84 * x[67] - 0.84 * x[68] - 0.84 * x[69] - 0.05 * x[70] - 0.05 * x[71] - 0.05 * x[72] - 0.94 * x[73] - 0.94 * x[74] - 0.94 * x[75] - 0.81 * x[76] - 0.81 * x[77] - 0.81 * x[78] - 0.79 * x[79] - 0.79 * x[80] - 0.79 * x[81] - 0.05 * x[82] - 0.05 * x[83] - 0.05 * x[84] - 0.65 * x[85] - 0.65 * x[86] - 0.65 * x[87] - 0.97 * x[88] - 0.97 * x[89] - 0.97 * x[90] - 0.57 * x[91] - 0.57 * x[92] - 0.57 * x[93] - 0.26 * x[94] - 0.26 * x[95] - 0.26 * x[96] - 0.45 * x[97] - 0.45 * x[98] - 0.45 * x[99] - 0.1 * x[100] - 0.1 * x[101] - 0.1 * x[102] ) @NLconstraint( m, x[37] * x[55] - 0.6 * x[1] - 0.2 * x[13] + 0.2 * x[25] + 0.2 * x[28] + 0.2 * x[31] == 0.04 ) #= e8: =# @NLconstraint( m, x[40] * x[58] - 0.6 * x[4] - 0.2 * x[16] - 0.2 * x[25] + 0.7 * x[34] == 0.07 ) #= e9: =# @NLconstraint( m, x[43] * x[55] - 0.4 * x[1] - 0.4 * x[13] + 0.5 * x[25] + 0.5 * x[28] + 0.5 * x[31] == 0.1 ) #= e10: =# @NLconstraint( m, x[46] * x[58] - 0.4 * x[4] - 0.4 * x[16] - 0.5 * x[25] + 0.6 * x[34] == 0.06 ) #= e11: =# @NLconstraint( m, x[38] * x[56] - (x[37] * x[55] - (x[37] * x[26] + x[37] * x[29] + x[37] * x[32])) - 0.6 * x[2] - 0.2 * x[14] == 0 ) #= e24: =# @NLconstraint( m, x[39] * x[57] - (x[38] * x[56] - (x[38] * x[27] + x[38] * x[30] + x[38] * x[33])) - 0.6 * x[3] - 0.2 * x[15] == 0 ) #= e25: =# @NLconstraint( m, x[41] * x[59] - (x[40] * x[58] + x[37] * x[26] - x[40] * x[35]) - 0.6 * x[5] - 0.2 * x[17] == 0 ) #= e26: =# @NLconstraint( m, x[42] * x[60] - (x[41] * x[59] + x[38] * x[27] - x[41] * x[36]) - 0.6 * x[6] - 0.2 * x[18] == 0 ) #= e27: =# @NLconstraint( m, x[44] * x[56] - (x[43] * x[55] - (x[43] * x[26] + x[43] * x[29] + x[43] * x[32])) - 0.4 * x[2] - 0.4 * x[14] == 0 ) #= e28: =# @NLconstraint( m, x[45] * x[57] - (x[44] * x[56] - (x[44] * x[27] + x[44] * x[30] + x[44] * x[33])) - 0.4 * x[3] - 0.4 * x[15] == 0 ) #= e29: =# @NLconstraint( m, x[47] * x[59] - (x[46] * x[58] + x[43] * x[26] - x[46] * x[35]) - 0.4 * x[5] - 0.4 * x[17] == 0 ) #= e30: =# @NLconstraint( m, x[48] * x[60] - (x[47] * x[59] + x[44] * x[27] - x[47] * x[36]) - 0.4 * x[6] - 0.4 * x[18] == 0 ) #= e31: =# @constraint(m, x[1] + x[4] + x[7] + x[10] + x[49] == 1) #= e2: =# @constraint(m, x[13] + x[16] + x[19] + x[22] + x[52] == 1.1) #= e3: =# @constraint(m, -x[1] - x[13] + x[25] + x[28] + x[31] + x[55] == 0.2) #= e4: =# @constraint(m, -x[4] - x[16] - x[25] + x[34] + x[58] == 0.1) #= e5: =# @constraint(m, -x[7] - x[19] - x[28] - x[34] + x[61] == 1.55) #= e6: =# @constraint(m, -x[10] - x[22] - x[31] + x[64] == 0.49) #= e7: =# @constraint(m, x[2] + x[5] + x[8] + x[11] - x[49] + x[50] == 1) #= e12: =# @constraint(m, x[3] + x[6] + x[9] + x[12] - x[50] + x[51] == 0) #= e13: =# @constraint(m, x[14] + x[17] + x[20] + x[23] - x[52] + x[53] == 0.1) #= e14: =# @constraint(m, x[15] + x[18] + x[21] + x[24] - x[53] + x[54] == 0.9) #= e15: =# @constraint(m, -x[2] - x[14] + x[26] + x[29] + x[32] - x[55] + x[56] == 0) #= e16: =# @constraint(m, -x[3] - x[15] + x[27] + x[30] + x[33] - x[56] + x[57] == 0) #= e17: =# @constraint(m, -x[5] - x[17] - x[26] + x[35] - x[58] + x[59] == 0) #= e18: =# @constraint(m, -x[6] - x[18] - x[27] + x[36] - x[59] + x[60] == 0) #= e19: =# @constraint(m, -x[8] - x[20] - x[29] - x[35] - x[61] + x[62] == -0.81) #= e20: =# @constraint(m, -x[9] - x[21] - x[30] - x[36] - x[62] + x[63] == -0.88) #= e21: =# @constraint(m, -x[11] - x[23] - x[32] - x[64] + x[65] == -0.14) #= e22: =# @constraint(m, -x[12] - x[24] - x[33] - x[65] + x[66] == -0.1) #= e23: =# @constraint(m, x[1] - x[67] <= 0) #= e32: =# @constraint(m, x[2] - x[68] <= 0) #= e33: =# @constraint(m, x[3] - x[69] <= 0) #= e34: =# @constraint(m, x[4] - x[70] <= 0) #= e35: =# @constraint(m, x[5] - x[71] <= 0) #= e36: =# @constraint(m, x[6] - x[72] <= 0) #= e37: =# @constraint(m, x[7] - x[73] <= 0) #= e38: =# @constraint(m, x[8] - x[74] <= 0) #= e39: =# @constraint(m, x[9] - x[75] <= 0) #= e40: =# @constraint(m, x[10] - x[76] <= 0) #= e41: =# @constraint(m, x[11] - x[77] <= 0) #= e42: =# @constraint(m, x[12] - x[78] <= 0) #= e43: =# @constraint(m, x[13] - x[79] <= 0) #= e44: =# @constraint(m, x[14] - x[80] <= 0) #= e45: =# @constraint(m, x[15] - x[81] <= 0) #= e46: =# @constraint(m, x[16] - x[82] <= 0) #= e47: =# @constraint(m, x[17] - x[83] <= 0) #= e48: =# @constraint(m, x[18] - x[84] <= 0) #= e49: =# @constraint(m, x[19] - x[85] <= 0) #= e50: =# @constraint(m, x[20] - x[86] <= 0) #= e51: =# @constraint(m, x[21] - x[87] <= 0) #= e52: =# @constraint(m, x[22] - x[88] <= 0) #= e53: =# @constraint(m, x[23] - x[89] <= 0) #= e54: =# @constraint(m, x[24] - x[90] <= 0) #= e55: =# @constraint(m, x[25] - x[91] <= 0) #= e56: =# @constraint(m, x[26] - x[92] <= 0) #= e57: =# @constraint(m, x[27] - x[93] <= 0) #= e58: =# @constraint(m, x[28] - x[94] <= 0) #= e59: =# @constraint(m, x[29] - x[95] <= 0) #= e60: =# @constraint(m, x[30] - x[96] <= 0) #= e61: =# @constraint(m, x[31] - x[97] <= 0) #= e62: =# @constraint(m, x[32] - x[98] <= 0) #= e63: =# @constraint(m, x[33] - x[99] <= 0) #= e64: =# @constraint(m, x[34] - x[100] <= 0) #= e65: =# @constraint(m, x[35] - x[101] <= 0) #= e66: =# @constraint(m, x[36] - x[102] <= 0) #= e67: =# @constraint(m, x[1] >= 0) #= e68: =# @constraint(m, x[2] >= 0) #= e69: =# @constraint(m, x[3] >= 0) #= e70: =# @constraint(m, x[4] >= 0) #= e71: =# @constraint(m, x[5] >= 0) #= e72: =# @constraint(m, x[6] >= 0) #= e73: =# @constraint(m, x[7] >= 0) #= e74: =# @constraint(m, x[8] >= 0) #= e75: =# @constraint(m, x[9] >= 0) #= e76: =# @constraint(m, x[10] >= 0) #= e77: =# @constraint(m, x[11] >= 0) #= e78: =# @constraint(m, x[12] >= 0) #= e79: =# @constraint(m, x[13] >= 0) #= e80: =# @constraint(m, x[14] >= 0) #= e81: =# @constraint(m, x[15] >= 0) #= e82: =# @constraint(m, x[16] >= 0) #= e83: =# @constraint(m, x[17] >= 0) #= e84: =# @constraint(m, x[18] >= 0) #= e85: =# @constraint(m, x[19] >= 0) #= e86: =# @constraint(m, x[20] >= 0) #= e87: =# @constraint(m, x[21] >= 0) #= e88: =# @constraint(m, x[22] >= 0) #= e89: =# @constraint(m, x[23] >= 0) #= e90: =# @constraint(m, x[24] >= 0) #= e91: =# @constraint(m, x[25] >= 0) #= e92: =# @constraint(m, x[26] >= 0) #= e93: =# @constraint(m, x[27] >= 0) #= e94: =# @constraint(m, x[28] >= 0) #= e95: =# @constraint(m, x[29] >= 0) #= e96: =# @constraint(m, x[30] >= 0) #= e97: =# @constraint(m, x[31] >= 0) #= e98: =# @constraint(m, x[32] >= 0) #= e99: =# @constraint(m, x[33] >= 0) #= e100: =# @constraint(m, x[34] >= 0) #= e101: =# @constraint(m, x[35] >= 0) #= e102: =# @constraint(m, x[36] >= 0) #= e103: =# @constraint(m, x[73] <= 1.5) #= e104: =# @constraint(m, x[74] <= 1.5) #= e105: =# @constraint(m, x[75] <= 1.5) #= e106: =# @constraint(m, x[76] <= 0.6) #= e107: =# @constraint(m, x[77] <= 0.6) #= e108: =# @constraint(m, x[78] <= 0.6) #= e109: =# @constraint(m, x[85] <= 1.1) #= e110: =# @constraint(m, x[86] <= 1.1) #= e111: =# @constraint(m, x[87] <= 1.1) #= e112: =# @constraint(m, x[88] <= 0.2) #= e113: =# @constraint(m, x[89] <= 0.2) #= e114: =# @constraint(m, x[90] <= 0.2) #= e115: =# @constraint(m, x[73] <= 1) #= e116: =# @constraint(m, x[74] <= 1) #= e117: =# @constraint(m, x[75] <= 1) #= e118: =# @constraint(m, x[76] <= 0.8) #= e119: =# @constraint(m, x[77] <= 0.8) #= e120: =# @constraint(m, x[78] <= 0.8) #= e121: =# @constraint(m, x[85] <= 1) #= e122: =# @constraint(m, x[86] <= 1) #= e123: =# @constraint(m, x[87] <= 1) #= e124: =# @constraint(m, x[88] <= 0.8) #= e125: =# @constraint(m, x[89] <= 0.8) #= e126: =# @constraint(m, x[90] <= 0.8) #= e127: =# @constraint(m, -x[73] >= -1.3) #= e128: =# @constraint(m, -x[74] >= -1.3) #= e129: =# @constraint(m, -x[75] >= -1.3) #= e130: =# @constraint(m, -x[76] >= -1.4) #= e131: =# @constraint(m, -x[77] >= -1.4) #= e132: =# @constraint(m, -x[78] >= -1.4) #= e133: =# @constraint(m, -x[85] >= -1.7) #= e134: =# @constraint(m, -x[86] >= -1.7) #= e135: =# @constraint(m, -x[87] >= -1.7) #= e136: =# @constraint(m, -x[88] >= -1.8) #= e137: =# @constraint(m, -x[89] >= -1.8) #= e138: =# @constraint(m, -x[90] >= -1.8) #= e139: =# @constraint(m, -x[73] >= -1) #= e140: =# @constraint(m, -x[74] >= -1) #= e141: =# @constraint(m, -x[75] >= -1) #= e142: =# @constraint(m, -x[76] >= -1.4) #= e143: =# @constraint(m, -x[77] >= -1.4) #= e144: =# @constraint(m, -x[78] >= -1.4) #= e145: =# @constraint(m, -x[85] >= -1) #= e146: =# @constraint(m, -x[86] >= -1) #= e147: =# @constraint(m, -x[87] >= -1) #= e148: =# @constraint(m, -x[88] >= -1.4) #= e149: =# @constraint(m, -x[89] >= -1.4) #= e150: =# @constraint(m, -x[90] >= -1.4) #= e151: =# @constraint(m, -x[37] + x[95] <= 0.9) #= e152: =# @constraint(m, -x[38] + x[96] <= 0.9) #= e153: =# @constraint(m, -x[37] + x[98] <= 0) #= e154: =# @constraint(m, -x[38] + x[99] <= 0) #= e155: =# @constraint(m, -x[40] + x[101] <= 0.9) #= e156: =# @constraint(m, -x[41] + x[102] <= 0.9) #= e157: =# @constraint(m, -x[43] + x[95] <= 0.6) #= e158: =# @constraint(m, -x[44] + x[96] <= 0.6) #= e159: =# @constraint(m, -x[43] + x[98] <= 0.4) #= e160: =# @constraint(m, -x[44] + x[99] <= 0.4) #= e161: =# @constraint(m, -x[46] + x[101] <= 0.6) #= e162: =# @constraint(m, -x[47] + x[102] <= 0.6) #= e163: =# @constraint(m, -x[37] - x[95] >= -1.9) #= e164: =# @constraint(m, -x[38] - x[96] >= -1.9) #= e165: =# @constraint(m, -x[37] - x[98] >= -2) #= e166: =# @constraint(m, -x[38] - x[99] >= -2) #= e167: =# @constraint(m, -x[40] - x[101] >= -1.9) #= e168: =# @constraint(m, -x[41] - x[102] >= -1.9) #= e169: =# @constraint(m, -x[43] - x[95] >= -1.4) #= e170: =# @constraint(m, -x[44] - x[96] >= -1.4) #= e171: =# @constraint(m, -x[43] - x[98] >= -1.8) #= e172: =# @constraint(m, -x[44] - x[99] >= -1.8) #= e173: =# @constraint(m, -x[46] - x[101] >= -1.4) #= e174: =# @constraint(m, -x[47] - x[102] >= -1.4) #= e175: =# @constraint(m, x[94] <= 1.1) #= e176: =# @constraint(m, x[97] <= 0.2) #= e177: =# @constraint(m, x[100] <= 1.6) #= e178: =# @constraint(m, x[94] <= 1.1) #= e179: =# @constraint(m, x[97] <= 0.9) #= e180: =# @constraint(m, x[100] <= 1.2) #= e181: =# @constraint(m, -x[94] >= -1.7) #= e182: =# @constraint(m, -x[97] >= -1.8) #= e183: =# @constraint(m, -x[100] >= -1.2) #= e184: =# @constraint(m, -x[94] >= -0.9) #= e185: =# @constraint(m, -x[97] >= -1.3) #= e186: =# @constraint(m, -x[100] >= -0.8) #= e187: =# @constraint(m, x[67] + x[91] <= 1) #= e188: =# @constraint(m, x[68] + x[92] <= 1) #= e189: =# @constraint(m, x[69] + x[93] <= 1) #= e190: =# @constraint(m, x[67] + x[94] <= 1) #= e191: =# @constraint(m, x[68] + x[95] <= 1) #= e192: =# @constraint(m, x[69] + x[96] <= 1) #= e193: =# @constraint(m, x[67] + x[97] <= 1) #= e194: =# @constraint(m, x[68] + x[98] <= 1) #= e195: =# @constraint(m, x[69] + x[99] <= 1) #= e196: =# @constraint(m, x[79] + x[91] <= 1) #= e197: =# @constraint(m, x[80] + x[92] <= 1) #= e198: =# @constraint(m, x[81] + x[93] <= 1) #= e199: =# @constraint(m, x[79] + x[94] <= 1) #= e200: =# @constraint(m, x[80] + x[95] <= 1) #= e201: =# @constraint(m, x[81] + x[96] <= 1) #= e202: =# @constraint(m, x[79] + x[97] <= 1) #= e203: =# @constraint(m, x[80] + x[98] <= 1) #= e204: =# @constraint(m, x[81] + x[99] <= 1) #= e205: =# @constraint(m, x[70] + x[100] <= 1) #= e206: =# @constraint(m, x[71] + x[101] <= 1) #= e207: =# @constraint(m, x[72] + x[102] <= 1) #= e208: =# @constraint(m, x[82] + x[100] <= 1) #= e209: =# @constraint(m, x[83] + x[101] <= 1) #= e210: =# @constraint(m, x[84] + x[102] <= 1) #= e211: =# @constraint(m, x[91] + x[100] <= 1) #= e212: =# @constraint(m, x[92] + x[101] <= 1) #= e213: =# @constraint(m, x[93] + x[102] <= 1) #= e214: =# return m end function blend029_gl(; solver = nothing) m = JuMP.Model(solver) @variable(m, x[1:102]) for i in 67:102 JuMP.set_binary(x[i]) end for i in 1:48 set_lower_bound(x[i], 0) set_upper_bound(x[i], 1) end for i in 49:66 set_lower_bound(x[i], 0) set_upper_bound(x[i], 2) end @objective( m, Max, -1.74 * x[1] - 1.74 * x[2] - 1.74 * x[3] - 1.45 * x[4] - 1.45 * x[5] - 1.45 * x[6] + 7.38 * x[7] + 7.38 * x[8] + 7.38 * x[9] + 5.6 * x[10] + 5.6 * x[11] + 5.6 * x[12] - 1.7 * x[13] - 1.7 * x[14] - 1.7 * x[15] - 1.18 * x[16] - 1.18 * x[17] - 1.18 * x[18] + 7.21 * x[19] + 7.21 * x[20] + 7.21 * x[21] + 5.45 * x[22] + 5.45 * x[23] + 5.45 * x[24] - 0.3 * x[25] - 0.3 * x[26] - 0.3 * x[27] + 7.71 * x[28] + 7.71 * x[29] + 7.71 * x[30] + 6.28 * x[31] + 6.28 * x[32] + 6.28 * x[33] + 7.74 * x[34] + 7.74 * x[35] + 7.74 * x[36] - 0.84 * x[67] - 0.84 * x[68] - 0.84 * x[69] - 0.05 * x[70] - 0.05 * x[71] - 0.05 * x[72] - 0.94 * x[73] - 0.94 * x[74] - 0.94 * x[75] - 0.81 * x[76] - 0.81 * x[77] - 0.81 * x[78] - 0.79 * x[79] - 0.79 * x[80] - 0.79 * x[81] - 0.05 * x[82] - 0.05 * x[83] - 0.05 * x[84] - 0.65 * x[85] - 0.65 * x[86] - 0.65 * x[87] - 0.97 * x[88] - 0.97 * x[89] - 0.97 * x[90] - 0.57 * x[91] - 0.57 * x[92] - 0.57 * x[93] - 0.26 * x[94] - 0.26 * x[95] - 0.26 * x[96] - 0.45 * x[97] - 0.45 * x[98] - 0.45 * x[99] - 0.1 * x[100] - 0.1 * x[101] - 0.1 * x[102] ) @NLconstraint( m, x[37] * x[55] - 0.6 * x[1] - 0.2 * x[13] + 0.2 * x[25] + 0.2 * x[28] + 0.2 * x[31] >= 0.04 ) #= e8: =# @NLconstraint( m, x[40] * x[58] - 0.6 * x[4] - 0.2 * x[16] - 0.2 * x[25] + 0.7 * x[34] >= 0.07 ) #= e9: =# @NLconstraint( m, x[43] * x[55] - 0.4 * x[1] - 0.4 * x[13] + 0.5 * x[25] + 0.5 * x[28] + 0.5 * x[31] >= 0.1 ) #= e10: =# @NLconstraint( m, x[46] * x[58] - 0.4 * x[4] - 0.4 * x[16] - 0.5 * x[25] + 0.6 * x[34] >= 0.06 ) #= e11: =# @NLconstraint( m, x[38] * x[56] - (x[37] * x[55] - (x[37] * x[26] + x[37] * x[29] + x[37] * x[32])) - 0.6 * x[2] - 0.2 * x[14] >= 0 ) #= e24: =# @NLconstraint( m, x[39] * x[57] - (x[38] * x[56] - (x[38] * x[27] + x[38] * x[30] + x[38] * x[33])) - 0.6 * x[3] - 0.2 * x[15] >= 0 ) #= e25: =# @NLconstraint( m, x[41] * x[59] - (x[40] * x[58] + x[37] * x[26] - x[40] * x[35]) - 0.6 * x[5] - 0.2 * x[17] >= 0 ) #= e26: =# @NLconstraint( m, x[42] * x[60] - (x[41] * x[59] + x[38] * x[27] - x[41] * x[36]) - 0.6 * x[6] - 0.2 * x[18] >= 0 ) #= e27: =# @NLconstraint( m, x[44] * x[56] - (x[43] * x[55] - (x[43] * x[26] + x[43] * x[29] + x[43] * x[32])) - 0.4 * x[2] - 0.4 * x[14] >= 0 ) #= e28: =# @NLconstraint( m, x[45] * x[57] - (x[44] * x[56] - (x[44] * x[27] + x[44] * x[30] + x[44] * x[33])) - 0.4 * x[3] - 0.4 * x[15] >= 0 ) #= e29: =# @NLconstraint( m, x[47] * x[59] - (x[46] * x[58] + x[43] * x[26] - x[46] * x[35]) - 0.4 * x[5] - 0.4 * x[17] >= 0 ) #= e30: =# @NLconstraint( m, x[48] * x[60] - (x[47] * x[59] + x[44] * x[27] - x[47] * x[36]) - 0.4 * x[6] - 0.4 * x[18] >= 0 ) #= e31: =# @NLconstraint( m, x[37] * x[55] - 0.6 * x[1] - 0.2 * x[13] + 0.2 * x[25] + 0.2 * x[28] + 0.2 * x[31] <= 0.04 ) #= e8: =# @NLconstraint( m, x[40] * x[58] - 0.6 * x[4] - 0.2 * x[16] - 0.2 * x[25] + 0.7 * x[34] <= 0.07 ) #= e9: =# @NLconstraint( m, x[43] * x[55] - 0.4 * x[1] - 0.4 * x[13] + 0.5 * x[25] + 0.5 * x[28] + 0.5 * x[31] <= 0.1 ) #= e10: =# @NLconstraint( m, x[46] * x[58] - 0.4 * x[4] - 0.4 * x[16] - 0.5 * x[25] + 0.6 * x[34] <= 0.06 ) #= e11: =# @NLconstraint( m, x[38] * x[56] - (x[37] * x[55] - (x[37] * x[26] + x[37] * x[29] + x[37] * x[32])) - 0.6 * x[2] - 0.2 * x[14] <= 0 ) #= e24: =# @NLconstraint( m, x[39] * x[57] - (x[38] * x[56] - (x[38] * x[27] + x[38] * x[30] + x[38] * x[33])) - 0.6 * x[3] - 0.2 * x[15] <= 0 ) #= e25: =# @NLconstraint( m, x[41] * x[59] - (x[40] * x[58] + x[37] * x[26] - x[40] * x[35]) - 0.6 * x[5] - 0.2 * x[17] <= 0 ) #= e26: =# @NLconstraint( m, x[42] * x[60] - (x[41] * x[59] + x[38] * x[27] - x[41] * x[36]) - 0.6 * x[6] - 0.2 * x[18] <= 0 ) #= e27: =# @NLconstraint( m, x[44] * x[56] - (x[43] * x[55] - (x[43] * x[26] + x[43] * x[29] + x[43] * x[32])) - 0.4 * x[2] - 0.4 * x[14] <= 0 ) #= e28: =# @NLconstraint( m, x[45] * x[57] - (x[44] * x[56] - (x[44] * x[27] + x[44] * x[30] + x[44] * x[33])) - 0.4 * x[3] - 0.4 * x[15] <= 0 ) #= e29: =# @NLconstraint( m, x[47] * x[59] - (x[46] * x[58] + x[43] * x[26] - x[46] * x[35]) - 0.4 * x[5] - 0.4 * x[17] <= 0 ) #= e30: =# @NLconstraint( m, x[48] * x[60] - (x[47] * x[59] + x[44] * x[27] - x[47] * x[36]) - 0.4 * x[6] - 0.4 * x[18] <= 0 ) #= e31: =# warmstarter = [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.53351, 0.60649, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2, 0.2, 0.2, 0.7, 0.7, 0.7, 0.5, 0.5, 0.5, 0.6, 0.6, 0.6, 1.0, 2.0, 1.0, 1.1, 0.66649, 0.96, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 1.55, 1.27351, 2.0, 0.49, 0.35, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ] for i in 1:102 JuMP.set_start_value(x[i], warmstarter[i]) end @constraint(m, x[1] + x[4] + x[7] + x[10] + x[49] == 1) #= e2: =# @constraint(m, x[13] + x[16] + x[19] + x[22] + x[52] == 1.1) #= e3: =# @constraint(m, -x[1] - x[13] + x[25] + x[28] + x[31] + x[55] == 0.2) #= e4: =# @constraint(m, -x[4] - x[16] - x[25] + x[34] + x[58] == 0.1) #= e5: =# @constraint(m, -x[7] - x[19] - x[28] - x[34] + x[61] == 1.55) #= e6: =# @constraint(m, -x[10] - x[22] - x[31] + x[64] == 0.49) #= e7: =# @constraint(m, x[2] + x[5] + x[8] + x[11] - x[49] + x[50] == 1) #= e12: =# @constraint(m, x[3] + x[6] + x[9] + x[12] - x[50] + x[51] == 0) #= e13: =# @constraint(m, x[14] + x[17] + x[20] + x[23] - x[52] + x[53] == 0.1) #= e14: =# @constraint(m, x[15] + x[18] + x[21] + x[24] - x[53] + x[54] == 0.9) #= e15: =# @constraint(m, -x[2] - x[14] + x[26] + x[29] + x[32] - x[55] + x[56] == 0) #= e16: =# @constraint(m, -x[3] - x[15] + x[27] + x[30] + x[33] - x[56] + x[57] == 0) #= e17: =# @constraint(m, -x[5] - x[17] - x[26] + x[35] - x[58] + x[59] == 0) #= e18: =# @constraint(m, -x[6] - x[18] - x[27] + x[36] - x[59] + x[60] == 0) #= e19: =# @constraint(m, -x[8] - x[20] - x[29] - x[35] - x[61] + x[62] == -0.81) #= e20: =# @constraint(m, -x[9] - x[21] - x[30] - x[36] - x[62] + x[63] == -0.88) #= e21: =# @constraint(m, -x[11] - x[23] - x[32] - x[64] + x[65] == -0.14) #= e22: =# @constraint(m, -x[12] - x[24] - x[33] - x[65] + x[66] == -0.1) #= e23: =# @constraint(m, x[1] - x[67] <= 0) #= e32: =# @constraint(m, x[2] - x[68] <= 0) #= e33: =# @constraint(m, x[3] - x[69] <= 0) #= e34: =# @constraint(m, x[4] - x[70] <= 0) #= e35: =# @constraint(m, x[5] - x[71] <= 0) #= e36: =# @constraint(m, x[6] - x[72] <= 0) #= e37: =# @constraint(m, x[7] - x[73] <= 0) #= e38: =# @constraint(m, x[8] - x[74] <= 0) #= e39: =# @constraint(m, x[9] - x[75] <= 0) #= e40: =# @constraint(m, x[10] - x[76] <= 0) #= e41: =# @constraint(m, x[11] - x[77] <= 0) #= e42: =# @constraint(m, x[12] - x[78] <= 0) #= e43: =# @constraint(m, x[13] - x[79] <= 0) #= e44: =# @constraint(m, x[14] - x[80] <= 0) #= e45: =# @constraint(m, x[15] - x[81] <= 0) #= e46: =# @constraint(m, x[16] - x[82] <= 0) #= e47: =# @constraint(m, x[17] - x[83] <= 0) #= e48: =# @constraint(m, x[18] - x[84] <= 0) #= e49: =# @constraint(m, x[19] - x[85] <= 0) #= e50: =# @constraint(m, x[20] - x[86] <= 0) #= e51: =# @constraint(m, x[21] - x[87] <= 0) #= e52: =# @constraint(m, x[22] - x[88] <= 0) #= e53: =# @constraint(m, x[23] - x[89] <= 0) #= e54: =# @constraint(m, x[24] - x[90] <= 0) #= e55: =# @constraint(m, x[25] - x[91] <= 0) #= e56: =# @constraint(m, x[26] - x[92] <= 0) #= e57: =# @constraint(m, x[27] - x[93] <= 0) #= e58: =# @constraint(m, x[28] - x[94] <= 0) #= e59: =# @constraint(m, x[29] - x[95] <= 0) #= e60: =# @constraint(m, x[30] - x[96] <= 0) #= e61: =# @constraint(m, x[31] - x[97] <= 0) #= e62: =# @constraint(m, x[32] - x[98] <= 0) #= e63: =# @constraint(m, x[33] - x[99] <= 0) #= e64: =# @constraint(m, x[34] - x[100] <= 0) #= e65: =# @constraint(m, x[35] - x[101] <= 0) #= e66: =# @constraint(m, x[36] - x[102] <= 0) #= e67: =# @constraint(m, x[1] >= 0) #= e68: =# @constraint(m, x[2] >= 0) #= e69: =# @constraint(m, x[3] >= 0) #= e70: =# @constraint(m, x[4] >= 0) #= e71: =# @constraint(m, x[5] >= 0) #= e72: =# @constraint(m, x[6] >= 0) #= e73: =# @constraint(m, x[7] >= 0) #= e74: =# @constraint(m, x[8] >= 0) #= e75: =# @constraint(m, x[9] >= 0) #= e76: =# @constraint(m, x[10] >= 0) #= e77: =# @constraint(m, x[11] >= 0) #= e78: =# @constraint(m, x[12] >= 0) #= e79: =# @constraint(m, x[13] >= 0) #= e80: =# @constraint(m, x[14] >= 0) #= e81: =# @constraint(m, x[15] >= 0) #= e82: =# @constraint(m, x[16] >= 0) #= e83: =# @constraint(m, x[17] >= 0) #= e84: =# @constraint(m, x[18] >= 0) #= e85: =# @constraint(m, x[19] >= 0) #= e86: =# @constraint(m, x[20] >= 0) #= e87: =# @constraint(m, x[21] >= 0) #= e88: =# @constraint(m, x[22] >= 0) #= e89: =# @constraint(m, x[23] >= 0) #= e90: =# @constraint(m, x[24] >= 0) #= e91: =# @constraint(m, x[25] >= 0) #= e92: =# @constraint(m, x[26] >= 0) #= e93: =# @constraint(m, x[27] >= 0) #= e94: =# @constraint(m, x[28] >= 0) #= e95: =# @constraint(m, x[29] >= 0) #= e96: =# @constraint(m, x[30] >= 0) #= e97: =# @constraint(m, x[31] >= 0) #= e98: =# @constraint(m, x[32] >= 0) #= e99: =# @constraint(m, x[33] >= 0) #= e100: =# @constraint(m, x[34] >= 0) #= e101: =# @constraint(m, x[35] >= 0) #= e102: =# @constraint(m, x[36] >= 0) #= e103: =# @constraint(m, x[73] <= 1.5) #= e104: =# @constraint(m, x[74] <= 1.5) #= e105: =# @constraint(m, x[75] <= 1.5) #= e106: =# @constraint(m, x[76] <= 0.6) #= e107: =# @constraint(m, x[77] <= 0.6) #= e108: =# @constraint(m, x[78] <= 0.6) #= e109: =# @constraint(m, x[85] <= 1.1) #= e110: =# @constraint(m, x[86] <= 1.1) #= e111: =# @constraint(m, x[87] <= 1.1) #= e112: =# @constraint(m, x[88] <= 0.2) #= e113: =# @constraint(m, x[89] <= 0.2) #= e114: =# @constraint(m, x[90] <= 0.2) #= e115: =# @constraint(m, x[73] <= 1) #= e116: =# @constraint(m, x[74] <= 1) #= e117: =# @constraint(m, x[75] <= 1) #= e118: =# @constraint(m, x[76] <= 0.8) #= e119: =# @constraint(m, x[77] <= 0.8) #= e120: =# @constraint(m, x[78] <= 0.8) #= e121: =# @constraint(m, x[85] <= 1) #= e122: =# @constraint(m, x[86] <= 1) #= e123: =# @constraint(m, x[87] <= 1) #= e124: =# @constraint(m, x[88] <= 0.8) #= e125: =# @constraint(m, x[89] <= 0.8) #= e126: =# @constraint(m, x[90] <= 0.8) #= e127: =# @constraint(m, -x[73] >= -1.3) #= e128: =# @constraint(m, -x[74] >= -1.3) #= e129: =# @constraint(m, -x[75] >= -1.3) #= e130: =# @constraint(m, -x[76] >= -1.4) #= e131: =# @constraint(m, -x[77] >= -1.4) #= e132: =# @constraint(m, -x[78] >= -1.4) #= e133: =# @constraint(m, -x[85] >= -1.7) #= e134: =# @constraint(m, -x[86] >= -1.7) #= e135: =# @constraint(m, -x[87] >= -1.7) #= e136: =# @constraint(m, -x[88] >= -1.8) #= e137: =# @constraint(m, -x[89] >= -1.8) #= e138: =# @constraint(m, -x[90] >= -1.8) #= e139: =# @constraint(m, -x[73] >= -1) #= e140: =# @constraint(m, -x[74] >= -1) #= e141: =# @constraint(m, -x[75] >= -1) #= e142: =# @constraint(m, -x[76] >= -1.4) #= e143: =# @constraint(m, -x[77] >= -1.4) #= e144: =# @constraint(m, -x[78] >= -1.4) #= e145: =# @constraint(m, -x[85] >= -1) #= e146: =# @constraint(m, -x[86] >= -1) #= e147: =# @constraint(m, -x[87] >= -1) #= e148: =# @constraint(m, -x[88] >= -1.4) #= e149: =# @constraint(m, -x[89] >= -1.4) #= e150: =# @constraint(m, -x[90] >= -1.4) #= e151: =# @constraint(m, -x[37] + x[95] <= 0.9) #= e152: =# @constraint(m, -x[38] + x[96] <= 0.9) #= e153: =# @constraint(m, -x[37] + x[98] <= 0) #= e154: =# @constraint(m, -x[38] + x[99] <= 0) #= e155: =# @constraint(m, -x[40] + x[101] <= 0.9) #= e156: =# @constraint(m, -x[41] + x[102] <= 0.9) #= e157: =# @constraint(m, -x[43] + x[95] <= 0.6) #= e158: =# @constraint(m, -x[44] + x[96] <= 0.6) #= e159: =# @constraint(m, -x[43] + x[98] <= 0.4) #= e160: =# @constraint(m, -x[44] + x[99] <= 0.4) #= e161: =# @constraint(m, -x[46] + x[101] <= 0.6) #= e162: =# @constraint(m, -x[47] + x[102] <= 0.6) #= e163: =# @constraint(m, -x[37] - x[95] >= -1.9) #= e164: =# @constraint(m, -x[38] - x[96] >= -1.9) #= e165: =# @constraint(m, -x[37] - x[98] >= -2) #= e166: =# @constraint(m, -x[38] - x[99] >= -2) #= e167: =# @constraint(m, -x[40] - x[101] >= -1.9) #= e168: =# @constraint(m, -x[41] - x[102] >= -1.9) #= e169: =# @constraint(m, -x[43] - x[95] >= -1.4) #= e170: =# @constraint(m, -x[44] - x[96] >= -1.4) #= e171: =# @constraint(m, -x[43] - x[98] >= -1.8) #= e172: =# @constraint(m, -x[44] - x[99] >= -1.8) #= e173: =# @constraint(m, -x[46] - x[101] >= -1.4) #= e174: =# @constraint(m, -x[47] - x[102] >= -1.4) #= e175: =# @constraint(m, x[94] <= 1.1) #= e176: =# @constraint(m, x[97] <= 0.2) #= e177: =# @constraint(m, x[100] <= 1.6) #= e178: =# @constraint(m, x[94] <= 1.1) #= e179: =# @constraint(m, x[97] <= 0.9) #= e180: =# @constraint(m, x[100] <= 1.2) #= e181: =# @constraint(m, -x[94] >= -1.7) #= e182: =# @constraint(m, -x[97] >= -1.8) #= e183: =# @constraint(m, -x[100] >= -1.2) #= e184: =# @constraint(m, -x[94] >= -0.9) #= e185: =# @constraint(m, -x[97] >= -1.3) #= e186: =# @constraint(m, -x[100] >= -0.8) #= e187: =# @constraint(m, x[67] + x[91] <= 1) #= e188: =# @constraint(m, x[68] + x[92] <= 1) #= e189: =# @constraint(m, x[69] + x[93] <= 1) #= e190: =# @constraint(m, x[67] + x[94] <= 1) #= e191: =# @constraint(m, x[68] + x[95] <= 1) #= e192: =# @constraint(m, x[69] + x[96] <= 1) #= e193: =# @constraint(m, x[67] + x[97] <= 1) #= e194: =# @constraint(m, x[68] + x[98] <= 1) #= e195: =# @constraint(m, x[69] + x[99] <= 1) #= e196: =# @constraint(m, x[79] + x[91] <= 1) #= e197: =# @constraint(m, x[80] + x[92] <= 1) #= e198: =# @constraint(m, x[81] + x[93] <= 1) #= e199: =# @constraint(m, x[79] + x[94] <= 1) #= e200: =# @constraint(m, x[80] + x[95] <= 1) #= e201: =# @constraint(m, x[81] + x[96] <= 1) #= e202: =# @constraint(m, x[79] + x[97] <= 1) #= e203: =# @constraint(m, x[80] + x[98] <= 1) #= e204: =# @constraint(m, x[81] + x[99] <= 1) #= e205: =# @constraint(m, x[70] + x[100] <= 1) #= e206: =# @constraint(m, x[71] + x[101] <= 1) #= e207: =# @constraint(m, x[72] + x[102] <= 1) #= e208: =# @constraint(m, x[82] + x[100] <= 1) #= e209: =# @constraint(m, x[83] + x[101] <= 1) #= e210: =# @constraint(m, x[84] + x[102] <= 1) #= e211: =# @constraint(m, x[91] + x[100] <= 1) #= e212: =# @constraint(m, x[92] + x[101] <= 1) #= e213: =# @constraint(m, x[93] + x[102] <= 1) #= e214: =# return m end ================================================ FILE: examples/MINLPs/bnlp.jl ================================================ function hmittelman(; solver = nothing) # Source: https://www.minlplib.org/hmittelman.html # Global solution: 13.0 m = JuMP.Model(solver) # ----- Variables ----- # @variable(m, 0 <= objvar <= 20) b_Idx = Any[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] @variable(m, b[b_Idx], Bin) # ----- Constraints ----- # @NLconstraint( m, e1, -( 10 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] + 7 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] + b[3] * b[4] * b[6] * b[7] * b[8] + 12 * b[3] * b[4] * b[8] * b[11] + 8 * b[6] * b[7] * b[8] * b[12] + 3 * b[6] * b[7] * b[9] * b[14] * b[16] + b[9] * b[10] * b[14] * b[16] + 5 * b[5] * b[10] * b[14] * b[15] * b[16] + 3 * b[1] * b[2] * b[11] * b[12] ) + objvar == 0.0 ) @NLconstraint( m, e2, 3 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] - 12 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] - 8 * b[3] * b[4] * b[6] * b[7] * b[8] + b[3] * b[4] * b[8] * b[11] - 7 * b[1] * b[2] * b[11] * b[12] + 2 * b[13] * b[14] * b[15] * b[16] <= -2.0 ) @NLconstraint( m, e3, b[1] * b[2] * b[3] * b[4] * b[8] * b[11] - 10 * b[3] * b[4] * b[6] * b[7] * b[8] - 5 * b[6] * b[7] * b[8] * b[12] + b[6] * b[7] * b[9] * b[14] * b[16] + 7 * b[9] * b[10] * b[14] * b[16] + b[5] * b[10] * b[14] * b[15] * b[16] <= -1.0 ) @NLconstraint( m, e4, 5 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] - 3 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] - b[3] * b[4] * b[6] * b[7] * b[8] - 2 * b[5] * b[10] * b[14] * b[15] * b[16] + b[13] * b[14] * b[15] * b[16] <= -1.0 ) @NLconstraint( m, e5, 3 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] - 5 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] + b[3] * b[4] * b[6] * b[7] * b[8] + 2 * b[5] * b[10] * b[14] * b[15] * b[16] - b[13] * b[14] * b[15] * b[16] <= 1.0 ) @NLconstraint( m, e6, (-4 * b[3] * b[4] * b[6] * b[7] * b[8]) - 2 * b[3] * b[4] * b[8] * b[11] - 5 * b[6] * b[7] * b[9] * b[14] * b[16] + b[9] * b[10] * b[14] * b[16] - 9 * b[5] * b[10] * b[14] * b[15] * b[16] - 2 * b[1] * b[2] * b[11] * b[12] <= -3.0 ) @NLconstraint( m, e7, 9 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] - 12 * b[3] * b[4] * b[8] * b[11] - 7 * b[6] * b[7] * b[8] * b[12] + 6 * b[6] * b[7] * b[9] * b[14] * b[16] + 2 * b[5] * b[10] * b[14] * b[15] * b[16] - 15 * b[1] * b[2] * b[11] * b[12] + 3 * b[13] * b[14] * b[15] * b[16] <= -7.0 ) @NLconstraint( m, e8, 5 * b[1] * b[2] * b[3] * b[4] * b[8] * b[11] - 8 * b[5] * b[7] * b[9] * b[10] * b[14] * b[15] * b[16] + 2 * b[3] * b[4] * b[6] * b[7] * b[8] - 7 * b[3] * b[4] * b[8] * b[11] - b[6] * b[7] * b[8] * b[12] - 5 * b[9] * b[10] * b[14] * b[16] - 10 * b[1] * b[2] * b[11] * b[12] <= -1.0 ) # ----- Objective ----- # @objective(m, Min, objvar) return m end ================================================ FILE: examples/MINLPs/brainpc3.jl ================================================ function brainpc3(; solver = nothing) m = JuMP.Model(solver) # ----- Variables ----- # @variable(m, x[1:6907]) @NLobjective( m, Min, ( (-0.003214) + x[16] - (x[16] + x[3467]) * x[6903] + x[3467] + 6.34e-6 * x[6903] )^2 + (x[46] - (x[46] + x[3497]) * x[6903] + x[3497] + 0.01551 * x[6903])^2 + (x[76] - (x[76] + x[3527]) * x[6903] + x[3527] + 0.008919 * x[6903])^2 + (x[106] - (x[106] + x[3557]) * x[6903] + x[3557] + 0.005968 * x[6903])^2 + (x[136] - (x[136] + x[3587]) * x[6903] + x[3587] + 0.005773 * x[6903])^2 + (x[166] - (x[166] + x[3617]) * x[6903] + x[3617] + 0.004985 * x[6903])^2 + (x[196] - (x[196] + x[3647]) * x[6903] + x[3647] + 0.004795 * x[6903])^2 + (x[226] - (x[226] + x[3677]) * x[6903] + x[3677] + 0.004409 * x[6903])^2 + (x[271] - (x[271] + x[3722]) * x[6903] + x[3722] + 0.003829 * x[6903])^2 + (x[331] - (x[331] + x[3782]) * x[6903] + x[3782] + 0.003269 * x[6903])^2 + (x[391] - (x[391] + x[3842]) * x[6903] + x[3842] + 0.00317 * x[6903])^2 + (x[451] - (x[451] + x[3902]) * x[6903] + x[3902] + 0.00307 * x[6903])^2 + (x[511] - (x[511] + x[3962]) * x[6903] + x[3962] + 0.002971 * x[6903])^2 + (x[631] - (x[631] + x[4082]) * x[6903] + x[4082] + 0.002765 * x[6903])^2 + (x[811] - (x[811] + x[4262]) * x[6903] + x[4262] + 0.00247 * x[6903])^2 + (x[991] - (x[991] + x[4442]) * x[6903] + x[4442] + 0.002252 * x[6903])^2 + (x[1171] - (x[1171] + x[4622]) * x[6903] + x[4622] + 0.002066 * x[6903])^2 + (x[1351] - (x[1351] + x[4802]) * x[6903] + x[4802] + 0.001891 * x[6903])^2 + (x[1531] - (x[1531] + x[4982]) * x[6903] + x[4982] + 0.00173 * x[6903])^2 + (x[1711] - (x[1711] + x[5162]) * x[6903] + x[5162] + 0.001713 * x[6903])^2 + (x[1951] - (x[1951] + x[5402]) * x[6903] + x[5402] + 0.00166 * x[6903])^2 + (x[2251] - (x[2251] + x[5702]) * x[6903] + x[5702] + 0.001548 * x[6903])^2 + (x[2551] - (x[2551] + x[6002]) * x[6903] + x[6002] + 0.001435 * x[6903])^2 + (x[2851] - (x[2851] + x[6302]) * x[6903] + x[6302] + 0.001323 * x[6903])^2 + (x[3151] - (x[3151] + x[6602]) * x[6903] + x[6602] + 0.00121 * x[6903])^2 + (x[3451] - (x[3451] + x[6902]) * x[6903] + x[6902] + 0.001098 * x[6903])^2 ) return m # model get returned when including this script. end ================================================ FILE: examples/MINLPs/castro.jl ================================================ function castro2m2(; solver = nothing) m = JuMP.Model(solver) @variable(m, 0 <= x[1:41] <= 1E5) @variable(m, 0 <= obj <= 1E3) @objective(m, Min, obj) @NLconstraint(m, e31, x[28] * x[30] - x[16] == 0.0) @NLconstraint(m, e32, x[28] * x[31] - x[17] == 0.0) @NLconstraint(m, e33, x[29] * x[32] - x[18] == 0.0) @NLconstraint(m, e34, x[29] * x[33] - x[19] == 0.0) @NLconstraint(m, e35, x[28] * x[36] - x[22] == 0.0) @NLconstraint(m, e36, x[29] * x[37] - x[23] == 0.0) @NLconstraint(m, e37, x[14] * x[30] - x[1] == 0.0) @NLconstraint(m, e38, x[14] * x[31] - x[2] == 0.0) @NLconstraint(m, e39, x[15] * x[32] - x[3] == 0.0) @NLconstraint(m, e40, x[15] * x[33] - x[4] == 0.0) @NLconstraint(m, e41, x[14] * x[36] - x[7] == 0.0) @NLconstraint(m, e42, x[15] * x[37] - x[8] == 0.0) @constraint(m, e1, -x[14] - x[15] + obj == 0.0) @constraint(m, e2, -x[5] - x[9] - x[10] == -60.0) @constraint(m, e3, -x[6] - x[11] - x[12] == -20.0) @constraint(m, e4, -x[1] - x[3] - x[9] - x[11] + x[14] == 0.0) @constraint(m, e5, -x[2] - x[4] - x[10] - x[12] + x[15] == 0.0) @constraint(m, e6, -x[1] - x[2] - x[7] + x[14] == 0.0) @constraint(m, e7, -x[3] - x[4] - x[8] + x[15] == 0.0) @constraint(m, e8, -x[5] - x[6] - x[7] - x[8] + x[13] == 0.0) @constraint(m, e9, -x[20] - x[24] - x[25] == -24000.0) @constraint(m, e10, -x[21] - x[26] - x[27] == -16000.0) @constraint(m, e11, -x[24] + 24000 * x[38] == 0.0) @constraint(m, e12, -x[25] + 24000 * x[39] == 0.0) @constraint(m, e13, -x[26] + 16000 * x[40] == 0.0) @constraint(m, e14, -x[27] + 16000 * x[41] == 0.0) @constraint(m, e15, -x[20] + 24000 * x[34] == 0.0) @constraint(m, e16, -x[21] + 16000 * x[35] == 0.0) @constraint(m, e17, -x[9] + 60 * x[38] == 0.0) @constraint(m, e18, -x[10] + 60 * x[39] == 0.0) @constraint(m, e19, -x[11] + 20 * x[40] == 0.0) @constraint(m, e20, -x[12] + 20 * x[41] == 0.0) @constraint(m, e21, -x[5] + 60 * x[34] == 0.0) @constraint(m, e22, -x[6] + 20 * x[35] == 0.0) @constraint(m, e23, x[34] + x[38] + x[39] == 1.0) @constraint(m, e24, x[35] + x[40] + x[41] == 1.0) @constraint(m, e25, -200 * x[14] + x[16] + x[18] + x[24] + x[26] <= 0.0) @constraint(m, e26, -1000 * x[15] + x[17] + x[19] + x[25] + x[27] <= 0.0) @constraint( m, e27, 0.01 * x[16] + 0.01 * x[18] + 0.01 * x[24] + 0.01 * x[26] - x[28] == 0.0 ) @constraint( m, e28, 0.2 * x[17] + 0.2 * x[19] + 0.2 * x[25] + 0.2 * x[27] - x[29] == 0.0 ) @constraint(m, e29, -x[16] - x[17] - x[22] + x[28] == 0.0) @constraint(m, e30, -x[18] - x[19] - x[23] + x[29] == 0.0) @constraint(m, e43, x[30] + x[31] + x[36] == 1.0) @constraint(m, e44, x[32] + x[33] + x[37] == 1.0) @constraint(m, e45, -10 * x[13] + x[20] + x[21] + x[22] + x[23] <= 0.0) return m end function castro6m2(; solver = nothing) m = JuMP.Model(solver) @variable(m, 0 <= x[1:133] <= 1E6) @variable(m, obj) @variable(m, b[1:40]) #Additional variables to increase degree of freedom and Ipopt's convergence @objective(m, Min, obj) # Non-Linear Constraints @NLconstraint(m, e99, x[101] * x[110] - x[29] == 0.0) @NLconstraint(m, e100, x[102] * x[110] - x[30] == 0.0) @NLconstraint(m, e101, x[103] * x[110] - x[31] == 0.0) @NLconstraint(m, e102, x[101] * x[111] - x[32] == 0.0) @NLconstraint(m, e103, x[102] * x[111] - x[33] == 0.0) @NLconstraint(m, e104, x[103] * x[111] - x[34] == 0.0) @NLconstraint(m, e105, x[101] * x[112] - x[35] == 0.0) @NLconstraint(m, e106, x[102] * x[112] - x[36] == 0.0) @NLconstraint(m, e107, x[103] * x[112] - x[37] == 0.0) @NLconstraint(m, e108, x[104] * x[113] - x[38] == 0.0) @NLconstraint(m, e109, x[105] * x[113] - x[39] == 0.0) @NLconstraint(m, e110, x[106] * x[113] - x[40] == 0.0) @NLconstraint(m, e111, x[104] * x[114] - x[41] == 0.0) @NLconstraint(m, e112, x[105] * x[114] - x[42] == 0.0) @NLconstraint(m, e113, x[106] * x[114] - x[43] == 0.0) @NLconstraint(m, e114, x[104] * x[115] - x[44] == 0.0) @NLconstraint(m, e115, x[105] * x[115] - x[45] == 0.0) @NLconstraint(m, e116, x[106] * x[115] - x[46] == 0.0) @NLconstraint(m, e117, x[107] * x[116] - x[47] == 0.0) @NLconstraint(m, e118, x[108] * x[116] - x[48] == 0.0) @NLconstraint(m, e119, x[109] * x[116] - x[49] == 0.0) @NLconstraint(m, e120, x[107] * x[117] - x[50] == 0.0) @NLconstraint(m, e121, x[108] * x[117] - x[51] == 0.0) @NLconstraint(m, e122, x[109] * x[117] - x[52] == 0.0) @NLconstraint(m, e123, x[107] * x[118] - x[53] == 0.0) @NLconstraint(m, e124, x[108] * x[118] - x[54] == 0.0) @NLconstraint(m, e125, x[109] * x[118] - x[55] == 0.0) @NLconstraint(m, e126, x[101] * x[122] - x[65] == 0.0) @NLconstraint(m, e127, x[102] * x[122] - x[66] == 0.0) @NLconstraint(m, e128, x[103] * x[122] - x[67] == 0.0) @NLconstraint(m, e129, x[104] * x[123] - x[68] == 0.0) @NLconstraint(m, e130, x[105] * x[123] - x[69] == 0.0) @NLconstraint(m, e131, x[106] * x[123] - x[70] == 0.0) @NLconstraint(m, e132, x[107] * x[124] - x[71] == 0.0) @NLconstraint(m, e133, x[108] * x[124] - x[72] == 0.0) @NLconstraint(m, e134, x[109] * x[124] - x[73] == 0.0) @NLconstraint(m, e135, x[26] * x[110] - x[1] == 0.0) @NLconstraint(m, e136, x[26] * x[111] - x[2] == 0.0) @NLconstraint(m, e137, x[26] * x[112] - x[3] == 0.0) @NLconstraint(m, e138, x[27] * x[113] - x[4] == 0.0) @NLconstraint(m, e139, x[27] * x[114] - x[5] == 0.0) @NLconstraint(m, e140, x[27] * x[115] - x[6] == 0.0) @NLconstraint(m, e141, x[28] * x[116] - x[7] == 0.0) @NLconstraint(m, e142, x[28] * x[117] - x[8] == 0.0) @NLconstraint(m, e143, x[28] * x[118] - x[9] == 0.0) @NLconstraint(m, e144, x[26] * x[122] - x[13] == 0.0) @NLconstraint(m, e145, x[27] * x[123] - x[14] == 0.0) @NLconstraint(m, e146, x[28] * x[124] - x[15] == 0.0) @constraint(m, e1, -x[26] - x[27] - x[28] + obj == 0.0) @constraint(m, e2, -x[10] - x[16] - x[17] - x[18] == -13.1) @constraint(m, e3, -x[11] - x[19] - x[20] - x[21] == -32.7) @constraint(m, e4, -x[12] - x[22] - x[23] - x[24] == -56.5) @constraint(m, e5, -x[1] - x[4] - x[7] - x[16] - x[19] - x[22] + x[26] == 0.0) @constraint(m, e6, -x[2] - x[5] - x[8] - x[17] - x[20] - x[23] + x[27] == 0.0) @constraint(m, e7, -x[3] - x[6] - x[9] - x[18] - x[21] - x[24] + x[28] == 0.0) @constraint(m, e8, -x[1] - x[2] - x[3] - x[13] + x[26] == 0.0) @constraint(m, e9, -x[4] - x[5] - x[6] - x[14] + x[27] == 0.0) @constraint(m, e10, -x[7] - x[8] - x[9] - x[15] + x[28] == 0.0) @constraint(m, e11, -x[10] - x[11] - x[12] - x[13] - x[14] - x[15] + x[25] == 0.0) @constraint(m, e12, -x[56] - x[74] - x[77] - x[80] == -131.0) @constraint(m, e13, -x[57] - x[75] - x[78] - x[81] == -5109.0) @constraint(m, e14, -x[58] - x[76] - x[79] - x[82] == -3275.0) @constraint(m, e15, -x[59] - x[83] - x[86] - x[89] == -3597.0) @constraint(m, e16, -x[60] - x[84] - x[87] - x[90] == -548706.0) @constraint(m, e17, -x[61] - x[85] - x[88] - x[91] == -13080.0) @constraint(m, e18, -x[62] - x[92] - x[95] - x[98] == -5650.0) @constraint(m, e19, -x[63] - x[93] - x[96] - x[99] == -1412.5) @constraint(m, e20, -x[64] - x[94] - x[97] - x[100] == -19775.0) @constraint(m, e21, -x[74] + 131 * x[125] == 0.0) @constraint(m, e22, -x[75] + 5109 * x[125] == 0.0) @constraint(m, e23, -x[76] + 3275 * x[125] == 0.0) @constraint(m, e24, -x[77] + 131 * x[126] == 0.0) @constraint(m, e25, -x[78] + 5109 * x[126] == 0.0) @constraint(m, e26, -x[79] + 3275 * x[126] == 0.0) @constraint(m, e27, -x[80] + 131 * x[127] == 0.0) @constraint(m, e28, -x[81] + 5109 * x[127] == 0.0) @constraint(m, e29, -x[82] + 3275 * x[127] == 0.0) @constraint(m, e30, -x[83] + 3597 * x[128] == 0.0) @constraint(m, e31, -x[84] + 548706 * x[128] == 0.0) @constraint(m, e32, -x[85] + 13080 * x[128] == 0.0) @constraint(m, e33, -x[86] + 3597 * x[129] == 0.0) @constraint(m, e34, -x[87] + 548706 * x[129] == 0.0) @constraint(m, e35, -x[88] + 13080 * x[129] == 0.0) @constraint(m, e36, -x[89] + 3597 * x[130] == 0.0) @constraint(m, e37, -x[90] + 548706 * x[130] == 0.0) @constraint(m, e38, -x[91] + 13080 * x[130] == 0.0) @constraint(m, e39, -x[92] + 5650 * x[131] == 0.0) @constraint(m, e40, -x[93] + 1412.5 * x[131] == 0.0) @constraint(m, e41, -x[94] + 19775 * x[131] == 0.0) @constraint(m, e42, -x[95] + 5650 * x[132] == 0.0) @constraint(m, e43, -x[96] + 1412.5 * x[132] == 0.0) @constraint(m, e44, -x[97] + 19775 * x[132] == 0.0) @constraint(m, e45, -x[98] + 5650 * x[133] == 0.0) @constraint(m, e46, -x[99] + 1412.5 * x[133] == 0.0) @constraint(m, e47, -x[100] + 19775 * x[133] == 0.0) @constraint(m, e48, -x[56] + 131 * x[119] == 0.0) @constraint(m, e49, -x[57] + 5109 * x[119] == 0.0) @constraint(m, e50, -x[58] + 3275 * x[119] == 0.0) @constraint(m, e51, -x[59] + 3597 * x[120] == 0.0) @constraint(m, e52, -x[60] + 548706 * x[120] == 0.0) @constraint(m, e53, -x[61] + 13080 * x[120] == 0.0) @constraint(m, e54, -x[62] + 5650 * x[121] == 0.0) @constraint(m, e55, -x[63] + 1412.5 * x[121] == 0.0) @constraint(m, e56, -x[64] + 19775 * x[121] == 0.0) @constraint(m, e57, -x[16] + 13.1 * x[125] == 0.0) @constraint(m, e58, -x[17] + 13.1 * x[126] == 0.0) @constraint(m, e59, -x[18] + 13.1 * x[127] == 0.0) @constraint(m, e60, -x[19] + 32.7 * x[128] == 0.0) @constraint(m, e61, -x[20] + 32.7 * x[129] == 0.0) @constraint(m, e62, -x[21] + 32.7 * x[130] == 0.0) @constraint(m, e63, -x[22] + 56.5 * x[131] == 0.0) @constraint(m, e64, -x[23] + 56.5 * x[132] == 0.0) @constraint(m, e65, -x[24] + 56.5 * x[133] == 0.0) @constraint(m, e66, -x[10] + 13.1 * x[119] == 0.0) @constraint(m, e67, -x[11] + 32.7 * x[120] == 0.0) @constraint(m, e68, -x[12] + 56.5 * x[121] == 0.0) @constraint(m, e69, x[119] + x[125] + x[126] + x[127] == 1.0) @constraint(m, e70, x[120] + x[128] + x[129] + x[130] == 1.0) @constraint(m, e71, x[121] + x[131] + x[132] + x[133] == 1.0) @constraint( m, e72, -110 * x[26] + x[29] + x[38] + x[47] + x[74] + x[83] + x[92] <= 0.0 ) @constraint( m, e73, -16780 * x[26] + x[30] + x[39] + x[48] + x[75] + x[84] + x[93] <= 0.0 ) @constraint( m, e74, -400 * x[26] + x[31] + x[40] + x[49] + x[76] + x[85] + x[94] <= 0.0 ) @constraint( m, e75, -110 * x[27] + x[32] + x[41] + x[50] + x[77] + x[86] + x[95] <= 0.0 ) @constraint( m, e76, -16780 * x[27] + x[33] + x[42] + x[51] + x[78] + x[87] + x[96] <= 0.0 ) @constraint( m, e77, -400 * x[27] + x[34] + x[43] + x[52] + x[79] + x[88] + x[97] <= 0.0 ) @constraint( m, e78, -110 * x[28] + x[35] + x[44] + x[53] + x[80] + x[89] + x[98] <= 0.0 ) @constraint( m, e79, -16780 * x[28] + x[36] + x[45] + x[54] + x[81] + x[90] + x[99] <= 0.0 ) @constraint( m, e80, -400 * x[28] + x[37] + x[46] + x[55] + x[82] + x[91] + x[100] <= 0.0 ) @constraint(m, e81, x[29] + x[38] + x[47] + x[74] + x[83] + x[92] - x[101] == 0.0) @constraint( m, e82, 0.001 * x[30] + 0.001 * x[39] + 0.001 * x[48] + 0.001 * x[75] + 0.001 * x[84] + 0.001 * x[93] - x[102] == 0.0 ) @constraint(m, e83, x[31] + x[40] + x[49] + x[76] + x[85] + x[94] - x[103] == 0.0) @constraint( m, e84, 0.3 * x[32] + 0.3 * x[41] + 0.3 * x[50] + 0.3 * x[77] + 0.3 * x[86] + 0.3 * x[95] - x[104] == 0.0 ) @constraint( m, e85, 0.1 * x[33] + 0.1 * x[42] + 0.1 * x[51] + 0.1 * x[78] + 0.1 * x[87] + 0.1 * x[96] - x[105] == 0.0 ) @constraint( m, e86, 0.02 * x[34] + 0.02 * x[43] + 0.02 * x[52] + 0.02 * x[79] + 0.02 * x[88] + 0.02 * x[97] - x[106] == 0.0 ) @constraint( m, e87, 0.3 * x[35] + 0.3 * x[44] + 0.3 * x[53] + 0.3 * x[80] + 0.3 * x[89] + 0.3 * x[98] - x[107] == 0.0 ) @constraint(m, e88, x[36] + x[45] + x[54] + x[81] + x[90] + x[99] - x[108] == 0.0) @constraint( m, e89, 0.5 * x[37] + 0.5 * x[46] + 0.5 * x[55] + 0.5 * x[82] + 0.5 * x[91] + 0.5 * x[100] - x[109] == 0.0 ) @constraint(m, e90, -x[29] - x[32] - x[35] - x[65] + x[101] == 0.0) @constraint(m, e91, -x[30] - x[33] - x[36] - x[66] + x[102] == 0.0) @constraint(m, e92, -x[31] - x[34] - x[37] - x[67] + x[103] == 0.0) @constraint(m, e93, -x[38] - x[41] - x[44] - x[68] + x[104] == 0.0) @constraint(m, e94, -x[39] - x[42] - x[45] - x[69] + x[105] == 0.0) @constraint(m, e95, -x[40] - x[43] - x[46] - x[70] + x[106] == 0.0) @constraint(m, e96, -x[47] - x[50] - x[53] - x[71] + x[107] == 0.0) @constraint(m, e97, -x[48] - x[51] - x[54] - x[72] + x[108] == 0.0) @constraint(m, e98, -x[49] - x[52] - x[55] - x[73] + x[109] == 0.0) @constraint(m, e147, x[110] + x[111] + x[112] + x[122] == 1.0) @constraint(m, e148, x[113] + x[114] + x[115] + x[123] == 1.0) @constraint(m, e149, x[116] + x[117] + x[118] + x[124] == 1.0) @constraint( m, e150, -20 * x[25] + x[56] + x[59] + x[62] + x[65] + x[68] + x[71] <= 0.0 ) @constraint( m, e151, -5 * x[25] + x[57] + x[60] + x[63] + x[66] + x[69] + x[72] <= 0.0 ) @constraint( m, e152, -100 * x[25] + x[58] + x[61] + x[64] + x[67] + x[70] + x[73] <= 0.0 ) return m end function castro4m2(; solver = nothing) m = JuMP.Model(solver) # ----- Variables ----- # @variable(m, 0 <= x[1:55] <= 1E6) @variable(m, obj) @variable(m, b[1:20]) #Additional variables to increase degree of freedom and Ipopt's convergence @objective(m, Min, obj) @NLconstraint(m, e45, x[40] * x[44] - x[16] == 0.0) @NLconstraint(m, e46, x[41] * x[44] - x[17] == 0.0) @NLconstraint(m, e47, x[40] * x[45] - x[18] == 0.0) @NLconstraint(m, e48, x[41] * x[45] - x[19] == 0.0) @NLconstraint(m, e49, x[42] * x[46] - x[20] == 0.0) @NLconstraint(m, e50, x[43] * x[46] - x[21] == 0.0) @NLconstraint(m, e51, x[42] * x[47] - x[22] == 0.0) @NLconstraint(m, e52, x[43] * x[47] - x[23] == 0.0) @NLconstraint(m, e53, x[40] * x[50] - x[28] == 0.0) @NLconstraint(m, e54, x[41] * x[50] - x[29] == 0.0) @NLconstraint(m, e55, x[42] * x[51] - x[30] == 0.0) @NLconstraint(m, e56, x[43] * x[51] - x[31] == 0.0) @NLconstraint(m, e57, x[14] * x[44] - x[1] == 0.0) @NLconstraint(m, e58, x[14] * x[45] - x[2] == 0.0) @NLconstraint(m, e59, x[15] * x[46] - x[3] == 0.0) @NLconstraint(m, e60, x[15] * x[47] - x[4] == 0.0) @NLconstraint(m, e61, x[14] * x[50] - x[7] == 0.0) @NLconstraint(m, e62, x[15] * x[51] - x[8] == 0.0) @constraint(m, e1, -x[14] - x[15] + obj == 0.0) @constraint(m, e2, -x[5] - x[9] - x[10] == -40.0) @constraint(m, e3, -x[6] - x[11] - x[12] == -40.0) @constraint(m, e4, -x[1] - x[3] - x[9] - x[11] + x[14] == 0.0) @constraint(m, e5, -x[2] - x[4] - x[10] - x[12] + x[15] == 0.0) @constraint(m, e6, -x[1] - x[2] - x[7] + x[14] == 0.0) @constraint(m, e7, -x[3] - x[4] - x[8] + x[15] == 0.0) @constraint(m, e8, -x[5] - x[6] - x[7] - x[8] + x[13] == 0.0) @constraint(m, e9, -x[24] - x[32] - x[34] == -4000.0) @constraint(m, e10, -x[25] - x[33] - x[35] == -800.0) @constraint(m, e11, -x[26] - x[36] - x[38] == -600.0) @constraint(m, e12, -x[27] - x[37] - x[39] == -8000.0) @constraint(m, e13, -x[32] + 4000 * x[52] == 0.0) @constraint(m, e14, -x[33] + 800 * x[52] == 0.0) @constraint(m, e15, -x[34] + 4000 * x[53] == 0.0) @constraint(m, e16, -x[35] + 800 * x[53] == 0.0) @constraint(m, e17, -x[36] + 600 * x[54] == 0.0) @constraint(m, e18, -x[37] + 8000 * x[54] == 0.0) @constraint(m, e19, -x[38] + 600 * x[55] == 0.0) @constraint(m, e20, -x[39] + 8000 * x[55] == 0.0) @constraint(m, e21, -x[24] + 4000 * x[48] == 0.0) @constraint(m, e22, -x[25] + 800 * x[48] == 0.0) @constraint(m, e23, -x[26] + 600 * x[49] == 0.0) @constraint(m, e24, -x[27] + 8000 * x[49] == 0.0) @constraint(m, e25, -x[9] + 40 * x[52] == 0.0) @constraint(m, e26, -x[10] + 40 * x[53] == 0.0) @constraint(m, e27, -x[11] + 40 * x[54] == 0.0) @constraint(m, e28, -x[12] + 40 * x[55] == 0.0) @constraint(m, e29, -x[5] + 40 * x[48] == 0.0) @constraint(m, e30, -x[6] + 40 * x[49] == 0.0) @constraint(m, e31, x[48] + x[52] + x[53] == 1.0) @constraint(m, e32, x[49] + x[54] + x[55] == 1.0) @constraint(m, e33, -200 * x[14] + x[16] + x[20] + x[32] + x[36] <= 0.0) @constraint(m, e34, -200 * x[14] + x[17] + x[21] + x[33] + x[37] <= 0.0) @constraint(m, e35, -200 * x[15] + x[18] + x[22] + x[34] + x[38] <= 0.0) @constraint(m, e36, -200 * x[15] + x[19] + x[23] + x[35] + x[39] <= 0.0) @constraint( m, e37, 0.05 * x[16] + 0.05 * x[20] + 0.05 * x[32] + 0.05 * x[36] - x[40] == 0.0 ) @constraint(m, e38, x[17] + x[21] + x[33] + x[37] - x[41] == 0.0) @constraint(m, e39, x[18] + x[22] + x[34] + x[38] - x[42] == 0.0) @constraint( m, e40, 0.024 * x[19] + 0.024 * x[23] + 0.024 * x[35] + 0.024 * x[39] - x[43] == 0.0 ) @constraint(m, e41, -x[16] - x[18] - x[28] + x[40] == 0.0) @constraint(m, e42, -x[17] - x[19] - x[29] + x[41] == 0.0) @constraint(m, e43, -x[20] - x[22] - x[30] + x[42] == 0.0) @constraint(m, e44, -x[21] - x[23] - x[31] + x[43] == 0.0) @constraint(m, e63, x[44] + x[45] + x[50] == 1.0) @constraint(m, e64, x[46] + x[47] + x[51] == 1.0) @constraint(m, e65, -10 * x[13] + x[24] + x[26] + x[28] + x[30] <= 0.0) @constraint(m, e66, -10 * x[13] + x[25] + x[27] + x[29] + x[31] <= 0.0) return m end ================================================ FILE: examples/MINLPs/circle.jl ================================================ function circle(; solver = nothing) m = JuMP.Model(solver) @variable(m, 0 <= x[1:2] <= 2) @NLconstraint(m, x[1]^2 + x[2]^2 >= 2) @objective(m, Min, x[1] + x[2]) return m end function circle_MINLPLib(; solver = nothing) # Source: https://www.minlplib.org/circle.html # Above instance has been mofified to convert the problem into a non-convex NLP # Global solution: 4.45670663096, arg min = [4.2536125, 3.4367961] m = JuMP.Model(solver) @variable(m, 0 <= objvar <= 5) @variable(m, 1 <= x[1:2] <= 5) @NLconstraint( m, e1, (2.545724188 - x[1])^2 + (9.983058643 - x[2])^2 - (objvar)^2 >= 0.0 ) @NLconstraint( m, e2, (8.589400372 - x[1])^2 + (6.208600402 - x[2])^2 - (objvar)^2 >= 0.0 ) @NLconstraint( m, e3, (5.953378204 - x[1])^2 + (9.920197351 - x[2])^2 - (objvar)^2 >= 0.0 ) @NLconstraint( m, e4, (3.710241136 - x[1])^2 + (7.860254203 - x[2])^2 - (objvar)^2 >= 0.0 ) @NLconstraint( m, e5, (3.629909053 - x[1])^2 + (2.176232347 - x[2])^2 - (objvar)^2 <= 0.0 ) @NLconstraint( m, e6, (3.016475803 - x[1])^2 + (6.757468831 - x[2])^2 - (objvar)^2 <= 0.0 ) @NLconstraint( m, e7, (4.148474536 - x[1])^2 + (2.435660776 - x[2])^2 - (objvar)^2 <= 0.0 ) @NLconstraint( m, e8, (8.706433123 - x[1])^2 + (3.250724797 - x[2])^2 - (objvar)^2 <= 0.0 ) @NLconstraint( m, e9, (1.604023507 - x[1])^2 + (7.020357481 - x[2])^2 - (objvar)^2 <= 0.0 ) @NLconstraint( m, e10, (5.501896021 - x[1])^2 + (4.918207429 - x[2])^2 - (objvar)^2 <= 0.0 ) @objective(m, Min, objvar) return m end ================================================ FILE: examples/MINLPs/convex.jl ================================================ function convex_test(; solver = nothing) m = JuMP.Model(solver) @variable(m, 0 <= x[1:5] <= 2) @constraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[2] <= 25) # 1: true @constraint(m, 3 * x[1] * x[1] - 25 + 4 * x[2] * x[2] <= 0) # 2: true @constraint(m, 3(x[1]x[1]) + 4 * x[2] * x[2] <= -5) # 3: false @constraint(m, 3(x[1]x[1]) + 4 * x[2]^2 <= 10) # 4: true @constraint(m, 3x[1]^2 + 4x[2]^2 + 6x[3]^2 <= 10) # 5: true # @NLconstraint(m, 3x[1]^0.5 + 4x[2]^0.5 + 5x[5]^0.5 <= 100)# 6: true | type-C # @NLconstraint(m, -3x[1]^0.5 - 4x[2]^0.5 >= -100)# 7: true | type-C @NLconstraint(m, x[1]^2 <= 2) # convex - dummy @NLconstraint(m, x[2]^2 <= 2) # convex - dummy @NLconstraint(m, 3x[1]^3 + x[2]^3 + 5x[3]^3 <= 200) # 8: true | type-a @NLconstraint( m, x[1] * x[1] * x[1] + x[2] * x[2] * x[2] + x[3] * x[3] * x[3] + 5 * x[4] * 20 * x[4] * x[4] <= 200 ) # 9: true @NLconstraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[2] <= 25) # 10: true @NLconstraint(m, (3 * x[1] * x[1] + 4 * x[2] * x[2]) <= 25) # 11: true @NLconstraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[2] - 25 <= 0) # 12: true @NLconstraint(m, -3 * x[1] * x[1] - 4 * x[2] * x[2] >= -25) # 13: true @NLconstraint(m, 3 * x[1] * x[1] + 5x[2] * x[2] <= 25) # 14: true @NLconstraint(m, x[1] * 3 * x[1] + x[2] * x[2] * 5 + x[4]^(3 - 1) <= 25) # 15: true @NLconstraint(m, 4 * x[1]^2 + 5x[2]^2 <= 25) # 16: true @NLconstraint(m, 3 * x[1] * x[1] - 25 + 4 * x[2] * x[2] <= 0) # 17: false (unsupported when with @NLconstraint) @NLconstraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[1] <= 25) # 18: false @NLconstraint(m, 3 * x[1] * x[1] + 16 * x[2]^2 <= 40) # 19: true @NLconstraint(m, 3 * x[1]^2 + 16 * x[2]^2 + 17 <= 16) # 20: false @NLconstraint(m, 3 * x[1]^3 + 16 * x[2]^2 <= 20 - 20) # 21: false @NLconstraint( m, 3 * x[1] * x[1] + 4 * x[2] * x[2] + 5 * x[3] * x[3] + 6x[4]x[4] <= 15 ) # 22: true @NLconstraint(m, 3x[1]x[1] + 4x[2]x[2] + 5x[3]^2 <= -15) # 23: false @NLconstraint(m, 3x[1]^2 + 4x[2]^2 >= 15) # 24: false @NLconstraint(m, sum(x[i]^2 for i in 1:5) <= 99999) # 25: true @NLconstraint(m, 3x[1]^4 + 4x[2]^4 <= 200) # 26: true @NLconstraint(m, 3x[1]^4 + 4x[2]x[2]x[2]x[2] - 200 <= 0) # 27: true @NLconstraint(m, 3x[1]^4 + 4x[2]^2 * x[2] * x[2] <= 200) # 28: true @NLconstraint(m, 3x[1]^4 + 4x[2]^3 <= 200) # 29: false @NLconstraint(m, 3x[1]^8 + 16 * 25 * x[2]^8 - 30x[3]^8 <= 50) # 30: false @objective(m, Max, x[1]^2 + x[3]^2) # true return m end function convex_solve(; solver = nothing) m = JuMP.Model(solver) @variable(m, 0 <= x[1:5] <= 100) @NLconstraint(m, 3 * x[1] * x[1] + 4 * x[2] * x[2] <= 25) # 1: true @NLconstraint(m, 3(x[1]x[1]) + 4 * x[2]^2 <= 10) # 4: true @NLconstraint(m, 3x[1]^2 + 4x[2]^2 + 6x[3]^2 <= 10) # 5: true @NLconstraint(m, (x[1] + x[2])^2 <= 100) @NLconstraint(m, -3 * x[1] * x[1] - 4 * x[2] * x[2] >= -25) # 13: true @objective(m, Max, x[1]^2 + x[3]^2) # true return m end ================================================ FILE: examples/MINLPs/discretemulti.jl ================================================ function binprod_nlp3(; solver = nothing) m = JuMP.Model(solver) LB = [100, 1000, 1000, 10, 10, 10, 10, 10] UB = [10000, 10000, 10000, 1000, 1000, 1000, 1000, 1000] @variable(m, LB[i] <= x[i = 1:8] <= UB[i]) @variable(m, 0 <= y[1:5] <= 1, Bin) @constraint(m, 0.0025 * (x[4] * y[1] + x[6] * y[2]) <= 1) @constraint(m, 0.0025 * (x[5] - x[4] * y[1] + x[7]) <= 1) @constraint(m, 0.01(x[8] - x[5] * y[3]) <= 1) @NLconstraint( m, 100 * x[1] - x[1] * x[6] * y[1] + 833.33252 * x[4] * y[1] <= 83333.333 ) @NLconstraint(m, x[2] * x[4] * y[4] - x[2] * x[7] - 1250 * x[4] + 1250 * x[5] <= 0) @NLconstraint( m, x[3] * x[5] * y[2] * y[5] - x[3] * x[8] * y[5] - 2500 * x[5] * y[1] * y[4] + 1250000 <= 0 ) @NLconstraint(m, y[1] * y[2] * y[3] <= 0) @NLconstraint(m, y[2] * y[3] >= y[4] * y[5]) @NLconstraint(m, y[1] * y[5] <= y[2] * y[4]) @objective(m, Min, x[1] + x[2] + x[3]) return m end function circlebin(; verbose = false, solver = nothing) m = JuMP.Model(solver) @variable(m, 0 <= x[1:5] <= 1, Bin) @NLconstraint(m, x[1]^2 + x[2]^2 >= 2) @objective(m, Min, x[1] + x[2]) return m end function bpml(; verbose = false, solver = nothing) m = JuMP.Model(solver) @variable(m, 0 <= x[1:5] <= 1, Bin) @variable(m, y[1:5] >= 0) @NLconstraint(m, x[1] * y[1] >= 10) @NLconstraint(m, x[1] * x[2] * y[1] >= 10) @NLconstraint(m, x[1] * x[2] * x[3] * y[1] >= 10) @NLconstraint(m, x[1] * y[1] * y[2] >= 10) @NLconstraint(m, x[1] * y[1] * y[2] * y[3] >= 10) @NLconstraint(m, x[1] * x[2] * x[3] * y[1] * y[2] * y[3] >= 10) @NLconstraint(m, x[1] * x[2] * x[3] * x[4] * x[5] >= 1) @NLconstraint(m, y[1] * y[2] * y[4] * y[5] * y[1] >= 99) @objective(m, Min, x[1] + x[2] + x[3]) return m end function bmpl_linearlifting(; solver = nothing) m = JuMP.Model(solver) @variable(m, 0 <= x[1:5] <= 1, Bin) @variable(m, y[1:5] >= 0) @NLconstraint(m, 15 * x[1] * (2 * y[1] + y[2]) >= 10) @NLconstraint(m, 15 * (x[1] + x[2] * y[1]) * (y[1] + y[2] * x[1] * x[2]) + 10 >= 10) @NLconstraint(m, 15 * x[2] * (y[1] + y[2] * x[3] * y[5] * x[4]) + 50 >= 10) @NLobjective(m, Min, x[1] * (y[1] * y[2] * y[3] + x[2] * x[3])) return m end function bpml_lnl(; solver = nothing) m = JuMP.Model(solver) Random.seed!(10) @variable(m, 0 <= X[1:5] <= 1, Bin) @variable(m, 0.1 <= Y[1:5] <= 0.1 + 10 * rand()) @constraint(m, sum(X) >= 3) @NLobjective(m, Min, sum(X[i] * Y[i] for i in 1:5)) return m end function bpml_binl(; solver = nothing) m = JuMP.Model(solver) Random.seed!(10) @variable(m, 0 <= X[1:5] <= 1, Bin) @variable(m, 50 <= Y[1:5] <= 50 + 100 * rand() * rand()) @constraint(m, sum(X) >= 3) @NLobjective(m, Max, sum(X[i] * Y[i] * Y[i+1] for i in 1:4) - X[5] * Y[5] * Y[1]) return m end function bpml_monl(; solver = nothing) m = JuMP.Model(solver) Random.seed!(10) @variable(m, 0 <= X[1:5] <= 1, Bin) @variable(m, 50 <= Y[1:5] <= 50 + 100 * rand() * rand()) @constraint(m, sum(X) >= 3) @NLobjective(m, Max, sum(X[i] * Y[i] * Y[i] for i in 1:5)) return m end function bpml_negative(; solver = nothing) m = JuMP.Model(solver) Random.seed!(10) @variable(m, 0 <= X[1:5] <= 1, Bin) @variable(m, 50 <= Y[1:5] <= 50 + 100 * rand() * rand()) JuMP.set_lower_bound(Y[1], -10) JuMP.set_upper_bound(Y[1], -1) JuMP.set_lower_bound(Y[2], -40) JuMP.set_lower_bound(Y[3], -30) JuMP.set_lower_bound(Y[4], -50) @constraint(m, sum(X) >= 3) @NLobjective(m, Max, sum(X[i] * Y[i] * Y[i+1] for i in 1:4) - X[5] * Y[5] * Y[1]) return m end function intprod_basic(; solver = nothing) m = JuMP.Model(solver) @variable(m, 1 <= Z[1:10] <= 10, Int) @NLconstraint(m, (Z[1] + Z[2]) * (Z[3] + Z[4]) >= 25) @NLconstraint(m, Z[1] * (Z[2] + Z[3]) * Z[4] >= 25) @NLconstraint(m, Z[1] - Z[2] * Z[3] * Z[4] + 15 >= 25) @NLconstraint(m, Z[5] * (Z[2] - Z[3]) * Z[5]^2 >= 40) @NLobjective(m, Min, sum(Z[i] for i in 1:5) * Z[2]) return m end function discretemulti_basic(; solver = nothing) m = JuMP.Model(solver) Random.seed!(10) @variable(m, 0 <= X[1:5] <= 1, Bin) @variable(m, 0.1 <= Y[1:5] <= 0.1 + 10 * rand()) @variable(m, 1 <= Z[1:5] <= 10, Int) @constraint(m, sum(X) >= 3) @constraint(m, sum(Z) >= 10) @NLobjective(m, Min, sum(X[i] * Y[i] for i in 1:5)) @NLconstraint(m, sum(X[i] * Z[i] for i in 1:5) >= 8) @NLconstraint(m, [i in 1:5], Y[i] * Z[i] >= 17.1) @NLconstraint(m, [i in 1:4], Y[i] * Z[i] * Z[i+1] >= 18.6) @NLconstraint(m, [i in 1:5], X[i] * Y[i] * Z[i] <= 28.1) @NLconstraint(m, [i in 1:4], X[i] * X[i+1] * Y[i] * Y[i+1] * Z[i] * Z[i+1] <= 33.2) return m end ================================================ FILE: examples/MINLPs/div.jl ================================================ function div(; verbose = false, solver = nothing) m = JuMP.Model(solver) @variable(m, 1 <= x[1:2] <= 10) @NLobjective(m, Min, 6 * x[1]^2 + 4 * x[2]^2 - 2.5 / 5 * x[1] * x[2]) @constraint(m, x[1] * (-1 * 3 / 5 * 5) >= 0) @constraint(m, x[2] * 5 / 20 >= 0) @constraint(m, x[2] * (5 * 15 / 15) >= 0) @constraint(m, x[2] * (120 * 2 / -2) >= 0) @constraint(m, 1 * 2 * 3 * 4 * 5 * 6 * x[2] / 0.01 >= 0) @constraint(m, x[1] * 1 * 2 * 3 * 4 * 5 * 6 / 0.01 >= 0) @NLconstraint(m, (3 / 5) * x[1] * (60 / 60) * x[2] >= 8) @NLconstraint( m, (1 * 2 * 3 * 4 / 5 / 6 * 7) * x[2] - x[1] * 1 * 2 * 3 * 4 * 5 * 6 * x[2] / 0.01 >= 0 ) @NLconstraint( m, (1 * 2 * 3 * 4 / 5 / 6 * 7) * x[2] - 0.5(x[1] * 1 * 2 * 3 * 4 * 5 * 6 * x[2] / 0.01) >= 0 ) @NLconstraint( m, (1 * 2 * 3 * 4 / 5 / 6 * 7) * x[2] - 0.5(x[1] * 2 * 3 * x[2] / 0.01 + 5 * 7 / 10 * x[2]) >= 0 ) @NLconstraint(m, (1 * 2 * 3 * 4 / 5 / 6 * 7) * x[2] - 0.5 * (x[1] - x[2]x[1]) >= 0) return m end ================================================ FILE: examples/MINLPs/exprstest.jl ================================================ function exprstest(; solver = nothing) m = JuMP.Model(solver) @variable(m, px[i = 1:6] >= 1) # At some point if an initial value is given, keep them @NLconstraint(m, sum(3 * px[i]^2 for i in 1:4) >= 111) @NLconstraint(m, -px[1] * px[2] + 4 * 5 * px[3] * px[4] >= 222) @NLconstraint(m, -px[1] * px[2] <= 115) @NLconstraint(m, -px[1] * -px[2] >= 115) @NLconstraint(m, px[1] * -px[2] <= 115) @constraint(m, -px[1] + (-5) - 4 <= 100) @NLconstraint(m, px[1] + px[2] * px[3] >= 555) # => px[1] + x23 >= 555 && x23 == px[2]*px[3] @NLconstraint(m, px[1]^2 - 7 * px[2]^2 + px[3]^2 + px[4] <= 6666) @NLconstraint(m, 13 * px[1] - px[2] + 5 * px[3] * 6 + px[4] >= 77) @NLobjective( m, Min, 7 * px[1] * 6 * px[4] * 2 + 5 + 17 + px[1] + px[2] + px[3] + 8 + 3 * 5 * px[1]^2 * 4 ) return m end function operator_b(; solver = nothing) m = JuMP.Model(solver) @variable(m, x[1:4] >= 0) @variable(m, y[1:3] <= 0) # PARSING TARGETS # @constraint(m, x[1] + x[2] + -y[1] >= 1)# None @constraint(m, 5x[1] + 8x[2] + 9y[2] <= 2)# None @constraint(m, 4 * x[1] + 5 * x[2] + -3 * y[1] >= 3)# None # @constraint(m, 3 <= x[1] + x[2] <= 4) # None @NLconstraint(m, x[1] * x[2] + 3 * x[2] * x[3] >= 5)# x[1]*x[2] and 3*x[2]*x[3] @NLconstraint(m, x[1] * (x[2] + 4) + 10 * 44 * x[2] * 5 * x[3] <= 6)# x[2]*x[3] @NLconstraint(m, x[1] * 4 + x[2] * (x[2] + x[3]) >= 7)# None @NLconstraint(m, 3 * x[1] * x[2] + x[2] - x[3] <= 8)# x[1]*x[2] @NLconstraint(m, -1 * x[1]^2 - x[2]^2 >= 9)# x[1]^2 and x[2]^2 @NLconstraint(m, x[1]^(1 + 1) + 5 * x[2]^2 + 3 * x[3]^3 <= 10)# x[1]^2 and x[2]^2 @NLconstraint(m, (x[1] + 5)^2 >= 11)# None @NLconstraint(m, x[1]^3 + x[3]^99 >= 12)# None @NLconstraint(m, x[1] * x[2] * x[3] <= 13)# x[1]*x[2]*x[3] @NLconstraint(m, (x[1] * x[2]) * x[3] >= 14)# x[1]*x[2] ****** @NLconstraint(m, x[1] * (x[2] * x[3]) <= 15)# x[2]*x[3] ****** @NLconstraint(m, x[1] * x[2] * x[3] * x[4] >= 16)# x[1]*x[2]*x[3]*x[4] @NLconstraint(m, (x[1] * x[2]) * (x[3] * x[4]) <= 17)# x[1]*x[2] and x[3]*x[4] @NLconstraint(m, x[1] * (x[2] * x[3]) * x[4] >= 18)# x[2]*x[3] ****** @NLconstraint(m, (x[1] * x[2]) * x[3] * x[4] <= 19)# x[1]*x[2] ****** @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4] >= 20)# x[1]*x[2] ****** @NLconstraint(m, (x[1] * (x[2] * x[3]) * x[4]) <= 21)# x[2]*x[3] ****** @NLconstraint(m, 4 * 5 * 6 * x[1] * x[2] * x[3] * x[4] >= 22)# x[1]*x[2]*x[3]*x[4] @NLconstraint(m, x[1]^2 * x[2]^2 * x[3]^2 * x[4] <= 23)# None @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] @NLconstraint(m, (x[1] + 1) * (x[2] + 2) * (x[3] + 3) * (x[4] + 4) <= 25)# None @NLconstraint(m, 50sin(x[1]) - 32 * cos(x[2]) >= 26)# sin(x[1]), cos(x[2]) @NLconstraint(m, sin(x[1] + x[2]) - cos(x[2] - x[3]) + sin(-x[2] + x[3]) <= 27) @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] ****** @NLconstraint(m, sin(x[1] * x[2] * x[3]) <= 29)# x[1]*x[2]*x[3] return m end function operator_basic(; solver = nothing) m = JuMP.Model(solver) @variable(m, x[1:4] >= 0) @NLconstraint(m, x[1]^2 >= 1) @NLconstraint(m, x[1] * x[2] <= 1) @NLconstraint(m, x[1]^2 + x[2] * x[3] <= 1) @NLconstraint(m, x[1] * (x[2] * x[3]) >= 1) @NLconstraint(m, x[1]^2 * (x[2]^2 * x[3]^2) <= 1) @NLconstraint(m, (x[1] * x[2]) * x[3] >= 1) @NLconstraint(m, (x[1]^2 * x[2]^2) * x[3]^2 <= 1) @NLconstraint(m, x[1] * (x[2]^2 * x[3]^2) >= 1) @NLconstraint(m, (x[1]^2 * x[2]) * x[3]^2 <= 1) @NLconstraint(m, x[1]^2 * (x[2] * x[3]) >= 1) @NLconstraint(m, (x[1] * x[2]^2) * x[3] <= 1) @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4] >= 1) @NLconstraint(m, ((x[1]^2 * x[2]) * x[3]) * x[4] <= 1) @NLconstraint(m, ((x[1] * x[2]^2) * x[3]) * x[4] >= 1) @NLconstraint(m, ((x[1] * x[2]) * x[3]^2) * x[4] <= 1) @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4]^2 >= 1) @NLconstraint(m, ((x[1]^2 * x[2]^2) * x[3]^2) * x[4]^2 <= 1) @NLconstraint(m, x[1] * (x[2] * (x[3] * x[4])) >= 1) @NLconstraint(m, x[1]^2 * (x[2] * (x[3] * x[4])) <= 1) @NLconstraint(m, x[1] * (x[2]^2 * (x[3] * x[4])) >= 1) @NLconstraint(m, x[1] * (x[2] * (x[3]^2 * x[4])) <= 1) @NLconstraint(m, x[1] * (x[2] * (x[3] * x[4]^2)) >= 1) @NLconstraint(m, x[1]^2 * (x[2]^2 * (x[3]^2 * x[4]^2)) <= 1) @NLconstraint(m, x[1] * x[2] * x[3] >= 1) @NLconstraint(m, x[1]^2 * x[2] * x[3] >= 1) @NLconstraint(m, x[1] * x[2]^2 * x[3] >= 1) @NLconstraint(m, x[1] * x[2] * x[3]^2 >= 1) @NLconstraint(m, x[1]^2 * x[2]^2 * x[3] >= 1) @NLconstraint(m, x[1] * x[2]^2 * x[3]^2 >= 1) @NLconstraint(m, x[1]^2 * x[2] * x[3]^2 >= 1) @NLconstraint(m, x[1]^2 * x[2]^2 * x[3]^2 >= 1) @NLconstraint(m, (x[1] * x[2]) * (x[3] * x[4]) >= 1) @NLconstraint(m, (x[1]^2 * x[2]) * (x[3] * x[4]) >= 1) @NLconstraint(m, (x[1] * x[2]^2) * (x[3] * x[4]) >= 1) @NLconstraint(m, (x[1] * x[2]) * (x[3]^2 * x[4]) >= 1) @NLconstraint(m, (x[1] * x[2]) * (x[3]^2 * x[4]^2) >= 1) @NLconstraint(m, (x[1]^2 * x[2]) * (x[3] * x[4]^2) >= 1) @NLconstraint(m, (x[1]^2 * x[2]) * (x[3]^2 * x[4]) >= 1) @NLconstraint(m, x[1] * x[2] * x[3] * x[4] >= 1) @NLconstraint(m, x[1]^2 * x[2] * x[3] * x[4] >= 1) @NLconstraint(m, x[1] * x[2]^2 * x[3] * x[4] >= 1) @NLconstraint(m, x[1] * x[2] * x[3]^2 * x[4]^2 >= 1) @NLconstraint(m, x[1] * x[2]^2 * x[3]^2 * x[4] >= 1) @NLconstraint(m, x[1]^2 * x[2] * x[3] * x[4]^2 >= 1) @NLconstraint(m, x[1]^2 * x[2]^2 * x[3]^2 * x[4]^2 >= 1) @NLconstraint(m, (x[1] * x[2] * x[3]) * x[4] >= 1) @NLconstraint(m, (x[1]^2 * x[2] * x[3]) * x[4] >= 1) @NLconstraint(m, (x[1] * x[2]^2 * x[3]) * x[4] >= 1) @NLconstraint(m, (x[1] * x[2] * x[3]^2) * x[4] >= 1) @NLconstraint(m, (x[1] * x[2] * x[3]) * x[4]^2 >= 1) @NLconstraint(m, (x[1]^2 * x[2]^2 * x[3]^2) * x[4]^2 >= 1) @NLconstraint(m, x[1] * (x[2] * x[3]) * x[4] >= 1) @NLconstraint(m, x[1]^2 * (x[2] * x[3]) * x[4] >= 1) @NLconstraint(m, x[1] * (x[2]^2 * x[3]) * x[4] >= 1) @NLconstraint(m, x[1] * (x[2] * x[3]^2) * x[4] >= 1) @NLconstraint(m, x[1] * (x[2] * x[3]) * x[4]^2 >= 1) @NLconstraint(m, x[1]^2 * (x[2] * x[3]) * x[4]^2 >= 1) @NLconstraint(m, x[1] * (x[2]^2 * x[3]^2) * x[4] >= 1) @NLconstraint(m, x[1]^2 * (x[2]^2 * x[3]) * x[4] >= 1) @NLconstraint(m, x[1] * (x[2] * x[3]^2) * x[4]^2 >= 1) @NLconstraint(m, x[1] * (x[2] * x[3] * x[4]) >= 1) @NLconstraint(m, x[1]^2 * (x[2] * x[3] * x[4]) >= 1) @NLconstraint(m, x[1] * (x[2]^2 * x[3] * x[4]) >= 1) @NLconstraint(m, x[1] * (x[2] * x[3]^2 * x[4]) >= 1) @NLconstraint(m, x[1] * (x[2] * x[3] * x[4]^2) >= 1) @NLconstraint(m, x[1]^2 * (x[2] * x[3]^2 * x[4]) >= 1) @NLconstraint(m, x[1]^2 * (x[2]^2 * x[3]^2 * x[4]^2) >= 1) @NLconstraint(m, x[1] * x[2] * (x[3] * x[4]) >= 1) @NLconstraint(m, x[1]^2 * x[2] * (x[3] * x[4]) >= 1) @NLconstraint(m, x[1] * x[2]^2 * (x[3] * x[4]) >= 1) @NLconstraint(m, x[1] * x[2] * (x[3]^2 * x[4]) >= 1) @NLconstraint(m, x[1] * x[2] * (x[3] * x[4]^2) >= 1) @NLconstraint(m, x[1]^2 * x[2]^2 * (x[3]^2 * x[4]^2) >= 1) @NLconstraint(m, (x[1] * x[2]) * x[3] * x[4] >= 1) @NLconstraint(m, (x[1]^2 * x[2]) * x[3] * x[4] >= 1) @NLconstraint(m, (x[1] * x[2]^2) * x[3] * x[4] >= 1) @NLconstraint(m, (x[1] * x[2]) * x[3]^2 * x[4] >= 1) @NLconstraint(m, (x[1] * x[2]) * x[3] * x[4]^2 >= 1) @NLconstraint(m, (x[1] * x[2]) * x[3]^2 * x[4]^2 >= 1) @NLconstraint(m, (x[1]^2 * x[2]^2) * x[3]^2 * x[4]^2 >= 1) return m end function operator_c(; solver = nothing) m = JuMP.Model(solver) @variable(m, px[i = 1:6] >= 1) # At some point if an initial value is given, keep them @NLconstraint(m, sum(3 * px[i]^2 for i in 1:4) >= 111) @NLconstraint(m, -1 * px[1] * px[2] + 4 * 5 * px[3] * px[4] >= 222) @NLconstraint(m, px[1] + px[2] * px[3] >= 555) # => px[1] + x23 >= 555 && x23 == px[2]*px[3] @NLconstraint(m, px[1]^2 - 7 * px[2]^2 + px[3]^2 + px[4] <= 6666) @NLconstraint(m, 13 * px[1] - px[2] + 5 * px[3] * 6 + px[4] >= 77) @NLobjective( m, Min, 7 * px[1] * 6 * px[4] * 2 + 5 + 17 + px[1] + px[2] + px[3] + 8 + 3 * 5 * px[1]^2 * 4 ) return m end ================================================ FILE: examples/MINLPs/linearlift.jl ================================================ function basic_linear_lift(; verbose = false, solver = nothing) m = JuMP.Model(solver) @variable(m, x[i = 1:3] >= 1) # At some point if an initial value is given, keep them @constraint(m, (x[1] - x[2]) * (3 * x[2] - x[3]) >= 111) @NLconstraint(m, (x[1] - x[2]) * (3 * x[2] - x[3]) >= 111) @NLconstraint(m, (x[1] - x[2])^2 >= 100) @NLconstraint(m, (x[1] - x[2]) * (3 * x[2] - x[3]) * (x[1] + x[3]) >= 111) @NLconstraint(m, (3 + x[1] + x[2] + x[3]) * (x[1] + x[2])^2 >= 111) # Next level goal # @NLconstraint(m, (9-x[1]-x[2]-x[3])^2 >= 111) @objective(m, Min, x[1] + x[2] + x[3]) return m end ================================================ FILE: examples/MINLPs/mult3.jl ================================================ function linking_constraints_testing(; solver = nothing) m = JuMP.Model(solver) x_Idx = Any[1, 2, 3, 4] @variable(m, 0 <= x[x_Idx] <= 1) @variable(m, obj) @objective(m, Min, obj) @NLconstraint( m, e1, -( 0.4931 * x[1] * x[2] + 0.6864 * x[1] * x[3] - 0.0577 * x[1] * x[4] + 0.3468 * x[1] * x[2] * x[3] - 0.6988 * x[1] * x[3] * x[4] - 0.9648 * x[1] * x[2] * x[4] ) + obj == 0.0 ) return m end function m_10_3_0_100_1(; solver = nothing) m = JuMP.Model(solver) x_Idx = Any[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @variable(m, 0 <= x[x_Idx] <= 1) @variable(m, obj) @objective(m, Min, obj) @NLconstraint( m, e1, -( 0.4931 * x[1] * x[2] + 0.6864 * x[1] * x[3] + 0.0577 * x[1] * x[4] + 0.331 * x[1] * x[5] + 0.4615 * x[1] * x[6] - 0.1788 * x[1] * x[7] - 0.2886 * x[1] * x[8] + 0.4708 * x[1] * x[9] - 0.0574 * x[1] * x[10] - 0.0747 * x[2] * x[3] + 0.5194 * x[2] * x[4] + 0.4049 * x[2] * x[5] - 0.4841 * x[2] * x[6] + 0.8754 * x[2] * x[7] - 0.0878 * x[2] * x[8] + 0.617 * x[2] * x[9] + 0.8177 * x[2] * x[10] + 0.3898 * x[3] * x[4] - 0.561 * x[3] * x[5] + 0.7099 * x[3] * x[6] + 0.4888 * x[3] * x[7] - 0.3978 * x[3] * x[8] + 0.3439 * x[3] * x[9] + 0.2374 * x[3] * x[10] + 0.9351 * x[4] * x[5] + 0.9805 * x[4] * x[6] - 0.324 * x[4] * x[7] + 0.8415 * x[4] * x[8] - 0.3219 * x[4] * x[9] + 0.8619 * x[4] * x[10] + 0.0931 * x[5] * x[6] - 0.069 * x[5] * x[7] - 0.6462 * x[5] * x[8] - 0.244 * x[5] * x[9] - 0.6496 * x[5] * x[10] - 0.2863 * x[6] * x[7] + 0.3314 * x[6] * x[8] + 0.2371 * x[6] * x[9] - 0.0621 * x[6] * x[10] - 0.3675 * x[7] * x[8] - 0.4622 * x[7] * x[9] - 0.6002 * x[7] * x[10] - 0.1691 * x[8] * x[9] + 0.9586 * x[8] * x[10] + 0.0864 * x[9] * x[10] - 0.741 * x[1] + 0.6095 * x[2] + 0.6916 * x[3] + 0.4181 * x[4] + 0.0579 * x[5] + 0.3277 * x[6] + 0.8015 * x[7] + 0.8823 * x[8] - 0.7712 * x[9] + 0.7333 * x[10] + 0.9951 * x[1] * x[2] * x[3] + 0.1336 * x[1] * x[2] * x[4] + 0.9318 * x[1] * x[2] * x[5] + 0.4959 * x[1] * x[2] * x[6] - 0.2652 * x[1] * x[2] * x[7] - 0.0387 * x[1] * x[2] * x[8] - 0.8525 * x[1] * x[2] * x[9] - 0.9893 * x[1] * x[2] * x[10] - 0.3058 * x[1] * x[3] * x[4] - 0.3155 * x[1] * x[3] * x[5] - 0.5641 * x[1] * x[3] * x[6] - 0.7337 * x[1] * x[3] * x[7] + 0.801 * x[1] * x[3] * x[8] - 0.2265 * x[1] * x[3] * x[9] - 0.109 * x[1] * x[3] * x[10] + 0.3239 * x[1] * x[4] * x[5] - 0.9678 * x[1] * x[4] * x[6] + 0.3017 * x[1] * x[4] * x[7] + 0.2928 * x[1] * x[4] * x[8] - 0.354 * x[1] * x[4] * x[9] + 0.7114 * x[1] * x[4] * x[10] - 0.1974 * x[1] * x[5] * x[6] - 0.5863 * x[1] * x[5] * x[7] + 0.9371 * x[1] * x[5] * x[8] + 0.1968 * x[1] * x[5] * x[9] + 0.346 * x[1] * x[5] * x[10] - 0.0862 * x[1] * x[6] * x[7] - 0.34 * x[1] * x[6] * x[8] - 0.7992 * x[1] * x[6] * x[9] + 0.5109 * x[1] * x[6] * x[10] + 0.2114 * x[1] * x[7] * x[8] + 0.4381 * x[1] * x[7] * x[9] + 0.7947 * x[1] * x[7] * x[10] + 0.3165 * x[1] * x[8] * x[9] - 0.6986 * x[1] * x[8] * x[10] + 0.2246 * x[1] * x[9] * x[10] + 0.9573 * x[2] * x[3] * x[4] + 0.9983 * x[2] * x[3] * x[5] - 0.4864 * x[2] * x[3] * x[6] + 0.1017 * x[2] * x[3] * x[7] + 0.3181 * x[2] * x[3] * x[8] + 0.108 * x[2] * x[3] * x[9] + 0.9555 * x[2] * x[3] * x[10] + 0.8038 * x[2] * x[4] * x[5] + 0.3158 * x[2] * x[4] * x[6] + 0.4577 * x[2] * x[4] * x[7] - 0.1951 * x[2] * x[4] * x[8] + 0.8573 * x[2] * x[4] * x[9] - 0.7043 * x[2] * x[4] * x[10] + 0.3491 * x[2] * x[5] * x[6] + 0.5392 * x[2] * x[5] * x[7] - 0.3214 * x[2] * x[5] * x[8] - 0.7684 * x[2] * x[5] * x[9] + 0.2287 * x[2] * x[5] * x[10] + 0.6412 * x[2] * x[6] * x[7] + 0.8942 * x[2] * x[6] * x[8] + 0.4623 * x[2] * x[6] * x[9] - 0.0048 * x[2] * x[6] * x[10] - 0.2504 * x[2] * x[7] * x[8] - 0.157 * x[2] * x[7] * x[9] + 0.1058 * x[2] * x[7] * x[10] + 0.9958 * x[2] * x[8] * x[9] + 0.9808 * x[2] * x[8] * x[10] + 0.4926 * x[2] * x[9] * x[10] + 0.9075 * x[3] * x[4] * x[5] - 0.8135 * x[3] * x[4] * x[6] + 0.468 * x[3] * x[4] * x[7] + 0.5035 * x[3] * x[4] * x[8] + 0.8937 * x[3] * x[4] * x[9] + 0.4124 * x[3] * x[4] * x[10] + 0.6276 * x[3] * x[5] * x[6] + 0.1172 * x[3] * x[5] * x[7] - 0.8766 * x[3] * x[5] * x[8] - 0.0392 * x[3] * x[5] * x[9] + 0.1954 * x[3] * x[5] * x[10] - 0.7249 * x[3] * x[6] * x[7] + 0.1748 * x[3] * x[6] * x[8] + 0.0399 * x[3] * x[6] * x[9] + 0.7718 * x[3] * x[6] * x[10] - 0.3924 * x[3] * x[7] * x[8] + 0.3393 * x[3] * x[7] * x[9] + 0.3299 * x[3] * x[7] * x[10] + 0.0074 * x[3] * x[8] * x[9] - 0.4768 * x[3] * x[8] * x[10] - 0.8469 * x[3] * x[9] * x[10] - 0.7975 * x[4] * x[5] * x[6] + 0.0985 * x[4] * x[5] * x[7] - 0.2488 * x[4] * x[5] * x[8] - 0.9697 * x[4] * x[5] * x[9] + 0.5858 * x[4] * x[5] * x[10] + 0.2418 * x[4] * x[6] * x[7] + 0.5472 * x[4] * x[6] * x[8] + 0.9072 * x[4] * x[6] * x[9] - 0.7715 * x[4] * x[6] * x[10] - 0.3631 * x[4] * x[7] * x[8] + 0.1936 * x[4] * x[7] * x[9] - 0.9037 * x[4] * x[7] * x[10] - 0.7716 * x[4] * x[8] * x[9] - 0.5681 * x[4] * x[8] * x[10] - 0.7989 * x[4] * x[9] * x[10] - 0.8533 * x[5] * x[6] * x[7] - 0.5063 * x[5] * x[6] * x[8] - 0.1132 * x[5] * x[6] * x[9] - 0.5833 * x[5] * x[6] * x[10] + 0.134 * x[5] * x[7] * x[8] - 0.9514 * x[5] * x[7] * x[9] - 0.1594 * x[5] * x[7] * x[10] - 0.2043 * x[5] * x[8] * x[9] + 0.9532 * x[5] * x[8] * x[10] + 0.3852 * x[5] * x[9] * x[10] - 0.9901 * x[6] * x[7] * x[8] - 0.7402 * x[6] * x[7] * x[9] - 0.9064 * x[6] * x[7] * x[10] + 0.6796 * x[6] * x[8] * x[9] + 0.357 * x[6] * x[8] * x[10] + 0.1639 * x[6] * x[9] * x[10] + 0.4671 * x[7] * x[8] * x[9] - 0.7679 * x[7] * x[8] * x[10] + 0.6806 * x[7] * x[9] * x[10] + 0.67 * x[8] * x[9] * x[10] ) + obj == 0.0 ) return m end function m_10_3_0_100_2(; solver = nothing) m = JuMP.Model(solver) x_Idx = Any[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @variable(m, 0 <= x[x_Idx] <= 1) @variable(m, obj) @objective(m, Min, obj) @NLconstraint( m, e1, -( 0.9844 * x[1] * x[2] - 0.5504 * x[1] * x[3] + 0.8946 * x[1] * x[4] + 0.6956 * x[1] * x[5] + 0.4003 * x[1] * x[6] + 0.1089 * x[1] * x[7] - 0.1168 * x[1] * x[8] - 0.5016 * x[1] * x[9] + 0.7953 * x[1] * x[10] - 0.7085 * x[2] * x[3] - 0.1308 * x[2] * x[4] - 0.0852 * x[2] * x[5] - 0.3812 * x[2] * x[6] - 0.0382 * x[2] * x[7] + 0.3795 * x[2] * x[8] + 0.6216 * x[2] * x[9] - 0.2157 * x[2] * x[10] - 0.4137 * x[3] * x[4] + 0.152 * x[3] * x[5] + 0.4507 * x[3] * x[6] - 0.7145 * x[3] * x[7] - 0.3329 * x[3] * x[8] - 0.6792 * x[3] * x[9] + 0.0692 * x[3] * x[10] + 0.4467 * x[4] * x[5] - 0.5436 * x[4] * x[6] - 0.602 * x[4] * x[7] + 0.9452 * x[4] * x[8] + 0.9871 * x[4] * x[9] - 0.8361 * x[4] * x[10] - 0.4982 * x[5] * x[6] - 0.5683 * x[5] * x[7] - 0.6084 * x[5] * x[8] + 0.7005 * x[5] * x[9] - 0.9106 * x[5] * x[10] + 0.7278 * x[6] * x[7] - 0.8657 * x[6] * x[8] - 0.1454 * x[6] * x[9] - 0.7254 * x[6] * x[10] - 0.7618 * x[7] * x[8] - 0.3881 * x[7] * x[9] + 0.2265 * x[7] * x[10] + 0.3273 * x[8] * x[9] + 0.7918 * x[8] * x[10] + 0.5074 * x[9] * x[10] + 0.2597 * x[1] - 0.558 * x[2] - 0.0323 * x[3] + 0.23 * x[4] + 0.9753 * x[5] + 0.1184 * x[6] - 0.2582 * x[7] - 0.3248 * x[8] + 0.4909 * x[9] + 0.1395 * x[10] + 0.2647 * x[1] * x[2] * x[3] - 0.5144 * x[1] * x[2] * x[4] - 0.6792 * x[1] * x[2] * x[5] - 0.9575 * x[1] * x[2] * x[6] - 0.6195 * x[1] * x[2] * x[7] - 0.3753 * x[1] * x[2] * x[8] + 0.6193 * x[1] * x[2] * x[9] + 0.1474 * x[1] * x[2] * x[10] + 0.6525 * x[1] * x[3] * x[4] - 0.4271 * x[1] * x[3] * x[5] - 0.679 * x[1] * x[3] * x[6] - 0.3382 * x[1] * x[3] * x[7] - 0.4683 * x[1] * x[3] * x[8] + 0.0896 * x[1] * x[3] * x[9] + 0.107 * x[1] * x[3] * x[10] - 0.9568 * x[1] * x[4] * x[5] - 0.7025 * x[1] * x[4] * x[6] - 0.7902 * x[1] * x[4] * x[7] + 0.2284 * x[1] * x[4] * x[8] - 0.1874 * x[1] * x[4] * x[9] + 0.8031 * x[1] * x[4] * x[10] + 0.8857 * x[1] * x[5] * x[6] - 0.6868 * x[1] * x[5] * x[7] + 0.8739 * x[1] * x[5] * x[8] - 0.7291 * x[1] * x[5] * x[9] - 0.2574 * x[1] * x[5] * x[10] - 0.357 * x[1] * x[6] * x[7] + 0.4299 * x[1] * x[6] * x[8] + 0.4594 * x[1] * x[6] * x[9] - 0.2428 * x[1] * x[6] * x[10] + 0.6579 * x[1] * x[7] * x[8] + 0.9073 * x[1] * x[7] * x[9] - 0.3832 * x[1] * x[7] * x[10] + 0.1595 * x[1] * x[8] * x[9] - 0.5331 * x[1] * x[8] * x[10] + 0.6888 * x[1] * x[9] * x[10] - 0.4837 * x[2] * x[3] * x[4] + 0.6795 * x[2] * x[3] * x[5] + 0.0753 * x[2] * x[3] * x[6] + 0.2431 * x[2] * x[3] * x[7] - 0.0184 * x[2] * x[3] * x[8] - 0.4303 * x[2] * x[3] * x[9] - 0.5289 * x[2] * x[3] * x[10] + 0.3028 * x[2] * x[4] * x[5] + 0.2143 * x[2] * x[4] * x[6] - 0.2037 * x[2] * x[4] * x[7] + 0.6976 * x[2] * x[4] * x[8] + 0.2752 * x[2] * x[4] * x[9] - 0.4824 * x[2] * x[4] * x[10] - 0.2823 * x[2] * x[5] * x[6] + 0.1237 * x[2] * x[5] * x[7] - 0.7571 * x[2] * x[5] * x[8] + 0.9569 * x[2] * x[5] * x[9] - 0.2336 * x[2] * x[5] * x[10] + 0.4414 * x[2] * x[6] * x[7] - 0.2835 * x[2] * x[6] * x[8] + 0.8198 * x[2] * x[6] * x[9] + 0.0874 * x[2] * x[6] * x[10] + 0.9194 * x[2] * x[7] * x[8] + 0.8589 * x[2] * x[7] * x[9] + 0.2666 * x[2] * x[7] * x[10] - 0.4088 * x[2] * x[8] * x[9] - 0.6505 * x[2] * x[8] * x[10] + 0.6852 * x[2] * x[9] * x[10] + 0.2372 * x[3] * x[4] * x[5] + 0.4118 * x[3] * x[4] * x[6] - 0.5151 * x[3] * x[4] * x[7] + 0.5959 * x[3] * x[4] * x[8] - 0.218 * x[3] * x[4] * x[9] - 0.7801 * x[3] * x[4] * x[10] + 0.5074 * x[3] * x[5] * x[6] - 0.9404 * x[3] * x[5] * x[7] + 0.4013 * x[3] * x[5] * x[8] + 0.0504 * x[3] * x[5] * x[9] + 0.5051 * x[3] * x[5] * x[10] + 0.2954 * x[3] * x[6] * x[7] + 0.7422 * x[3] * x[6] * x[8] + 0.6614 * x[3] * x[6] * x[9] + 0.9144 * x[3] * x[6] * x[10] - 0.5555 * x[3] * x[7] * x[8] + 0.159 * x[3] * x[7] * x[9] + 0.9815 * x[3] * x[7] * x[10] + 0.6799 * x[3] * x[8] * x[9] - 0.6504 * x[3] * x[8] * x[10] + 0.4191 * x[3] * x[9] * x[10] - 0.3969 * x[4] * x[5] * x[6] - 0.9499 * x[4] * x[5] * x[7] + 0.8335 * x[4] * x[5] * x[8] + 0.3776 * x[4] * x[5] * x[9] + 0.5135 * x[4] * x[5] * x[10] + 0.8655 * x[4] * x[6] * x[7] - 0.89 * x[4] * x[6] * x[8] - 0.0021 * x[4] * x[6] * x[9] - 0.881 * x[4] * x[6] * x[10] - 0.6563 * x[4] * x[7] * x[8] + 0.3767 * x[4] * x[7] * x[9] - 0.3868 * x[4] * x[7] * x[10] + 0.4704 * x[4] * x[8] * x[9] + 0.5043 * x[4] * x[8] * x[10] - 0.2086 * x[4] * x[9] * x[10] - 0.8244 * x[5] * x[6] * x[7] - 0.9021 * x[5] * x[6] * x[8] + 0.5587 * x[5] * x[6] * x[9] + 0.3616 * x[5] * x[6] * x[10] - 0.3769 * x[5] * x[7] * x[8] + 0.0455 * x[5] * x[7] * x[9] + 0.0116 * x[5] * x[7] * x[10] - 0.1229 * x[5] * x[8] * x[9] + 0.1753 * x[5] * x[8] * x[10] - 0.4053 * x[5] * x[9] * x[10] - 0.4102 * x[6] * x[7] * x[8] - 0.8524 * x[6] * x[7] * x[9] + 0.9499 * x[6] * x[7] * x[10] + 0.4563 * x[6] * x[8] * x[9] + 0.5162 * x[6] * x[8] * x[10] - 0.3816 * x[6] * x[9] * x[10] - 0.507 * x[7] * x[8] * x[9] - 0.4862 * x[7] * x[8] * x[10] + 0.2361 * x[7] * x[9] * x[10] + 0.8756 * x[8] * x[9] * x[10] ) + obj == 0.0 ) return m end ================================================ FILE: examples/MINLPs/mult4.jl ================================================ #= 1. Using the below raw expression interface for dense nonlinear problems significantly reduces JuMP's building time 2. `linking_constraints = true` is necessary to be able to solve this dense quadrilinear instance =# replace_expr(expr::Any, x) = expr function replace_expr(expr::Expr, x) if Base.Meta.isexpr(expr, :ref) return x[expr.args[2]] end for i in 1:length(expr.args) expr.args[i] = replace_expr(expr.args[i], x) end return expr end function m_10_4_10_100_1(; solver = nothing) m = JuMP.Model(solver) # ----- Variables ----- # x_Idx = Any[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @variable(m, 0 <= x[x_Idx] <= 1) # ----- Objective ----- # obj = :(( 0.7278 * x[1] * x[2] - 0.8657 * x[1] * x[3] - 0.1454 * x[1] * x[4] - 0.7254 * x[1] * x[5] - 0.7618 * x[1] * x[6] - 0.3881 * x[1] * x[7] + 0.2265 * x[1] * x[8] + 0.3273 * x[1] * x[9] + 0.7918 * x[1] * x[10] + 0.5074 * x[2] * x[3] + 0.2597 * x[2] * x[4] - 0.558 * x[2] * x[5] - 0.0323 * x[2] * x[6] + 0.23 * x[2] * x[7] + 0.9753 * x[2] * x[8] + 0.1184 * x[2] * x[9] - 0.2582 * x[2] * x[10] - 0.3248 * x[3] * x[4] + 0.4909 * x[3] * x[5] + 0.1395 * x[3] * x[6] - 0.0877 * x[3] * x[7] + 0.2964 * x[3] * x[8] + 0.3672 * x[3] * x[9] - 0.6592 * x[3] * x[10] - 0.4539 * x[4] * x[5] - 0.1185 * x[4] * x[6] - 0.0846 * x[4] * x[7] - 0.2095 * x[4] * x[8] + 0.3767 * x[4] * x[9] - 0.4022 * x[4] * x[10] - 0.5895 * x[5] * x[6] - 0.6154 * x[5] * x[7] - 0.162 * x[5] * x[8] + 0.3813 * x[5] * x[9] - 0.7189 * x[5] * x[10] - 0.7125 * x[6] * x[7] + 0.3249 * x[6] * x[8] + 0.1514 * x[6] * x[9] + 0.5499 * x[6] * x[10] + 0.5506 * x[7] * x[8] + 0.5307 * x[7] * x[9] + 0.753 * x[7] * x[10] - 0.8016 * x[8] * x[9] - 0.331 * x[8] * x[10] + 0.2902 * x[9] * x[10] - 0.7368 * x[1] + 0.6151 * x[2] + 0.0837 * x[3] - 0.4685 * x[4] - 0.0823 * x[5] + 0.0219 * x[6] + 0.0097 * x[7] + 0.9235 * x[8] + 0.1005 * x[9] - 0.6207 * x[10] + 0.6888 * x[1] * x[2] * x[3] - 0.4837 * x[1] * x[2] * x[4] + 0.6795 * x[1] * x[2] * x[5] + 0.0753 * x[1] * x[2] * x[6] + 0.2431 * x[1] * x[2] * x[7] - 0.0184 * x[1] * x[2] * x[8] - 0.4303 * x[1] * x[2] * x[9] - 0.5289 * x[1] * x[2] * x[10] + 0.3028 * x[1] * x[3] * x[4] + 0.2143 * x[1] * x[3] * x[5] - 0.2037 * x[1] * x[3] * x[6] + 0.6976 * x[1] * x[3] * x[7] + 0.2752 * x[1] * x[3] * x[8] - 0.4824 * x[1] * x[3] * x[9] - 0.2823 * x[1] * x[3] * x[10] + 0.1237 * x[1] * x[4] * x[5] - 0.7571 * x[1] * x[4] * x[6] + 0.9569 * x[1] * x[4] * x[7] - 0.2336 * x[1] * x[4] * x[8] + 0.4414 * x[1] * x[4] * x[9] - 0.2835 * x[1] * x[4] * x[10] + 0.8198 * x[1] * x[5] * x[6] + 0.0874 * x[1] * x[5] * x[7] + 0.9194 * x[1] * x[5] * x[8] + 0.8589 * x[1] * x[5] * x[9] + 0.2666 * x[1] * x[5] * x[10] - 0.4088 * x[1] * x[6] * x[7] - 0.6505 * x[1] * x[6] * x[8] + 0.6852 * x[1] * x[6] * x[9] + 0.2372 * x[1] * x[6] * x[10] + 0.4118 * x[1] * x[7] * x[8] - 0.5151 * x[1] * x[7] * x[9] + 0.5959 * x[1] * x[7] * x[10] - 0.218 * x[1] * x[8] * x[9] - 0.7801 * x[1] * x[8] * x[10] + 0.5074 * x[1] * x[9] * x[10] - 0.9404 * x[2] * x[3] * x[4] + 0.4013 * x[2] * x[3] * x[5] + 0.0504 * x[2] * x[3] * x[6] + 0.5051 * x[2] * x[3] * x[7] + 0.2954 * x[2] * x[3] * x[8] + 0.7422 * x[2] * x[3] * x[9] + 0.6614 * x[2] * x[3] * x[10] + 0.9144 * x[2] * x[4] * x[5] - 0.5555 * x[2] * x[4] * x[6] + 0.159 * x[2] * x[4] * x[7] + 0.9815 * x[2] * x[4] * x[8] + 0.6799 * x[2] * x[4] * x[9] - 0.6504 * x[2] * x[4] * x[10] + 0.4191 * x[2] * x[5] * x[6] - 0.3969 * x[2] * x[5] * x[7] - 0.9499 * x[2] * x[5] * x[8] + 0.8335 * x[2] * x[5] * x[9] + 0.3776 * x[2] * x[5] * x[10] + 0.5135 * x[2] * x[6] * x[7] + 0.8655 * x[2] * x[6] * x[8] - 0.89 * x[2] * x[6] * x[9] - 0.0021 * x[2] * x[6] * x[10] - 0.881 * x[2] * x[7] * x[8] - 0.6563 * x[2] * x[7] * x[9] + 0.3767 * x[2] * x[7] * x[10] - 0.3868 * x[2] * x[8] * x[9] + 0.4704 * x[2] * x[8] * x[10] + 0.5043 * x[2] * x[9] * x[10] - 0.2086 * x[3] * x[4] * x[5] - 0.8244 * x[3] * x[4] * x[6] - 0.9021 * x[3] * x[4] * x[7] + 0.5587 * x[3] * x[4] * x[8] + 0.3616 * x[3] * x[4] * x[9] - 0.3769 * x[3] * x[4] * x[10] + 0.0455 * x[3] * x[5] * x[6] + 0.0116 * x[3] * x[5] * x[7] - 0.1229 * x[3] * x[5] * x[8] + 0.1753 * x[3] * x[5] * x[9] - 0.4053 * x[3] * x[5] * x[10] - 0.4102 * x[3] * x[6] * x[7] - 0.8524 * x[3] * x[6] * x[8] + 0.9499 * x[3] * x[6] * x[9] + 0.4563 * x[3] * x[6] * x[10] + 0.5162 * x[3] * x[7] * x[8] - 0.3816 * x[3] * x[7] * x[9] - 0.507 * x[3] * x[7] * x[10] - 0.4862 * x[3] * x[8] * x[9] + 0.2361 * x[3] * x[8] * x[10] + 0.8756 * x[3] * x[9] * x[10] + 0.9844 * x[4] * x[5] * x[6] - 0.5504 * x[4] * x[5] * x[7] + 0.8946 * x[4] * x[5] * x[8] + 0.6956 * x[4] * x[5] * x[9] + 0.4003 * x[4] * x[5] * x[10] + 0.1089 * x[4] * x[6] * x[7] - 0.1168 * x[4] * x[6] * x[8] - 0.5016 * x[4] * x[6] * x[9] + 0.7953 * x[4] * x[6] * x[10] - 0.7085 * x[4] * x[7] * x[8] - 0.1308 * x[4] * x[7] * x[9] - 0.0852 * x[4] * x[7] * x[10] - 0.3812 * x[4] * x[8] * x[9] - 0.0382 * x[4] * x[8] * x[10] + 0.3795 * x[4] * x[9] * x[10] + 0.6216 * x[5] * x[6] * x[7] - 0.2157 * x[5] * x[6] * x[8] - 0.4137 * x[5] * x[6] * x[9] + 0.152 * x[5] * x[6] * x[10] + 0.4507 * x[5] * x[7] * x[8] - 0.7145 * x[5] * x[7] * x[9] - 0.3329 * x[5] * x[7] * x[10] - 0.6792 * x[5] * x[8] * x[9] + 0.0692 * x[5] * x[8] * x[10] + 0.4467 * x[5] * x[9] * x[10] - 0.5436 * x[6] * x[7] * x[8] - 0.602 * x[6] * x[7] * x[9] + 0.9452 * x[6] * x[7] * x[10] + 0.9871 * x[6] * x[8] * x[9] - 0.8361 * x[6] * x[8] * x[10] - 0.4982 * x[6] * x[9] * x[10] - 0.5683 * x[7] * x[8] * x[9] - 0.6084 * x[7] * x[8] * x[10] + 0.7005 * x[7] * x[9] * x[10] - 0.9106 * x[8] * x[9] * x[10] + 0.9951 * x[1] * x[2] * x[3] * x[4] + 0.1336 * x[1] * x[2] * x[3] * x[5] + 0.9318 * x[1] * x[2] * x[3] * x[6] + 0.4959 * x[1] * x[2] * x[3] * x[7] - 0.2652 * x[1] * x[2] * x[3] * x[8] - 0.0387 * x[1] * x[2] * x[3] * x[9] - 0.8525 * x[1] * x[2] * x[3] * x[10] - 0.9893 * x[1] * x[2] * x[4] * x[5] - 0.3058 * x[1] * x[2] * x[4] * x[6] - 0.3155 * x[1] * x[2] * x[4] * x[7] - 0.5641 * x[1] * x[2] * x[4] * x[8] - 0.7337 * x[1] * x[2] * x[4] * x[9] + 0.801 * x[1] * x[2] * x[4] * x[10] - 0.2265 * x[1] * x[2] * x[5] * x[6] - 0.109 * x[1] * x[2] * x[5] * x[7] + 0.3239 * x[1] * x[2] * x[5] * x[8] - 0.9678 * x[1] * x[2] * x[5] * x[9] + 0.3017 * x[1] * x[2] * x[5] * x[10] + 0.2928 * x[1] * x[2] * x[6] * x[7] - 0.354 * x[1] * x[2] * x[6] * x[8] + 0.7114 * x[1] * x[2] * x[6] * x[9] - 0.1974 * x[1] * x[2] * x[6] * x[10] - 0.5863 * x[1] * x[2] * x[7] * x[8] + 0.9371 * x[1] * x[2] * x[7] * x[9] + 0.1968 * x[1] * x[2] * x[7] * x[10] + 0.346 * x[1] * x[2] * x[8] * x[9] - 0.0862 * x[1] * x[2] * x[8] * x[10] - 0.34 * x[1] * x[2] * x[9] * x[10] - 0.7992 * x[1] * x[3] * x[4] * x[5] + 0.5109 * x[1] * x[3] * x[4] * x[6] + 0.2114 * x[1] * x[3] * x[4] * x[7] + 0.4381 * x[1] * x[3] * x[4] * x[8] + 0.7947 * x[1] * x[3] * x[4] * x[9] + 0.3165 * x[1] * x[3] * x[4] * x[10] - 0.6986 * x[1] * x[3] * x[5] * x[6] + 0.2246 * x[1] * x[3] * x[5] * x[7] + 0.9573 * x[1] * x[3] * x[5] * x[8] + 0.9983 * x[1] * x[3] * x[5] * x[9] - 0.4864 * x[1] * x[3] * x[5] * x[10] + 0.1017 * x[1] * x[3] * x[6] * x[7] + 0.3181 * x[1] * x[3] * x[6] * x[8] + 0.108 * x[1] * x[3] * x[6] * x[9] + 0.9555 * x[1] * x[3] * x[6] * x[10] + 0.8038 * x[1] * x[3] * x[7] * x[8] + 0.3158 * x[1] * x[3] * x[7] * x[9] + 0.4577 * x[1] * x[3] * x[7] * x[10] - 0.1951 * x[1] * x[3] * x[8] * x[9] + 0.8573 * x[1] * x[3] * x[8] * x[10] - 0.7043 * x[1] * x[3] * x[9] * x[10] + 0.3491 * x[1] * x[4] * x[5] * x[6] + 0.5392 * x[1] * x[4] * x[5] * x[7] - 0.3214 * x[1] * x[4] * x[5] * x[8] - 0.7684 * x[1] * x[4] * x[5] * x[9] + 0.2287 * x[1] * x[4] * x[5] * x[10] + 0.6412 * x[1] * x[4] * x[6] * x[7] + 0.8942 * x[1] * x[4] * x[6] * x[8] + 0.4623 * x[1] * x[4] * x[6] * x[9] - 0.0048 * x[1] * x[4] * x[6] * x[10] - 0.2504 * x[1] * x[4] * x[7] * x[8] - 0.157 * x[1] * x[4] * x[7] * x[9] + 0.1058 * x[1] * x[4] * x[7] * x[10] + 0.9958 * x[1] * x[4] * x[8] * x[9] + 0.9808 * x[1] * x[4] * x[8] * x[10] + 0.4926 * x[1] * x[4] * x[9] * x[10] + 0.9075 * x[1] * x[5] * x[6] * x[7] - 0.8135 * x[1] * x[5] * x[6] * x[8] + 0.468 * x[1] * x[5] * x[6] * x[9] + 0.5035 * x[1] * x[5] * x[6] * x[10] + 0.8937 * x[1] * x[5] * x[7] * x[8] + 0.4124 * x[1] * x[5] * x[7] * x[9] + 0.6276 * x[1] * x[5] * x[7] * x[10] + 0.1172 * x[1] * x[5] * x[8] * x[9] - 0.8766 * x[1] * x[5] * x[8] * x[10] - 0.0392 * x[1] * x[5] * x[9] * x[10] + 0.1954 * x[1] * x[6] * x[7] * x[8] - 0.7249 * x[1] * x[6] * x[7] * x[9] + 0.1748 * x[1] * x[6] * x[7] * x[10] + 0.0399 * x[1] * x[6] * x[8] * x[9] + 0.7718 * x[1] * x[6] * x[8] * x[10] - 0.3924 * x[1] * x[6] * x[9] * x[10] + 0.3393 * x[1] * x[7] * x[8] * x[9] + 0.3299 * x[1] * x[7] * x[8] * x[10] + 0.0074 * x[1] * x[7] * x[9] * x[10] - 0.4768 * x[1] * x[8] * x[9] * x[10] - 0.8469 * x[2] * x[3] * x[4] * x[5] - 0.7975 * x[2] * x[3] * x[4] * x[6] + 0.0985 * x[2] * x[3] * x[4] * x[7] - 0.2488 * x[2] * x[3] * x[4] * x[8] - 0.9697 * x[2] * x[3] * x[4] * x[9] + 0.5858 * x[2] * x[3] * x[4] * x[10] + 0.2418 * x[2] * x[3] * x[5] * x[6] + 0.5472 * x[2] * x[3] * x[5] * x[7] + 0.9072 * x[2] * x[3] * x[5] * x[8] - 0.7715 * x[2] * x[3] * x[5] * x[9] - 0.3631 * x[2] * x[3] * x[5] * x[10] + 0.1936 * x[2] * x[3] * x[6] * x[7] - 0.9037 * x[2] * x[3] * x[6] * x[8] - 0.7716 * x[2] * x[3] * x[6] * x[9] - 0.5681 * x[2] * x[3] * x[6] * x[10] - 0.7989 * x[2] * x[3] * x[7] * x[8] - 0.8533 * x[2] * x[3] * x[7] * x[9] - 0.5063 * x[2] * x[3] * x[7] * x[10] - 0.1132 * x[2] * x[3] * x[8] * x[9] - 0.5833 * x[2] * x[3] * x[8] * x[10] + 0.134 * x[2] * x[3] * x[9] * x[10] - 0.9514 * x[2] * x[4] * x[5] * x[6] - 0.1594 * x[2] * x[4] * x[5] * x[7] - 0.2043 * x[2] * x[4] * x[5] * x[8] + 0.9532 * x[2] * x[4] * x[5] * x[9] + 0.3852 * x[2] * x[4] * x[5] * x[10] - 0.9901 * x[2] * x[4] * x[6] * x[7] - 0.7402 * x[2] * x[4] * x[6] * x[8] - 0.9064 * x[2] * x[4] * x[6] * x[9] + 0.6796 * x[2] * x[4] * x[6] * x[10] + 0.357 * x[2] * x[4] * x[7] * x[8] + 0.1639 * x[2] * x[4] * x[7] * x[9] + 0.4671 * x[2] * x[4] * x[7] * x[10] - 0.7679 * x[2] * x[4] * x[8] * x[9] + 0.6806 * x[2] * x[4] * x[8] * x[10] + 0.67 * x[2] * x[4] * x[9] * x[10] + 0.4931 * x[2] * x[5] * x[6] * x[7] + 0.6864 * x[2] * x[5] * x[6] * x[8] + 0.0577 * x[2] * x[5] * x[6] * x[9] + 0.331 * x[2] * x[5] * x[6] * x[10] + 0.4615 * x[2] * x[5] * x[7] * x[8] - 0.1788 * x[2] * x[5] * x[7] * x[9] - 0.2886 * x[2] * x[5] * x[7] * x[10] + 0.4708 * x[2] * x[5] * x[8] * x[9] - 0.0574 * x[2] * x[5] * x[8] * x[10] - 0.0747 * x[2] * x[5] * x[9] * x[10] + 0.5194 * x[2] * x[6] * x[7] * x[8] + 0.4049 * x[2] * x[6] * x[7] * x[9] - 0.4841 * x[2] * x[6] * x[7] * x[10] + 0.8754 * x[2] * x[6] * x[8] * x[9] - 0.0878 * x[2] * x[6] * x[8] * x[10] + 0.617 * x[2] * x[6] * x[9] * x[10] + 0.8177 * x[2] * x[7] * x[8] * x[9] + 0.3898 * x[2] * x[7] * x[8] * x[10] - 0.561 * x[2] * x[7] * x[9] * x[10] + 0.7099 * x[2] * x[8] * x[9] * x[10] + 0.4888 * x[3] * x[4] * x[5] * x[6] - 0.3978 * x[3] * x[4] * x[5] * x[7] + 0.3439 * x[3] * x[4] * x[5] * x[8] + 0.2374 * x[3] * x[4] * x[5] * x[9] + 0.9351 * x[3] * x[4] * x[5] * x[10] + 0.9805 * x[3] * x[4] * x[6] * x[7] - 0.324 * x[3] * x[4] * x[6] * x[8] + 0.8415 * x[3] * x[4] * x[6] * x[9] - 0.3219 * x[3] * x[4] * x[6] * x[10] + 0.8619 * x[3] * x[4] * x[7] * x[8] + 0.0931 * x[3] * x[4] * x[7] * x[9] - 0.069 * x[3] * x[4] * x[7] * x[10] - 0.6462 * x[3] * x[4] * x[8] * x[9] - 0.244 * x[3] * x[4] * x[8] * x[10] - 0.6496 * x[3] * x[4] * x[9] * x[10] - 0.2863 * x[3] * x[5] * x[6] * x[7] + 0.3314 * x[3] * x[5] * x[6] * x[8] + 0.2371 * x[3] * x[5] * x[6] * x[9] - 0.0621 * x[3] * x[5] * x[6] * x[10] - 0.3675 * x[3] * x[5] * x[7] * x[8] - 0.4622 * x[3] * x[5] * x[7] * x[9] - 0.6002 * x[3] * x[5] * x[7] * x[10] - 0.1691 * x[3] * x[5] * x[8] * x[9] + 0.9586 * x[3] * x[5] * x[8] * x[10] + 0.0864 * x[3] * x[5] * x[9] * x[10] - 0.741 * x[3] * x[6] * x[7] * x[8] + 0.6095 * x[3] * x[6] * x[7] * x[9] + 0.6916 * x[3] * x[6] * x[7] * x[10] + 0.4181 * x[3] * x[6] * x[8] * x[9] + 0.0579 * x[3] * x[6] * x[8] * x[10] + 0.3277 * x[3] * x[6] * x[9] * x[10] + 0.8015 * x[3] * x[7] * x[8] * x[9] + 0.8823 * x[3] * x[7] * x[8] * x[10] - 0.7712 * x[3] * x[7] * x[9] * x[10] + 0.7333 * x[3] * x[8] * x[9] * x[10] + 0.2647 * x[4] * x[5] * x[6] * x[7] - 0.5144 * x[4] * x[5] * x[6] * x[8] - 0.6792 * x[4] * x[5] * x[6] * x[9] - 0.9575 * x[4] * x[5] * x[6] * x[10] - 0.6195 * x[4] * x[5] * x[7] * x[8] - 0.3753 * x[4] * x[5] * x[7] * x[9] + 0.6193 * x[4] * x[5] * x[7] * x[10] + 0.1474 * x[4] * x[5] * x[8] * x[9] + 0.6525 * x[4] * x[5] * x[8] * x[10] - 0.4271 * x[4] * x[5] * x[9] * x[10] - 0.679 * x[4] * x[6] * x[7] * x[8] - 0.3382 * x[4] * x[6] * x[7] * x[9] - 0.4683 * x[4] * x[6] * x[7] * x[10] + 0.0896 * x[4] * x[6] * x[8] * x[9] + 0.107 * x[4] * x[6] * x[8] * x[10] - 0.9568 * x[4] * x[6] * x[9] * x[10] - 0.7025 * x[4] * x[7] * x[8] * x[9] - 0.7902 * x[4] * x[7] * x[8] * x[10] + 0.2284 * x[4] * x[7] * x[9] * x[10] - 0.1874 * x[4] * x[8] * x[9] * x[10] + 0.8031 * x[5] * x[6] * x[7] * x[8] + 0.8857 * x[5] * x[6] * x[7] * x[9] - 0.6868 * x[5] * x[6] * x[7] * x[10] + 0.8739 * x[5] * x[6] * x[8] * x[9] - 0.7291 * x[5] * x[6] * x[8] * x[10] - 0.2574 * x[5] * x[6] * x[9] * x[10] - 0.357 * x[5] * x[7] * x[8] * x[9] + 0.4299 * x[5] * x[7] * x[8] * x[10] + 0.4594 * x[5] * x[7] * x[9] * x[10] - 0.2428 * x[5] * x[8] * x[9] * x[10] + 0.6579 * x[6] * x[7] * x[8] * x[9] + 0.9073 * x[6] * x[7] * x[8] * x[10] - 0.3832 * x[6] * x[7] * x[9] * x[10] + 0.1595 * x[6] * x[8] * x[9] * x[10] - 0.5331 * x[7] * x[8] * x[9] * x[10] )) obj = replace_expr(obj, x) JuMP.set_nonlinear_objective(m, MOI.MIN_SENSE, obj) # ----- Constraints ----- # e2 = :( 0.4626 * x[1] * x[2] + 0.0198 * x[1] * x[3] - 0.4397 * x[1] * x[4] + 0.9861 * x[1] * x[5] + 0.5225 * x[1] * x[6] - 0.9346 * x[1] * x[7] + 0.4133 * x[1] * x[8] + 0.3442 * x[1] * x[9] - 0.8199 * x[1] * x[10] - 0.0776 * x[2] * x[3] - 0.4723 * x[2] * x[4] - 0.289 * x[2] * x[5] + 0.4463 * x[2] * x[6] - 0.9454 * x[2] * x[7] + 0.1697 * x[2] * x[8] + 0.3885 * x[2] * x[9] - 0.7786 * x[2] * x[10] + 0.0525 * x[3] * x[4] + 0.9874 * x[3] * x[5] + 0.4525 * x[3] * x[6] + 0.521 * x[3] * x[7] - 0.5928 * x[3] * x[8] + 0.7265 * x[3] * x[9] - 0.615 * x[3] * x[10] - 0.8237 * x[4] * x[5] - 0.5174 * x[4] * x[6] + 0.821 * x[4] * x[7] + 0.6597 * x[4] * x[8] - 0.8449 * x[4] * x[9] + 0.743 * x[4] * x[10] + 0.1144 * x[5] * x[6] - 0.2056 * x[5] * x[7] + 0.9986 * x[5] * x[8] + 0.54 * x[5] * x[9] + 0.5713 * x[5] * x[10] + 0.5068 * x[6] * x[7] + 0.1204 * x[6] * x[8] + 0.3888 * x[6] * x[9] + 0.7512 * x[6] * x[10] - 0.9713 * x[7] * x[8] - 0.4285 * x[7] * x[9] - 0.6373 * x[7] * x[10] + 0.6154 * x[8] * x[9] + 0.1051 * x[8] * x[10] - 0.0283 * x[9] * x[10] + 0.0735 * x[1] - 0.9093 * x[2] - 0.7123 * x[3] + 0.5603 * x[4] + 0.5412 * x[5] - 0.6809 * x[6] - 0.0621 * x[7] - 0.674 * x[8] + 0.0977 * x[9] - 0.3899 * x[10] + (-0.6347 * x[1] * x[2] * x[3]) - 0.9763 * x[1] * x[2] * x[4] + 0.8874 * x[1] * x[2] * x[5] - 0.0161 * x[1] * x[2] * x[6] + 0.9611 * x[1] * x[2] * x[7] + 0.2266 * x[1] * x[2] * x[8] - 0.2746 * x[1] * x[2] * x[9] + 0.0648 * x[1] * x[2] * x[10] - 0.7084 * x[1] * x[3] * x[4] - 0.7343 * x[1] * x[3] * x[5] - 0.2376 * x[1] * x[3] * x[6] + 0.4007 * x[1] * x[3] * x[7] + 0.0995 * x[1] * x[3] * x[8] + 0.6511 * x[1] * x[3] * x[9] + 0.0747 * x[1] * x[3] * x[10] + 0.3247 * x[1] * x[4] * x[5] - 0.8937 * x[1] * x[4] * x[6] - 0.6571 * x[1] * x[4] * x[7] + 0.2373 * x[1] * x[4] * x[8] + 0.5175 * x[1] * x[4] * x[9] + 0.8201 * x[1] * x[4] * x[10] + 0.428 * x[1] * x[5] * x[6] + 0.48 * x[1] * x[5] * x[7] - 0.2866 * x[1] * x[5] * x[8] + 0.6437 * x[1] * x[5] * x[9] + 0.1041 * x[1] * x[5] * x[10] + 0.3016 * x[1] * x[6] * x[7] - 0.6249 * x[1] * x[6] * x[8] + 0.6366 * x[1] * x[6] * x[9] - 0.9552 * x[1] * x[6] * x[10] + 0.3144 * x[1] * x[7] * x[8] - 0.7607 * x[1] * x[7] * x[9] - 0.2293 * x[1] * x[7] * x[10] - 0.5147 * x[1] * x[8] * x[9] + 0.9307 * x[1] * x[8] * x[10] - 0.0294 * x[1] * x[9] * x[10] + 0.9847 * x[2] * x[3] * x[4] - 0.4374 * x[2] * x[3] * x[5] + 0.9569 * x[2] * x[3] * x[6] + 0.9057 * x[2] * x[3] * x[7] - 0.5138 * x[2] * x[3] * x[8] - 0.1668 * x[2] * x[3] * x[9] + 0.4716 * x[2] * x[3] * x[10] - 0.6094 * x[2] * x[4] * x[5] + 0.2787 * x[2] * x[4] * x[6] + 0.2594 * x[2] * x[4] * x[7] - 0.7943 * x[2] * x[4] * x[8] - 0.7225 * x[2] * x[4] * x[9] - 0.0902 * x[2] * x[4] * x[10] + 0.9687 * x[2] * x[5] * x[6] - 0.1502 * x[2] * x[5] * x[7] + 0.4096 * x[2] * x[5] * x[8] - 0.2692 * x[2] * x[5] * x[9] - 0.5992 * x[2] * x[5] * x[10] - 0.1808 * x[2] * x[6] * x[7] - 0.5216 * x[2] * x[6] * x[8] + 0.41 * x[2] * x[6] * x[9] - 0.8418 * x[2] * x[6] * x[10] - 0.5924 * x[2] * x[7] * x[8] - 0.9653 * x[2] * x[7] * x[9] - 0.3314 * x[2] * x[7] * x[10] - 0.4303 * x[2] * x[8] * x[9] + 0.6908 * x[2] * x[8] * x[10] - 0.0111 * x[2] * x[9] * x[10] + 0.4202 * x[3] * x[4] * x[5] - 0.4907 * x[3] * x[4] * x[6] + 0.6454 * x[3] * x[4] * x[7] - 0.4368 * x[3] * x[4] * x[8] + 0.2496 * x[3] * x[4] * x[9] + 0.4916 * x[3] * x[4] * x[10] + 0.7479 * x[3] * x[5] * x[6] - 0.7442 * x[3] * x[5] * x[7] - 0.4416 * x[3] * x[5] * x[8] + 0.847 * x[3] * x[5] * x[9] + 0.9726 * x[3] * x[5] * x[10] + 0.5786 * x[3] * x[6] * x[7] - 0.3041 * x[3] * x[6] * x[8] + 0.5286 * x[3] * x[6] * x[9] - 0.6138 * x[3] * x[6] * x[10] - 0.8712 * x[3] * x[7] * x[8] - 0.9096 * x[3] * x[7] * x[9] - 0.707 * x[3] * x[7] * x[10] + 0.6138 * x[3] * x[8] * x[9] + 0.312 * x[3] * x[8] * x[10] - 0.5107 * x[3] * x[9] * x[10] - 0.3513 * x[4] * x[5] * x[6] + 0.9673 * x[4] * x[5] * x[7] + 0.2275 * x[4] * x[5] * x[8] - 0.415 * x[4] * x[5] * x[9] - 0.0089 * x[4] * x[5] * x[10] + 0.4723 * x[4] * x[6] * x[7] - 0.9209 * x[4] * x[6] * x[8] - 0.9687 * x[4] * x[6] * x[9] - 0.043 * x[4] * x[6] * x[10] + 0.5532 * x[4] * x[7] * x[8] + 0.8139 * x[4] * x[7] * x[9] + 0.8304 * x[4] * x[7] * x[10] - 0.3323 * x[4] * x[8] * x[9] - 0.4014 * x[4] * x[8] * x[10] + 0.6574 * x[4] * x[9] * x[10] - 0.0813 * x[5] * x[6] * x[7] - 0.9703 * x[5] * x[6] * x[8] - 0.3218 * x[5] * x[6] * x[9] - 0.8836 * x[5] * x[6] * x[10] - 0.8145 * x[5] * x[7] * x[8] + 0.3035 * x[5] * x[7] * x[9] - 0.2096 * x[5] * x[7] * x[10] + 0.2399 * x[5] * x[8] * x[9] + 0.6504 * x[5] * x[8] * x[10] - 0.3218 * x[5] * x[9] * x[10] - 0.3831 * x[6] * x[7] * x[8] - 0.2782 * x[6] * x[7] * x[9] - 0.1766 * x[6] * x[7] * x[10] - 0.0781 * x[6] * x[8] * x[9] - 0.2352 * x[6] * x[8] * x[10] + 0.2862 * x[6] * x[9] * x[10] - 0.5167 * x[7] * x[8] * x[9] + 0.4314 * x[7] * x[8] * x[10] + 0.7136 * x[7] * x[9] * x[10] - 0.6721 * x[8] * x[9] * x[10] + (-0.5978 * x[1] * x[2] * x[3] * x[4]) - 0.5025 * x[1] * x[2] * x[3] * x[5] + 0.9402 * x[1] * x[2] * x[3] * x[6] + 0.5528 * x[1] * x[2] * x[3] * x[7] - 0.4546 * x[1] * x[2] * x[3] * x[8] - 0.0061 * x[1] * x[2] * x[3] * x[9] - 0.2025 * x[1] * x[2] * x[3] * x[10] + 0.2266 * x[1] * x[2] * x[4] * x[5] - 0.8295 * x[1] * x[2] * x[4] * x[6] + 0.474 * x[1] * x[2] * x[4] * x[7] + 0.7257 * x[1] * x[2] * x[4] * x[8] - 0.3179 * x[1] * x[2] * x[4] * x[9] + 0.3889 * x[1] * x[2] * x[4] * x[10] + 0.2838 * x[1] * x[2] * x[5] * x[6] - 0.829 * x[1] * x[2] * x[5] * x[7] + 0.416 * x[1] * x[2] * x[5] * x[8] + 0.1849 * x[1] * x[2] * x[5] * x[9] - 0.5344 * x[1] * x[2] * x[5] * x[10] - 0.8496 * x[1] * x[2] * x[6] * x[7] - 0.3513 * x[1] * x[2] * x[6] * x[8] + 0.8262 * x[1] * x[2] * x[6] * x[9] - 0.5914 * x[1] * x[2] * x[6] * x[10] - 0.0945 * x[1] * x[2] * x[7] * x[8] + 0.4543 * x[1] * x[2] * x[7] * x[9] - 0.9433 * x[1] * x[2] * x[7] * x[10] + 0.0341 * x[1] * x[2] * x[8] * x[9] + 0.5353 * x[1] * x[2] * x[8] * x[10] + 0.7887 * x[1] * x[2] * x[9] * x[10] + 0.889 * x[1] * x[3] * x[4] * x[5] - 0.4204 * x[1] * x[3] * x[4] * x[6] + 0.0629 * x[1] * x[3] * x[4] * x[7] - 0.5343 * x[1] * x[3] * x[4] * x[8] - 0.3744 * x[1] * x[3] * x[4] * x[9] - 0.717 * x[1] * x[3] * x[4] * x[10] - 0.3148 * x[1] * x[3] * x[5] * x[6] - 0.6929 * x[1] * x[3] * x[5] * x[7] + 0.6984 * x[1] * x[3] * x[5] * x[8] + 0.9441 * x[1] * x[3] * x[5] * x[9] - 0.1182 * x[1] * x[3] * x[5] * x[10] + 0.5489 * x[1] * x[3] * x[6] * x[7] - 0.0876 * x[1] * x[3] * x[6] * x[8] + 0.729 * x[1] * x[3] * x[6] * x[9] + 0.456 * x[1] * x[3] * x[6] * x[10] + 0.2747 * x[1] * x[3] * x[7] * x[8] + 0.4481 * x[1] * x[3] * x[7] * x[9] + 0.2084 * x[1] * x[3] * x[7] * x[10] - 0.9474 * x[1] * x[3] * x[8] * x[9] - 0.4145 * x[1] * x[3] * x[8] * x[10] - 0.6056 * x[1] * x[3] * x[9] * x[10] + 0.8973 * x[1] * x[4] * x[5] * x[6] + 0.0637 * x[1] * x[4] * x[5] * x[7] - 0.9793 * x[1] * x[4] * x[5] * x[8] - 0.0957 * x[1] * x[4] * x[5] * x[9] + 0.9272 * x[1] * x[4] * x[5] * x[10] + 0.9722 * x[1] * x[4] * x[6] * x[7] - 0.3182 * x[1] * x[4] * x[6] * x[8] + 0.9186 * x[1] * x[4] * x[6] * x[9] - 0.3466 * x[1] * x[4] * x[6] * x[10] + 0.4085 * x[1] * x[4] * x[7] * x[8] + 0.5809 * x[1] * x[4] * x[7] * x[9] + 0.4471 * x[1] * x[4] * x[7] * x[10] + 0.4579 * x[1] * x[4] * x[8] * x[9] - 0.1092 * x[1] * x[4] * x[8] * x[10] - 0.2364 * x[1] * x[4] * x[9] * x[10] + 0.8444 * x[1] * x[5] * x[6] * x[7] + 0.4968 * x[1] * x[5] * x[6] * x[8] - 0.1465 * x[1] * x[5] * x[6] * x[9] - 0.5651 * x[1] * x[5] * x[6] * x[10] + 0.4588 * x[1] * x[5] * x[7] * x[8] + 0.5938 * x[1] * x[5] * x[7] * x[9] + 0.1168 * x[1] * x[5] * x[7] * x[10] + 0.7708 * x[1] * x[5] * x[8] * x[9] - 0.2337 * x[1] * x[5] * x[8] * x[10] - 0.5184 * x[1] * x[5] * x[9] * x[10] - 0.3698 * x[1] * x[6] * x[7] * x[8] - 0.1342 * x[1] * x[6] * x[7] * x[9] - 0.904 * x[1] * x[6] * x[7] * x[10] - 0.1518 * x[1] * x[6] * x[8] * x[9] + 0.4747 * x[1] * x[6] * x[8] * x[10] + 0.7456 * x[1] * x[6] * x[9] * x[10] - 0.384 * x[1] * x[7] * x[8] * x[9] + 0.6866 * x[1] * x[7] * x[8] * x[10] + 0.6322 * x[1] * x[7] * x[9] * x[10] - 0.1864 * x[1] * x[8] * x[9] * x[10] + 0.73 * x[2] * x[3] * x[4] * x[5] + 0.7045 * x[2] * x[3] * x[4] * x[6] + 0.0242 * x[2] * x[3] * x[4] * x[7] + 0.5528 * x[2] * x[3] * x[4] * x[8] - 0.0143 * x[2] * x[3] * x[4] * x[9] - 0.5903 * x[2] * x[3] * x[4] * x[10] - 0.1097 * x[2] * x[3] * x[5] * x[6] - 0.1329 * x[2] * x[3] * x[5] * x[7] - 0.8906 * x[2] * x[3] * x[5] * x[8] + 0.401 * x[2] * x[3] * x[5] * x[9] + 0.8385 * x[2] * x[3] * x[5] * x[10] - 0.222 * x[2] * x[3] * x[6] * x[7] - 0.5022 * x[2] * x[3] * x[6] * x[8] - 0.2673 * x[2] * x[3] * x[6] * x[9] + 0.9973 * x[2] * x[3] * x[6] * x[10] + 0.3242 * x[2] * x[3] * x[7] * x[8] - 0.6405 * x[2] * x[3] * x[7] * x[9] + 0.7448 * x[2] * x[3] * x[7] * x[10] - 0.5121 * x[2] * x[3] * x[8] * x[9] - 0.7672 * x[2] * x[3] * x[8] * x[10] + 0.6364 * x[2] * x[3] * x[9] * x[10] + 0.0713 * x[2] * x[4] * x[5] * x[6] + 0.9761 * x[2] * x[4] * x[5] * x[7] - 0.1674 * x[2] * x[4] * x[5] * x[8] + 0.6164 * x[2] * x[4] * x[5] * x[9] - 0.5201 * x[2] * x[4] * x[5] * x[10] + 0.9405 * x[2] * x[4] * x[6] * x[7] - 0.2474 * x[2] * x[4] * x[6] * x[8] + 0.2668 * x[2] * x[4] * x[6] * x[9] - 0.7262 * x[2] * x[4] * x[6] * x[10] + 0.5369 * x[2] * x[4] * x[7] * x[8] - 0.7976 * x[2] * x[4] * x[7] * x[9] + 0.1039 * x[2] * x[4] * x[7] * x[10] + 0.6633 * x[2] * x[4] * x[8] * x[9] - 0.2455 * x[2] * x[4] * x[8] * x[10] + 0.7355 * x[2] * x[4] * x[9] * x[10] + 0.2493 * x[2] * x[5] * x[6] * x[7] + 0.1046 * x[2] * x[5] * x[6] * x[8] - 0.5768 * x[2] * x[5] * x[6] * x[9] + 0.6454 * x[2] * x[5] * x[6] * x[10] - 0.2728 * x[2] * x[5] * x[7] * x[8] - 0.539 * x[2] * x[5] * x[7] * x[9] - 0.3418 * x[2] * x[5] * x[7] * x[10] + 0.3602 * x[2] * x[5] * x[8] * x[9] - 0.1419 * x[2] * x[5] * x[8] * x[10] - 0.0954 * x[2] * x[5] * x[9] * x[10] + 0.8552 * x[2] * x[6] * x[7] * x[8] - 0.1075 * x[2] * x[6] * x[7] * x[9] + 0.3345 * x[2] * x[6] * x[7] * x[10] + 0.5617 * x[2] * x[6] * x[8] * x[9] + 0.5817 * x[2] * x[6] * x[8] * x[10] - 0.6045 * x[2] * x[6] * x[9] * x[10] - 0.4872 * x[2] * x[7] * x[8] * x[9] + 0.3536 * x[2] * x[7] * x[8] * x[10] + 0.7971 * x[2] * x[7] * x[9] * x[10] - 0.25 * x[2] * x[8] * x[9] * x[10] - 0.9599 * x[3] * x[4] * x[5] * x[6] - 0.196 * x[3] * x[4] * x[5] * x[7] + 0.9819 * x[3] * x[4] * x[5] * x[8] + 0.9495 * x[3] * x[4] * x[5] * x[9] + 0.9406 * x[3] * x[4] * x[5] * x[10] + 0.9377 * x[3] * x[4] * x[6] * x[7] - 0.2505 * x[3] * x[4] * x[6] * x[8] - 0.8054 * x[3] * x[4] * x[6] * x[9] + 0.5014 * x[3] * x[4] * x[6] * x[10] + 0.649 * x[3] * x[4] * x[7] * x[8] + 0.4489 * x[3] * x[4] * x[7] * x[9] - 0.2659 * x[3] * x[4] * x[7] * x[10] + 0.2441 * x[3] * x[4] * x[8] * x[9] - 0.3874 * x[3] * x[4] * x[8] * x[10] - 0.3974 * x[3] * x[4] * x[9] * x[10] + 0.3528 * x[3] * x[5] * x[6] * x[7] + 0.6601 * x[3] * x[5] * x[6] * x[8] + 0.1126 * x[3] * x[5] * x[6] * x[9] + 0.1189 * x[3] * x[5] * x[6] * x[10] - 0.3444 * x[3] * x[5] * x[7] * x[8] + 0.4614 * x[3] * x[5] * x[7] * x[9] - 0.6835 * x[3] * x[5] * x[7] * x[10] + 0.0658 * x[3] * x[5] * x[8] * x[9] + 0.5684 * x[3] * x[5] * x[8] * x[10] - 0.5684 * x[3] * x[5] * x[9] * x[10] - 0.3494 * x[3] * x[6] * x[7] * x[8] + 0.0029 * x[3] * x[6] * x[7] * x[9] - 0.5542 * x[3] * x[6] * x[7] * x[10] - 0.067 * x[3] * x[6] * x[8] * x[9] - 0.6264 * x[3] * x[6] * x[8] * x[10] - 0.6098 * x[3] * x[6] * x[9] * x[10] - 0.5862 * x[3] * x[7] * x[8] * x[9] + 0.8116 * x[3] * x[7] * x[8] * x[10] + 0.5998 * x[3] * x[7] * x[9] * x[10] + 0.4699 * x[3] * x[8] * x[9] * x[10] - 0.1693 * x[4] * x[5] * x[6] * x[7] + 0.622 * x[4] * x[5] * x[6] * x[8] + 0.9767 * x[4] * x[5] * x[6] * x[9] - 0.0178 * x[4] * x[5] * x[6] * x[10] - 0.5614 * x[4] * x[5] * x[7] * x[8] + 0.5238 * x[4] * x[5] * x[7] * x[9] + 0.8146 * x[4] * x[5] * x[7] * x[10] + 0.1793 * x[4] * x[5] * x[8] * x[9] + 0.7412 * x[4] * x[5] * x[8] * x[10] - 0.9228 * x[4] * x[5] * x[9] * x[10] + 0.8761 * x[4] * x[6] * x[7] * x[8] - 0.9062 * x[4] * x[6] * x[7] * x[9] + 0.7942 * x[4] * x[6] * x[7] * x[10] - 0.9605 * x[4] * x[6] * x[8] * x[9] + 0.9985 * x[4] * x[6] * x[8] * x[10] + 0.9604 * x[4] * x[6] * x[9] * x[10] + 0.2233 * x[4] * x[7] * x[8] * x[9] + 0.1751 * x[4] * x[7] * x[8] * x[10] + 0.9245 * x[4] * x[7] * x[9] * x[10] + 0.7868 * x[4] * x[8] * x[9] * x[10] - 0.5956 * x[5] * x[6] * x[7] * x[8] - 0.9745 * x[5] * x[6] * x[7] * x[9] - 0.49 * x[5] * x[6] * x[7] * x[10] + 0.7809 * x[5] * x[6] * x[8] * x[9] - 0.4609 * x[5] * x[6] * x[8] * x[10] + 0.778 * x[5] * x[6] * x[9] * x[10] + 0.0383 * x[5] * x[7] * x[8] * x[9] - 0.2656 * x[5] * x[7] * x[8] * x[10] + 0.9676 * x[5] * x[7] * x[9] * x[10] + 0.7539 * x[5] * x[8] * x[9] * x[10] + 0.3629 * x[6] * x[7] * x[8] * x[9] - 0.2751 * x[6] * x[7] * x[8] * x[10] - 0.6036 * x[6] * x[7] * x[9] * x[10] - 0.6255 * x[6] * x[8] * x[9] * x[10] + 0.9753 * x[7] * x[8] * x[9] * x[10] <= 15.442 ) e2 = replace_expr(e2, x) JuMP.add_nonlinear_constraint(m, e2) e3 = :( (-0.4919 * x[1] * x[2]) - 0.0339 * x[1] * x[3] + 0.2248 * x[1] * x[4] + 0.366 * x[1] * x[5] - 0.1987 * x[1] * x[6] - 0.5784 * x[1] * x[7] + 0.8198 * x[1] * x[8] - 0.0486 * x[1] * x[9] + 0.7126 * x[1] * x[10] + 0.8337 * x[2] * x[3] + 0.0308 * x[2] * x[4] + 0.4378 * x[2] * x[5] - 0.4249 * x[2] * x[6] - 0.876 * x[2] * x[7] - 0.247 * x[2] * x[8] - 0.482 * x[2] * x[9] + 0.0808 * x[2] * x[10] + 0.0687 * x[3] * x[4] - 0.9379 * x[3] * x[5] - 0.1556 * x[3] * x[6] - 0.1534 * x[3] * x[7] + 0.2972 * x[3] * x[8] - 0.682 * x[3] * x[9] - 0.2246 * x[3] * x[10] + 0.2078 * x[4] * x[5] + 0.0801 * x[4] * x[6] + 0.412 * x[4] * x[7] - 0.7653 * x[4] * x[8] + 0.7097 * x[4] * x[9] + 0.1609 * x[4] * x[10] + 0.0463 * x[5] * x[6] - 0.049 * x[5] * x[7] - 0.9321 * x[5] * x[8] + 0.5337 * x[5] * x[9] + 0.6369 * x[5] * x[10] - 0.8873 * x[6] * x[7] - 0.5746 * x[6] * x[8] + 0.4865 * x[6] * x[9] - 0.3803 * x[6] * x[10] - 0.7699 * x[7] * x[8] + 0.7363 * x[7] * x[9] - 0.2812 * x[7] * x[10] + 0.8172 * x[8] * x[9] - 0.5754 * x[8] * x[10] - 0.2821 * x[9] * x[10] - 0.8113 * x[1] + 0.3038 * x[2] + 0.8093 * x[3] + 0.5277 * x[4] + 0.7849 * x[5] + 0.6706 * x[6] + 0.0152 * x[7] - 0.009 * x[8] + 0.0082 * x[9] + 0.5372 * x[10] + (-0.0925 * x[1] * x[2] * x[3]) - 0.4232 * x[1] * x[2] * x[4] + 0.4301 * x[1] * x[2] * x[5] - 0.1282 * x[1] * x[2] * x[6] + 0.2232 * x[1] * x[2] * x[7] + 0.124 * x[1] * x[2] * x[8] - 0.3137 * x[1] * x[2] * x[9] + 0.5432 * x[1] * x[2] * x[10] - 0.0037 * x[1] * x[3] * x[4] - 0.0924 * x[1] * x[3] * x[5] + 0.3913 * x[1] * x[3] * x[6] - 0.6371 * x[1] * x[3] * x[7] - 0.1172 * x[1] * x[3] * x[8] - 0.1265 * x[1] * x[3] * x[9] - 0.8825 * x[1] * x[3] * x[10] - 0.2623 * x[1] * x[4] * x[5] - 0.1383 * x[1] * x[4] * x[6] - 0.6027 * x[1] * x[4] * x[7] - 0.21 * x[1] * x[4] * x[8] - 0.5062 * x[1] * x[4] * x[9] - 0.8757 * x[1] * x[4] * x[10] + 0.8153 * x[1] * x[5] * x[6] + 0.0395 * x[1] * x[5] * x[7] - 0.8308 * x[1] * x[5] * x[8] - 0.2081 * x[1] * x[5] * x[9] - 0.797 * x[1] * x[5] * x[10] - 0.9042 * x[1] * x[6] * x[7] - 0.5208 * x[1] * x[6] * x[8] + 0.2869 * x[1] * x[6] * x[9] + 0.0977 * x[1] * x[6] * x[10] - 0.6313 * x[1] * x[7] * x[8] - 0.1462 * x[1] * x[7] * x[9] + 0.2552 * x[1] * x[7] * x[10] - 0.8255 * x[1] * x[8] * x[9] + 0.0742 * x[1] * x[8] * x[10] + 0.6895 * x[1] * x[9] * x[10] - 0.181 * x[2] * x[3] * x[4] - 0.5937 * x[2] * x[3] * x[5] + 0.6543 * x[2] * x[3] * x[6] + 0.9317 * x[2] * x[3] * x[7] - 0.2445 * x[2] * x[3] * x[8] + 0.2943 * x[2] * x[3] * x[9] + 0.3555 * x[2] * x[3] * x[10] - 0.1086 * x[2] * x[4] * x[5] - 0.6558 * x[2] * x[4] * x[6] - 0.296 * x[2] * x[4] * x[7] - 0.3417 * x[2] * x[4] * x[8] + 0.4937 * x[2] * x[4] * x[9] - 0.457 * x[2] * x[4] * x[10] + 0.1226 * x[2] * x[5] * x[6] - 0.7351 * x[2] * x[5] * x[7] + 0.5968 * x[2] * x[5] * x[8] - 0.5881 * x[2] * x[5] * x[9] - 0.9469 * x[2] * x[5] * x[10] - 0.6075 * x[2] * x[6] * x[7] - 0.9843 * x[2] * x[6] * x[8] + 0.6435 * x[2] * x[6] * x[9] + 0.8889 * x[2] * x[6] * x[10] - 0.064 * x[2] * x[7] * x[8] - 0.7728 * x[2] * x[7] * x[9] - 0.679 * x[2] * x[7] * x[10] + 0.6905 * x[2] * x[8] * x[9] + 0.7074 * x[2] * x[8] * x[10] - 0.3972 * x[2] * x[9] * x[10] - 0.4977 * x[3] * x[4] * x[5] - 0.5983 * x[3] * x[4] * x[6] - 0.4784 * x[3] * x[4] * x[7] - 0.4858 * x[3] * x[4] * x[8] + 0.2572 * x[3] * x[4] * x[9] - 0.0521 * x[3] * x[4] * x[10] + 0.7398 * x[3] * x[5] * x[6] + 0.2972 * x[3] * x[5] * x[7] + 0.7789 * x[3] * x[5] * x[8] + 0.5905 * x[3] * x[5] * x[9] + 0.7603 * x[3] * x[5] * x[10] - 0.5705 * x[3] * x[6] * x[7] + 0.9037 * x[3] * x[6] * x[8] + 0.4382 * x[3] * x[6] * x[9] - 0.7787 * x[3] * x[6] * x[10] + 0.9149 * x[3] * x[7] * x[8] + 0.2939 * x[3] * x[7] * x[9] + 0.1637 * x[3] * x[7] * x[10] - 0.9742 * x[3] * x[8] * x[9] - 0.4477 * x[3] * x[8] * x[10] + 0.6009 * x[3] * x[9] * x[10] - 0.3442 * x[4] * x[5] * x[6] + 0.1588 * x[4] * x[5] * x[7] - 0.9521 * x[4] * x[5] * x[8] + 0.3398 * x[4] * x[5] * x[9] - 0.6371 * x[4] * x[5] * x[10] - 0.4268 * x[4] * x[6] * x[7] + 0.3169 * x[4] * x[6] * x[8] + 0.1779 * x[4] * x[6] * x[9] - 0.8726 * x[4] * x[6] * x[10] - 0.7344 * x[4] * x[7] * x[8] + 0.4833 * x[4] * x[7] * x[9] + 0.0007 * x[4] * x[7] * x[10] - 0.9371 * x[4] * x[8] * x[9] + 0.9815 * x[4] * x[8] * x[10] - 0.9932 * x[4] * x[9] * x[10] + 0.3986 * x[5] * x[6] * x[7] + 0.5181 * x[5] * x[6] * x[8] - 0.4916 * x[5] * x[6] * x[9] - 0.3371 * x[5] * x[6] * x[10] + 0.1457 * x[5] * x[7] * x[8] + 0.9832 * x[5] * x[7] * x[9] - 0.0207 * x[5] * x[7] * x[10] + 0.1223 * x[5] * x[8] * x[9] + 0.2128 * x[5] * x[8] * x[10] - 0.8286 * x[5] * x[9] * x[10] - 0.4837 * x[6] * x[7] * x[8] - 0.0592 * x[6] * x[7] * x[9] + 0.6266 * x[6] * x[7] * x[10] + 0.4492 * x[6] * x[8] * x[9] + 0.9861 * x[6] * x[8] * x[10] - 0.8687 * x[6] * x[9] * x[10] - 0.8504 * x[7] * x[8] * x[9] + 0.6624 * x[7] * x[8] * x[10] - 0.1745 * x[7] * x[9] * x[10] + 0.3241 * x[8] * x[9] * x[10] + 0.15 * x[1] * x[2] * x[3] * x[4] - 0.7118 * x[1] * x[2] * x[3] * x[5] - 0.6134 * x[1] * x[2] * x[3] * x[6] + 0.3822 * x[1] * x[2] * x[3] * x[7] + 0.9004 * x[1] * x[2] * x[3] * x[8] - 0.7372 * x[1] * x[2] * x[3] * x[9] + 0.42 * x[1] * x[2] * x[3] * x[10] - 0.2405 * x[1] * x[2] * x[4] * x[5] - 0.204 * x[1] * x[2] * x[4] * x[6] - 0.998 * x[1] * x[2] * x[4] * x[7] - 0.1736 * x[1] * x[2] * x[4] * x[8] + 0.6076 * x[1] * x[2] * x[4] * x[9] + 0.7557 * x[1] * x[2] * x[4] * x[10] - 0.7184 * x[1] * x[2] * x[5] * x[6] - 0.9139 * x[1] * x[2] * x[5] * x[7] + 0.1313 * x[1] * x[2] * x[5] * x[8] - 0.8836 * x[1] * x[2] * x[5] * x[9] + 0.7427 * x[1] * x[2] * x[5] * x[10] - 0.3114 * x[1] * x[2] * x[6] * x[7] - 0.0203 * x[1] * x[2] * x[6] * x[8] - 0.4356 * x[1] * x[2] * x[6] * x[9] - 0.5229 * x[1] * x[2] * x[6] * x[10] + 0.0993 * x[1] * x[2] * x[7] * x[8] + 0.4277 * x[1] * x[2] * x[7] * x[9] + 0.8057 * x[1] * x[2] * x[7] * x[10] + 0.5147 * x[1] * x[2] * x[8] * x[9] + 0.0785 * x[1] * x[2] * x[8] * x[10] + 0.2918 * x[1] * x[2] * x[9] * x[10] + 0.5539 * x[1] * x[3] * x[4] * x[5] + 0.758 * x[1] * x[3] * x[4] * x[6] + 0.2055 * x[1] * x[3] * x[4] * x[7] - 0.877 * x[1] * x[3] * x[4] * x[8] - 0.1218 * x[1] * x[3] * x[4] * x[9] - 0.9826 * x[1] * x[3] * x[4] * x[10] - 0.4008 * x[1] * x[3] * x[5] * x[6] + 0.947 * x[1] * x[3] * x[5] * x[7] + 0.9103 * x[1] * x[3] * x[5] * x[8] - 0.5734 * x[1] * x[3] * x[5] * x[9] + 0.3479 * x[1] * x[3] * x[5] * x[10] + 0.0723 * x[1] * x[3] * x[6] * x[7] - 0.2806 * x[1] * x[3] * x[6] * x[8] - 0.9973 * x[1] * x[3] * x[6] * x[9] + 0.6989 * x[1] * x[3] * x[6] * x[10] - 0.1571 * x[1] * x[3] * x[7] * x[8] + 0.4957 * x[1] * x[3] * x[7] * x[9] - 0.9767 * x[1] * x[3] * x[7] * x[10] + 0.2287 * x[1] * x[3] * x[8] * x[9] - 0.1111 * x[1] * x[3] * x[8] * x[10] + 0.3253 * x[1] * x[3] * x[9] * x[10] + 0.3775 * x[1] * x[4] * x[5] * x[6] + 0.8783 * x[1] * x[4] * x[5] * x[7] + 0.4335 * x[1] * x[4] * x[5] * x[8] - 0.0967 * x[1] * x[4] * x[5] * x[9] + 0.269 * x[1] * x[4] * x[5] * x[10] - 0.5516 * x[1] * x[4] * x[6] * x[7] - 0.2037 * x[1] * x[4] * x[6] * x[8] + 0.6602 * x[1] * x[4] * x[6] * x[9] - 0.722 * x[1] * x[4] * x[6] * x[10] + 0.5119 * x[1] * x[4] * x[7] * x[8] + 0.586 * x[1] * x[4] * x[7] * x[9] - 0.5442 * x[1] * x[4] * x[7] * x[10] + 0.0562 * x[1] * x[4] * x[8] * x[9] - 0.7251 * x[1] * x[4] * x[8] * x[10] - 0.6521 * x[1] * x[4] * x[9] * x[10] - 0.7049 * x[1] * x[5] * x[6] * x[7] + 0.62 * x[1] * x[5] * x[6] * x[8] - 0.497 * x[1] * x[5] * x[6] * x[9] - 0.1799 * x[1] * x[5] * x[6] * x[10] + 0.9132 * x[1] * x[5] * x[7] * x[8] + 0.4395 * x[1] * x[5] * x[7] * x[9] + 0.6708 * x[1] * x[5] * x[7] * x[10] + 0.5537 * x[1] * x[5] * x[8] * x[9] + 0.0758 * x[1] * x[5] * x[8] * x[10] + 0.2226 * x[1] * x[5] * x[9] * x[10] + 0.3882 * x[1] * x[6] * x[7] * x[8] + 0.2014 * x[1] * x[6] * x[7] * x[9] - 0.8073 * x[1] * x[6] * x[7] * x[10] + 0.0984 * x[1] * x[6] * x[8] * x[9] - 0.4142 * x[1] * x[6] * x[8] * x[10] - 0.5883 * x[1] * x[6] * x[9] * x[10] + 0.6861 * x[1] * x[7] * x[8] * x[9] + 0.303 * x[1] * x[7] * x[8] * x[10] + 0.9262 * x[1] * x[7] * x[9] * x[10] + 0.2199 * x[1] * x[8] * x[9] * x[10] - 0.1922 * x[2] * x[3] * x[4] * x[5] - 0.7428 * x[2] * x[3] * x[4] * x[6] - 0.7244 * x[2] * x[3] * x[4] * x[7] - 0.5698 * x[2] * x[3] * x[4] * x[8] + 0.046 * x[2] * x[3] * x[4] * x[9] + 0.4195 * x[2] * x[3] * x[4] * x[10] + 0.0448 * x[2] * x[3] * x[5] * x[6] - 0.6311 * x[2] * x[3] * x[5] * x[7] + 0.7262 * x[2] * x[3] * x[5] * x[8] - 0.3714 * x[2] * x[3] * x[5] * x[9] - 0.9939 * x[2] * x[3] * x[5] * x[10] + 0.9992 * x[2] * x[3] * x[6] * x[7] + 0.7608 * x[2] * x[3] * x[6] * x[8] - 0.5125 * x[2] * x[3] * x[6] * x[9] + 0.0878 * x[2] * x[3] * x[6] * x[10] + 0.522 * x[2] * x[3] * x[7] * x[8] + 0.3632 * x[2] * x[3] * x[7] * x[9] - 0.1574 * x[2] * x[3] * x[7] * x[10] + 0.1895 * x[2] * x[3] * x[8] * x[9] - 0.1071 * x[2] * x[3] * x[8] * x[10] + 0.889 * x[2] * x[3] * x[9] * x[10] - 0.6673 * x[2] * x[4] * x[5] * x[6] + 0.9491 * x[2] * x[4] * x[5] * x[7] - 0.8262 * x[2] * x[4] * x[5] * x[8] - 0.6978 * x[2] * x[4] * x[5] * x[9] + 0.8198 * x[2] * x[4] * x[5] * x[10] - 0.5889 * x[2] * x[4] * x[6] * x[7] - 0.5569 * x[2] * x[4] * x[6] * x[8] - 0.7317 * x[2] * x[4] * x[6] * x[9] + 0.3949 * x[2] * x[4] * x[6] * x[10] + 0.9541 * x[2] * x[4] * x[7] * x[8] - 0.9943 * x[2] * x[4] * x[7] * x[9] - 0.0116 * x[2] * x[4] * x[7] * x[10] - 0.5047 * x[2] * x[4] * x[8] * x[9] + 0.8051 * x[2] * x[4] * x[8] * x[10] - 0.7914 * x[2] * x[4] * x[9] * x[10] + 0.5505 * x[2] * x[5] * x[6] * x[7] - 0.7908 * x[2] * x[5] * x[6] * x[8] + 0.2414 * x[2] * x[5] * x[6] * x[9] - 0.3313 * x[2] * x[5] * x[6] * x[10] + 0.9555 * x[2] * x[5] * x[7] * x[8] + 0.3839 * x[2] * x[5] * x[7] * x[9] + 0.6554 * x[2] * x[5] * x[7] * x[10] + 0.9363 * x[2] * x[5] * x[8] * x[9] - 0.4451 * x[2] * x[5] * x[8] * x[10] - 0.2679 * x[2] * x[5] * x[9] * x[10] - 0.6916 * x[2] * x[6] * x[7] * x[8] + 0.9618 * x[2] * x[6] * x[7] * x[9] + 0.8635 * x[2] * x[6] * x[7] * x[10] - 0.5314 * x[2] * x[6] * x[8] * x[9] - 0.7532 * x[2] * x[6] * x[8] * x[10] - 0.2676 * x[2] * x[6] * x[9] * x[10] + 0.6789 * x[2] * x[7] * x[8] * x[9] - 0.7484 * x[2] * x[7] * x[8] * x[10] + 0.9799 * x[2] * x[7] * x[9] * x[10] - 0.04 * x[2] * x[8] * x[9] * x[10] + 0.9229 * x[3] * x[4] * x[5] * x[6] + 0.9211 * x[3] * x[4] * x[5] * x[7] + 0.5065 * x[3] * x[4] * x[5] * x[8] + 0.2912 * x[3] * x[4] * x[5] * x[9] + 0.3298 * x[3] * x[4] * x[5] * x[10] + 0.7586 * x[3] * x[4] * x[6] * x[7] + 0.4593 * x[3] * x[4] * x[6] * x[8] + 0.3926 * x[3] * x[4] * x[6] * x[9] + 0.0687 * x[3] * x[4] * x[6] * x[10] + 0.4976 * x[3] * x[4] * x[7] * x[8] + 0.6535 * x[3] * x[4] * x[7] * x[9] - 0.9917 * x[3] * x[4] * x[7] * x[10] - 0.5502 * x[3] * x[4] * x[8] * x[9] - 0.1718 * x[3] * x[4] * x[8] * x[10] + 0.2573 * x[3] * x[4] * x[9] * x[10] - 0.9025 * x[3] * x[5] * x[6] * x[7] + 0.3264 * x[3] * x[5] * x[6] * x[8] - 0.6443 * x[3] * x[5] * x[6] * x[9] + 0.1642 * x[3] * x[5] * x[6] * x[10] + 0.9221 * x[3] * x[5] * x[7] * x[8] - 0.428 * x[3] * x[5] * x[7] * x[9] - 0.4399 * x[3] * x[5] * x[7] * x[10] + 0.7566 * x[3] * x[5] * x[8] * x[9] + 0.354 * x[3] * x[5] * x[8] * x[10] - 0.5276 * x[3] * x[5] * x[9] * x[10] - 0.6272 * x[3] * x[6] * x[7] * x[8] - 0.8758 * x[3] * x[6] * x[7] * x[9] - 0.6662 * x[3] * x[6] * x[7] * x[10] - 0.5727 * x[3] * x[6] * x[8] * x[9] - 0.1467 * x[3] * x[6] * x[8] * x[10] - 0.8066 * x[3] * x[6] * x[9] * x[10] - 0.53 * x[3] * x[7] * x[8] * x[9] - 0.7406 * x[3] * x[7] * x[8] * x[10] + 0.8858 * x[3] * x[7] * x[9] * x[10] - 0.3289 * x[3] * x[8] * x[9] * x[10] - 0.8604 * x[4] * x[5] * x[6] * x[7] - 0.0148 * x[4] * x[5] * x[6] * x[8] + 0.3933 * x[4] * x[5] * x[6] * x[9] + 0.4846 * x[4] * x[5] * x[6] * x[10] - 0.7567 * x[4] * x[5] * x[7] * x[8] + 0.083 * x[4] * x[5] * x[7] * x[9] - 0.0985 * x[4] * x[5] * x[7] * x[10] + 0.3703 * x[4] * x[5] * x[8] * x[9] + 0.6679 * x[4] * x[5] * x[8] * x[10] + 0.8643 * x[4] * x[5] * x[9] * x[10] + 0.533 * x[4] * x[6] * x[7] * x[8] + 0.1871 * x[4] * x[6] * x[7] * x[9] - 0.1905 * x[4] * x[6] * x[7] * x[10] + 0.9994 * x[4] * x[6] * x[8] * x[9] - 0.7306 * x[4] * x[6] * x[8] * x[10] - 0.2797 * x[4] * x[6] * x[9] * x[10] - 0.7742 * x[4] * x[7] * x[8] * x[9] + 0.2634 * x[4] * x[7] * x[8] * x[10] - 0.6882 * x[4] * x[7] * x[9] * x[10] - 0.1916 * x[4] * x[8] * x[9] * x[10] - 0.6292 * x[5] * x[6] * x[7] * x[8] + 0.3706 * x[5] * x[6] * x[7] * x[9] + 0.2252 * x[5] * x[6] * x[7] * x[10] - 0.5111 * x[5] * x[6] * x[8] * x[9] - 0.7106 * x[5] * x[6] * x[8] * x[10] + 0.436 * x[5] * x[6] * x[9] * x[10] + 0.6397 * x[5] * x[7] * x[8] * x[9] - 0.7626 * x[5] * x[7] * x[8] * x[10] - 0.7465 * x[5] * x[7] * x[9] * x[10] - 0.4273 * x[5] * x[8] * x[9] * x[10] + 0.9735 * x[6] * x[7] * x[8] * x[9] - 0.5091 * x[6] * x[7] * x[8] * x[10] - 0.0217 * x[6] * x[7] * x[9] * x[10] - 0.9406 * x[6] * x[8] * x[9] * x[10] - 0.5301 * x[7] * x[8] * x[9] * x[10] <= 38.337 ) e3 = replace_expr(e3, x) JuMP.add_nonlinear_constraint(m, e3) e4 = :( 0.802 * x[1] * x[2] - 0.8383 * x[1] * x[3] + 0.3569 * x[1] * x[4] + 0.0003 * x[1] * x[5] + 0.8089 * x[1] * x[6] - 0.875 * x[1] * x[7] + 0.4462 * x[1] * x[8] - 0.3338 * x[1] * x[9] + 0.1814 * x[1] * x[10] - 0.8771 * x[2] * x[3] - 0.9101 * x[2] * x[4] + 0.1635 * x[2] * x[5] - 0.1352 * x[2] * x[6] - 0.8026 * x[2] * x[7] + 0.9155 * x[2] * x[8] + 0.5442 * x[2] * x[9] - 0.7053 * x[2] * x[10] + 0.4455 * x[3] * x[4] + 0.9929 * x[3] * x[5] - 0.3529 * x[3] * x[6] - 0.8803 * x[3] * x[7] - 0.9694 * x[3] * x[8] + 0.7938 * x[3] * x[9] + 0.664 * x[3] * x[10] + 0.5083 * x[4] * x[5] - 0.3124 * x[4] * x[6] - 0.4061 * x[4] * x[7] + 0.0858 * x[4] * x[8] - 0.2714 * x[4] * x[9] - 0.8232 * x[4] * x[10] - 0.1146 * x[5] * x[6] + 0.9703 * x[5] * x[7] + 0.9858 * x[5] * x[8] + 0.859 * x[5] * x[9] + 0.0264 * x[5] * x[10] - 0.8325 * x[6] * x[7] - 0.2402 * x[6] * x[8] + 0.9962 * x[6] * x[9] - 0.612 * x[6] * x[10] - 0.7468 * x[7] * x[8] + 0.5066 * x[7] * x[9] + 0.5209 * x[7] * x[10] - 0.8096 * x[8] * x[9] + 0.2097 * x[8] * x[10] - 0.8223 * x[9] * x[10] + 0.8219 * x[1] + 0.8915 * x[2] + 0.4384 * x[3] + 0.0104 * x[4] - 0.6145 * x[5] + 0.3569 * x[6] - 0.0835 * x[7] - 0.1778 * x[8] + 0.1688 * x[9] - 0.6302 * x[10] + (-0.9893 * x[1] * x[2] * x[3]) - 0.5615 * x[1] * x[2] * x[4] + 0.7985 * x[1] * x[2] * x[5] + 0.1976 * x[1] * x[2] * x[6] - 0.1837 * x[1] * x[2] * x[7] - 0.7994 * x[1] * x[2] * x[8] - 0.7895 * x[1] * x[2] * x[9] + 0.146 * x[1] * x[2] * x[10] - 0.5227 * x[1] * x[3] * x[4] + 0.3006 * x[1] * x[3] * x[5] + 0.8038 * x[1] * x[3] * x[6] - 0.0596 * x[1] * x[3] * x[7] + 0.152 * x[1] * x[3] * x[8] + 0.5178 * x[1] * x[3] * x[9] - 0.1747 * x[1] * x[3] * x[10] + 0.9976 * x[1] * x[4] * x[5] + 0.1196 * x[1] * x[4] * x[6] - 0.5697 * x[1] * x[4] * x[7] - 0.8498 * x[1] * x[4] * x[8] - 0.6921 * x[1] * x[4] * x[9] - 0.0832 * x[1] * x[4] * x[10] + 0.7875 * x[1] * x[5] * x[6] + 0.2374 * x[1] * x[5] * x[7] + 0.2773 * x[1] * x[5] * x[8] + 0.8304 * x[1] * x[5] * x[9] - 0.2771 * x[1] * x[5] * x[10] + 0.8288 * x[1] * x[6] * x[7] - 0.6953 * x[1] * x[6] * x[8] + 0.9491 * x[1] * x[6] * x[9] - 0.1701 * x[1] * x[6] * x[10] + 0.4837 * x[1] * x[7] * x[8] - 0.9392 * x[1] * x[7] * x[9] - 0.0295 * x[1] * x[7] * x[10] + 0.8232 * x[1] * x[8] * x[9] + 0.8049 * x[1] * x[8] * x[10] + 0.8403 * x[1] * x[9] * x[10] + 0.0402 * x[2] * x[3] * x[4] + 0.4708 * x[2] * x[3] * x[5] + 0.653 * x[2] * x[3] * x[6] + 0.4072 * x[2] * x[3] * x[7] + 0.3477 * x[2] * x[3] * x[8] - 0.8469 * x[2] * x[3] * x[9] - 0.0643 * x[2] * x[3] * x[10] + 0.9855 * x[2] * x[4] * x[5] + 0.169 * x[2] * x[4] * x[6] + 0.1277 * x[2] * x[4] * x[7] + 0.1701 * x[2] * x[4] * x[8] - 0.2288 * x[2] * x[4] * x[9] + 0.6269 * x[2] * x[4] * x[10] - 0.165 * x[2] * x[5] * x[6] - 0.3328 * x[2] * x[5] * x[7] + 0.0711 * x[2] * x[5] * x[8] + 0.8548 * x[2] * x[5] * x[9] + 0.4886 * x[2] * x[5] * x[10] - 0.4103 * x[2] * x[6] * x[7] + 0.1394 * x[2] * x[6] * x[8] - 0.3792 * x[2] * x[6] * x[9] - 0.061 * x[2] * x[6] * x[10] - 0.6923 * x[2] * x[7] * x[8] + 0.194 * x[2] * x[7] * x[9] - 0.2253 * x[2] * x[7] * x[10] - 0.6197 * x[2] * x[8] * x[9] - 0.799 * x[2] * x[8] * x[10] - 0.9851 * x[2] * x[9] * x[10] - 0.164 * x[3] * x[4] * x[5] + 0.1448 * x[3] * x[4] * x[6] + 0.0185 * x[3] * x[4] * x[7] + 0.3829 * x[3] * x[4] * x[8] + 0.2687 * x[3] * x[4] * x[9] + 0.9428 * x[3] * x[4] * x[10] + 0.9418 * x[3] * x[5] * x[6] + 0.4694 * x[3] * x[5] * x[7] + 0.8523 * x[3] * x[5] * x[8] - 0.87 * x[3] * x[5] * x[9] - 0.5796 * x[3] * x[5] * x[10] - 0.486 * x[3] * x[6] * x[7] + 0.3746 * x[3] * x[6] * x[8] + 0.4788 * x[3] * x[6] * x[9] + 0.0586 * x[3] * x[6] * x[10] + 0.1473 * x[3] * x[7] * x[8] + 0.2498 * x[3] * x[7] * x[9] - 0.6388 * x[3] * x[7] * x[10] + 0.2472 * x[3] * x[8] * x[9] - 0.3687 * x[3] * x[8] * x[10] + 0.3536 * x[3] * x[9] * x[10] + 0.0072 * x[4] * x[5] * x[6] - 0.5806 * x[4] * x[5] * x[7] - 0.5058 * x[4] * x[5] * x[8] - 0.116 * x[4] * x[5] * x[9] + 0.191 * x[4] * x[5] * x[10] + 0.3699 * x[4] * x[6] * x[7] + 0.3731 * x[4] * x[6] * x[8] + 0.0031 * x[4] * x[6] * x[9] + 0.9294 * x[4] * x[6] * x[10] - 0.6047 * x[4] * x[7] * x[8] + 0.2348 * x[4] * x[7] * x[9] + 0.8324 * x[4] * x[7] * x[10] + 0.6608 * x[4] * x[8] * x[9] - 0.1673 * x[4] * x[8] * x[10] - 0.9519 * x[4] * x[9] * x[10] + 0.8066 * x[5] * x[6] * x[7] - 0.9313 * x[5] * x[6] * x[8] - 0.0297 * x[5] * x[6] * x[9] - 0.7382 * x[5] * x[6] * x[10] - 0.672 * x[5] * x[7] * x[8] + 0.3061 * x[5] * x[7] * x[9] - 0.1984 * x[5] * x[7] * x[10] - 0.8696 * x[5] * x[8] * x[9] - 0.5035 * x[5] * x[8] * x[10] + 0.2835 * x[5] * x[9] * x[10] + 0.2576 * x[6] * x[7] * x[8] - 0.5016 * x[6] * x[7] * x[9] - 0.738 * x[6] * x[7] * x[10] - 0.6402 * x[6] * x[8] * x[9] + 0.2333 * x[6] * x[8] * x[10] - 0.1863 * x[6] * x[9] * x[10] + 0.6045 * x[7] * x[8] * x[9] - 0.5819 * x[7] * x[8] * x[10] - 0.809 * x[7] * x[9] * x[10] - 0.3189 * x[8] * x[9] * x[10] + 0.8521 * x[1] * x[2] * x[3] * x[5] - 0.8164 * x[1] * x[2] * x[3] * x[4] + 0.4163 * x[1] * x[2] * x[3] * x[6] + 0.6625 * x[1] * x[2] * x[3] * x[7] + 0.6022 * x[1] * x[2] * x[3] * x[8] + 0.1782 * x[1] * x[2] * x[3] * x[9] + 0.63 * x[1] * x[2] * x[3] * x[10] + 0.4385 * x[1] * x[2] * x[4] * x[5] + 0.9963 * x[1] * x[2] * x[4] * x[6] + 0.8737 * x[1] * x[2] * x[4] * x[7] + 0.382 * x[1] * x[2] * x[4] * x[8] + 0.4417 * x[1] * x[2] * x[4] * x[9] + 0.2669 * x[1] * x[2] * x[4] * x[10] + 0.7712 * x[1] * x[2] * x[5] * x[6] + 0.5226 * x[1] * x[2] * x[5] * x[7] + 0.3681 * x[1] * x[2] * x[5] * x[8] + 0.7255 * x[1] * x[2] * x[5] * x[9] - 0.4059 * x[1] * x[2] * x[5] * x[10] + 0.9658 * x[1] * x[2] * x[6] * x[7] - 0.8057 * x[1] * x[2] * x[6] * x[8] + 0.2716 * x[1] * x[2] * x[6] * x[9] - 0.8667 * x[1] * x[2] * x[6] * x[10] - 0.6541 * x[1] * x[2] * x[7] * x[8] - 0.0723 * x[1] * x[2] * x[7] * x[9] - 0.1218 * x[1] * x[2] * x[7] * x[10] + 0.6082 * x[1] * x[2] * x[8] * x[9] - 0.1423 * x[1] * x[2] * x[8] * x[10] + 0.5249 * x[1] * x[2] * x[9] * x[10] + 0.4167 * x[1] * x[3] * x[4] * x[5] - 0.507 * x[1] * x[3] * x[4] * x[6] + 0.8024 * x[1] * x[3] * x[4] * x[7] - 0.8732 * x[1] * x[3] * x[4] * x[8] - 0.9641 * x[1] * x[3] * x[4] * x[9] + 0.8948 * x[1] * x[3] * x[4] * x[10] - 0.0228 * x[1] * x[3] * x[5] * x[6] - 0.2308 * x[1] * x[3] * x[5] * x[7] - 0.8365 * x[1] * x[3] * x[5] * x[8] - 0.0407 * x[1] * x[3] * x[5] * x[9] - 0.6009 * x[1] * x[3] * x[5] * x[10] - 0.2916 * x[1] * x[3] * x[6] * x[7] - 0.1374 * x[1] * x[3] * x[6] * x[8] + 0.8125 * x[1] * x[3] * x[6] * x[9] + 0.8725 * x[1] * x[3] * x[6] * x[10] + 0.4909 * x[1] * x[3] * x[7] * x[8] + 0.9356 * x[1] * x[3] * x[7] * x[9] + 0.7571 * x[1] * x[3] * x[7] * x[10] - 0.4834 * x[1] * x[3] * x[8] * x[9] + 0.5875 * x[1] * x[3] * x[8] * x[10] - 0.8418 * x[1] * x[3] * x[9] * x[10] - 0.9637 * x[1] * x[4] * x[5] * x[6] - 0.3318 * x[1] * x[4] * x[5] * x[7] - 0.3304 * x[1] * x[4] * x[5] * x[8] + 0.0086 * x[1] * x[4] * x[5] * x[9] - 0.2382 * x[1] * x[4] * x[5] * x[10] + 0.7865 * x[1] * x[4] * x[6] * x[7] - 0.4775 * x[1] * x[4] * x[6] * x[8] - 0.0112 * x[1] * x[4] * x[6] * x[9] + 0.4793 * x[1] * x[4] * x[6] * x[10] + 0.2361 * x[1] * x[4] * x[7] * x[8] + 0.3537 * x[1] * x[4] * x[7] * x[9] + 0.4693 * x[1] * x[4] * x[7] * x[10] + 0.7316 * x[1] * x[4] * x[8] * x[9] + 0.3182 * x[1] * x[4] * x[8] * x[10] + 0.8041 * x[1] * x[4] * x[9] * x[10] - 0.4561 * x[1] * x[5] * x[6] * x[7] + 0.8676 * x[1] * x[5] * x[6] * x[8] - 0.7196 * x[1] * x[5] * x[6] * x[9] - 0.3273 * x[1] * x[5] * x[6] * x[10] - 0.0517 * x[1] * x[5] * x[7] * x[8] - 0.9975 * x[1] * x[5] * x[7] * x[9] - 0.5365 * x[1] * x[5] * x[7] * x[10] + 0.9168 * x[1] * x[5] * x[8] * x[9] + 0.7715 * x[1] * x[5] * x[8] * x[10] + 0.1129 * x[1] * x[5] * x[9] * x[10] - 0.3254 * x[1] * x[6] * x[7] * x[8] - 0.6267 * x[1] * x[6] * x[7] * x[9] - 0.2341 * x[1] * x[6] * x[7] * x[10] + 0.332 * x[1] * x[6] * x[8] * x[9] + 0.8281 * x[1] * x[6] * x[8] * x[10] - 0.1747 * x[1] * x[6] * x[9] * x[10] + 0.9767 * x[1] * x[7] * x[8] * x[9] - 0.6643 * x[1] * x[7] * x[8] * x[10] - 0.7506 * x[1] * x[7] * x[9] * x[10] + 0.0168 * x[1] * x[8] * x[9] * x[10] - 0.0513 * x[2] * x[3] * x[4] * x[5] - 0.6878 * x[2] * x[3] * x[4] * x[6] - 0.0265 * x[2] * x[3] * x[4] * x[7] + 0.6138 * x[2] * x[3] * x[4] * x[8] + 0.9757 * x[2] * x[3] * x[4] * x[9] - 0.8293 * x[2] * x[3] * x[4] * x[10] + 0.9219 * x[2] * x[3] * x[5] * x[6] + 0.403 * x[2] * x[3] * x[5] * x[7] - 0.0383 * x[2] * x[3] * x[5] * x[8] - 0.1156 * x[2] * x[3] * x[5] * x[9] - 0.9505 * x[2] * x[3] * x[5] * x[10] - 0.5166 * x[2] * x[3] * x[6] * x[7] - 0.7652 * x[2] * x[3] * x[6] * x[8] - 0.9915 * x[2] * x[3] * x[6] * x[9] - 0.477 * x[2] * x[3] * x[6] * x[10] + 0.1948 * x[2] * x[3] * x[7] * x[8] - 0.9361 * x[2] * x[3] * x[7] * x[9] - 0.0442 * x[2] * x[3] * x[7] * x[10] - 0.4517 * x[2] * x[3] * x[8] * x[9] - 0.8448 * x[2] * x[3] * x[8] * x[10] - 0.8462 * x[2] * x[3] * x[9] * x[10] + 0.7179 * x[2] * x[4] * x[5] * x[6] + 0.1438 * x[2] * x[4] * x[5] * x[7] - 0.831 * x[2] * x[4] * x[5] * x[8] + 0.1377 * x[2] * x[4] * x[5] * x[9] + 0.2404 * x[2] * x[4] * x[5] * x[10] + 0.4776 * x[2] * x[4] * x[6] * x[7] + 0.9781 * x[2] * x[4] * x[6] * x[8] - 0.4061 * x[2] * x[4] * x[6] * x[9] - 0.8912 * x[2] * x[4] * x[6] * x[10] + 0.9125 * x[2] * x[4] * x[7] * x[8] + 0.706 * x[2] * x[4] * x[7] * x[9] - 0.8906 * x[2] * x[4] * x[7] * x[10] + 0.942 * x[2] * x[4] * x[8] * x[9] - 0.0261 * x[2] * x[4] * x[8] * x[10] - 0.068 * x[2] * x[4] * x[9] * x[10] - 0.847 * x[2] * x[5] * x[6] * x[7] + 0.5746 * x[2] * x[5] * x[6] * x[8] - 0.3526 * x[2] * x[5] * x[6] * x[9] + 0.4389 * x[2] * x[5] * x[6] * x[10] + 0.4542 * x[2] * x[5] * x[7] * x[8] + 0.0367 * x[2] * x[5] * x[7] * x[9] - 0.3709 * x[2] * x[5] * x[7] * x[10] + 0.8193 * x[2] * x[5] * x[8] * x[9] + 0.5633 * x[2] * x[5] * x[8] * x[10] - 0.0382 * x[2] * x[5] * x[9] * x[10] - 0.959 * x[2] * x[6] * x[7] * x[8] - 0.7036 * x[2] * x[6] * x[7] * x[9] + 0.7485 * x[2] * x[6] * x[7] * x[10] - 0.0868 * x[2] * x[6] * x[8] * x[9] - 0.6044 * x[2] * x[6] * x[8] * x[10] + 0.3054 * x[2] * x[6] * x[9] * x[10] + 0.6064 * x[2] * x[7] * x[8] * x[9] - 0.5288 * x[2] * x[7] * x[8] * x[10] - 0.0285 * x[2] * x[7] * x[9] * x[10] - 0.5481 * x[2] * x[8] * x[9] * x[10] - 0.7647 * x[3] * x[4] * x[5] * x[6] + 0.6671 * x[3] * x[4] * x[5] * x[7] - 0.0921 * x[3] * x[4] * x[5] * x[8] + 0.7822 * x[3] * x[4] * x[5] * x[9] - 0.688 * x[3] * x[4] * x[5] * x[10] - 0.623 * x[3] * x[4] * x[6] * x[7] - 0.6958 * x[3] * x[4] * x[6] * x[8] + 0.2072 * x[3] * x[4] * x[6] * x[9] + 0.8573 * x[3] * x[4] * x[6] * x[10] + 0.9353 * x[3] * x[4] * x[7] * x[8] - 0.7581 * x[3] * x[4] * x[7] * x[9] - 0.6678 * x[3] * x[4] * x[7] * x[10] + 0.7244 * x[3] * x[4] * x[8] * x[9] + 0.497 * x[3] * x[4] * x[8] * x[10] + 0.8841 * x[3] * x[4] * x[9] * x[10] - 0.419 * x[3] * x[5] * x[6] * x[7] - 0.5639 * x[3] * x[5] * x[6] * x[8] + 0.3384 * x[3] * x[5] * x[6] * x[9] + 0.8517 * x[3] * x[5] * x[6] * x[10] + 0.2487 * x[3] * x[5] * x[7] * x[8] + 0.352 * x[3] * x[5] * x[7] * x[9] - 0.9956 * x[3] * x[5] * x[7] * x[10] + 0.1963 * x[3] * x[5] * x[8] * x[9] + 0.6505 * x[3] * x[5] * x[8] * x[10] + 0.8868 * x[3] * x[5] * x[9] * x[10] + 0.064 * x[3] * x[6] * x[7] * x[8] - 0.2306 * x[3] * x[6] * x[7] * x[9] + 0.3456 * x[3] * x[6] * x[7] * x[10] - 0.0124 * x[3] * x[6] * x[8] * x[9] - 0.7644 * x[3] * x[6] * x[8] * x[10] - 0.9407 * x[3] * x[6] * x[9] * x[10] - 0.5041 * x[3] * x[7] * x[8] * x[9] - 0.4612 * x[3] * x[7] * x[8] * x[10] + 0.6372 * x[3] * x[7] * x[9] * x[10] - 0.9423 * x[3] * x[8] * x[9] * x[10] + 0.4769 * x[4] * x[5] * x[6] * x[7] + 0.6691 * x[4] * x[5] * x[6] * x[8] - 0.6518 * x[4] * x[5] * x[6] * x[9] + 0.5892 * x[4] * x[5] * x[6] * x[10] + 0.1282 * x[4] * x[5] * x[7] * x[8] - 0.0097 * x[4] * x[5] * x[7] * x[9] - 0.0037 * x[4] * x[5] * x[7] * x[10] - 0.4974 * x[4] * x[5] * x[8] * x[9] - 0.1368 * x[4] * x[5] * x[8] * x[10] - 0.663 * x[4] * x[5] * x[9] * x[10] - 0.3471 * x[4] * x[6] * x[7] * x[8] - 0.9665 * x[4] * x[6] * x[7] * x[9] - 0.6331 * x[4] * x[6] * x[7] * x[10] - 0.0998 * x[4] * x[6] * x[8] * x[9] + 0.9348 * x[4] * x[6] * x[8] * x[10] - 0.5585 * x[4] * x[6] * x[9] * x[10] - 0.1588 * x[4] * x[7] * x[8] * x[9] + 0.3535 * x[4] * x[7] * x[8] * x[10] - 0.5013 * x[4] * x[7] * x[9] * x[10] + 0.5619 * x[4] * x[8] * x[9] * x[10] + 0.6594 * x[5] * x[6] * x[7] * x[8] - 0.6765 * x[5] * x[6] * x[7] * x[9] + 0.8412 * x[5] * x[6] * x[7] * x[10] - 0.6171 * x[5] * x[6] * x[8] * x[9] + 0.5953 * x[5] * x[6] * x[8] * x[10] + 0.9679 * x[5] * x[6] * x[9] * x[10] + 0.7684 * x[5] * x[7] * x[8] * x[9] + 0.3959 * x[5] * x[7] * x[8] * x[10] + 0.61 * x[5] * x[7] * x[9] * x[10] + 0.6235 * x[5] * x[8] * x[9] * x[10] - 0.2316 * x[6] * x[7] * x[8] * x[9] + 0.2738 * x[6] * x[7] * x[8] * x[10] - 0.5261 * x[6] * x[7] * x[9] * x[10] + 0.6011 * x[6] * x[8] * x[9] * x[10] + 0.421 * x[7] * x[8] * x[9] * x[10] <= 52.864 ) e4 = replace_expr(e4, x) JuMP.add_nonlinear_constraint(m, e4) e5 = :( (-0.1375 * x[1] * x[2]) - 0.0134 * x[1] * x[3] - 0.7802 * x[1] * x[4] + 0.1529 * x[1] * x[5] - 0.7427 * x[1] * x[6] + 0.034 * x[1] * x[7] - 0.1986 * x[1] * x[8] + 0.1794 * x[1] * x[9] - 0.2451 * x[1] * x[10] - 0.1578 * x[2] * x[3] + 0.2522 * x[2] * x[4] + 0.562 * x[2] * x[5] + 0.9868 * x[2] * x[6] + 0.0232 * x[2] * x[7] + 0.5897 * x[2] * x[8] + 0.1998 * x[2] * x[9] - 0.9026 * x[2] * x[10] + 0.5954 * x[3] * x[4] - 0.0184 * x[3] * x[5] - 0.9132 * x[3] * x[6] - 0.0269 * x[3] * x[7] + 0.5776 * x[3] * x[8] + 0.2437 * x[3] * x[9] - 0.9638 * x[3] * x[10] + 0.4683 * x[4] * x[5] - 0.0524 * x[4] * x[6] + 0.865 * x[4] * x[7] - 0.0714 * x[4] * x[8] - 0.5196 * x[4] * x[9] + 0.2146 * x[4] * x[10] + 0.2514 * x[5] * x[6] - 0.9667 * x[5] * x[7] - 0.328 * x[5] * x[8] + 0.185 * x[5] * x[9] - 0.1588 * x[5] * x[10] - 0.6343 * x[6] * x[7] + 0.7847 * x[6] * x[8] + 0.2423 * x[6] * x[9] - 0.357 * x[6] * x[10] - 0.2066 * x[7] * x[8] - 0.1247 * x[7] * x[9] - 0.9086 * x[7] * x[10] - 0.4053 * x[8] * x[9] - 0.6526 * x[8] * x[10] - 0.7753 * x[9] * x[10] + 0.6139 * x[1] + 0.0606 * x[2] - 0.4917 * x[3] + 0.82 * x[4] - 0.8487 * x[5] - 0.4958 * x[6] - 0.4949 * x[7] + 0.7862 * x[8] + 0.7091 * x[9] - 0.6288 * x[10] + 0.496 * x[1] * x[2] * x[3] - 0.6663 * x[1] * x[2] * x[4] + 0.2055 * x[1] * x[2] * x[5] - 0.1878 * x[1] * x[2] * x[6] + 0.5555 * x[1] * x[2] * x[7] + 0.0953 * x[1] * x[2] * x[8] - 0.3364 * x[1] * x[2] * x[9] - 0.0269 * x[1] * x[2] * x[10] + 0.958 * x[1] * x[3] * x[4] - 0.871 * x[1] * x[3] * x[5] - 0.3226 * x[1] * x[3] * x[6] - 0.8197 * x[1] * x[3] * x[7] - 0.1814 * x[1] * x[3] * x[8] - 0.8487 * x[1] * x[3] * x[9] + 0.2095 * x[1] * x[3] * x[10] - 0.2767 * x[1] * x[4] * x[5] - 0.3641 * x[1] * x[4] * x[6] - 0.0245 * x[1] * x[4] * x[7] + 0.4568 * x[1] * x[4] * x[8] + 0.3128 * x[1] * x[4] * x[9] + 0.4853 * x[1] * x[4] * x[10] + 0.9152 * x[1] * x[5] * x[6] - 0.5344 * x[1] * x[5] * x[7] + 0.9609 * x[1] * x[5] * x[8] + 0.1761 * x[1] * x[5] * x[9] + 0.344 * x[1] * x[5] * x[10] - 0.3941 * x[1] * x[6] * x[7] + 0.8352 * x[1] * x[6] * x[8] - 0.8145 * x[1] * x[6] * x[9] + 0.4713 * x[1] * x[6] * x[10] - 0.2967 * x[1] * x[7] * x[8] + 0.1227 * x[1] * x[7] * x[9] + 0.6128 * x[1] * x[7] * x[10] - 0.5156 * x[1] * x[8] * x[9] - 0.1357 * x[1] * x[8] * x[10] + 0.4391 * x[1] * x[9] * x[10] - 0.916 * x[2] * x[3] * x[4] - 0.9986 * x[2] * x[3] * x[5] + 0.3863 * x[2] * x[3] * x[6] - 0.0975 * x[2] * x[3] * x[7] + 0.8211 * x[2] * x[3] * x[8] + 0.6467 * x[2] * x[3] * x[9] + 0.054 * x[2] * x[3] * x[10] + 0.0186 * x[2] * x[4] * x[5] + 0.3056 * x[2] * x[4] * x[6] + 0.6154 * x[2] * x[4] * x[7] + 0.0074 * x[2] * x[4] * x[8] + 0.4949 * x[2] * x[4] * x[9] + 0.6723 * x[2] * x[4] * x[10] + 0.3352 * x[2] * x[5] * x[6] + 0.0008 * x[2] * x[5] * x[7] + 0.5953 * x[2] * x[5] * x[8] - 0.6033 * x[2] * x[5] * x[9] + 0.5045 * x[2] * x[5] * x[10] - 0.269 * x[2] * x[6] * x[7] + 0.6495 * x[2] * x[6] * x[8] + 0.8248 * x[2] * x[6] * x[9] - 0.6363 * x[2] * x[6] * x[10] + 0.6394 * x[2] * x[7] * x[8] + 0.1078 * x[2] * x[7] * x[9] + 0.8161 * x[2] * x[7] * x[10] - 0.4037 * x[2] * x[8] * x[9] + 0.2088 * x[2] * x[8] * x[10] - 0.6234 * x[2] * x[9] * x[10] - 0.5131 * x[3] * x[4] * x[5] - 0.3159 * x[3] * x[4] * x[6] - 0.3376 * x[3] * x[4] * x[7] - 0.8348 * x[3] * x[4] * x[8] - 0.4805 * x[3] * x[4] * x[9] + 0.8075 * x[3] * x[4] * x[10] + 0.1383 * x[3] * x[5] * x[6] - 0.8913 * x[3] * x[5] * x[7] - 0.4103 * x[3] * x[5] * x[8] + 0.4252 * x[3] * x[5] * x[9] - 0.7663 * x[3] * x[5] * x[10] - 0.9546 * x[3] * x[6] * x[7] + 0.1664 * x[3] * x[6] * x[8] - 0.1357 * x[3] * x[6] * x[9] + 0.843 * x[3] * x[6] * x[10] - 0.4141 * x[3] * x[7] * x[8] + 0.9824 * x[3] * x[7] * x[9] + 0.8706 * x[3] * x[7] * x[10] + 0.3098 * x[3] * x[8] * x[9] - 0.8453 * x[3] * x[8] * x[10] + 0.4691 * x[3] * x[9] * x[10] - 0.4006 * x[4] * x[5] * x[6] + 0.3848 * x[4] * x[5] * x[7] + 0.9792 * x[4] * x[5] * x[8] - 0.4612 * x[4] * x[5] * x[9] - 0.9516 * x[4] * x[5] * x[10] - 0.4543 * x[4] * x[6] * x[7] + 0.5378 * x[4] * x[6] * x[8] - 0.8641 * x[4] * x[6] * x[9] + 0.6423 * x[4] * x[6] * x[10] - 0.8484 * x[4] * x[7] * x[8] - 0.3092 * x[4] * x[7] * x[9] + 0.6513 * x[4] * x[7] * x[10] + 0.0055 * x[4] * x[8] * x[9] + 0.0029 * x[4] * x[8] * x[10] + 0.9821 * x[4] * x[9] * x[10] + 0.477 * x[5] * x[6] * x[7] + 0.9873 * x[5] * x[6] * x[8] + 0.2413 * x[5] * x[6] * x[9] + 0.3671 * x[5] * x[6] * x[10] - 0.2025 * x[5] * x[7] * x[8] - 0.5689 * x[5] * x[7] * x[9] + 0.6425 * x[5] * x[7] * x[10] + 0.4043 * x[5] * x[8] * x[9] - 0.2493 * x[5] * x[8] * x[10] - 0.4849 * x[5] * x[9] * x[10] + 0.3103 * x[6] * x[7] * x[8] - 0.2523 * x[6] * x[7] * x[9] + 0.7611 * x[6] * x[7] * x[10] + 0.3698 * x[6] * x[8] * x[9] - 0.8896 * x[6] * x[8] * x[10] + 0.7634 * x[6] * x[9] * x[10] - 0.3524 * x[7] * x[8] * x[9] - 0.7996 * x[7] * x[8] * x[10] + 0.4739 * x[7] * x[9] * x[10] + 0.5203 * x[8] * x[9] * x[10] + 0.8851 * x[1] * x[2] * x[3] * x[4] + 0.9515 * x[1] * x[2] * x[3] * x[5] - 0.0604 * x[1] * x[2] * x[3] * x[6] - 0.8915 * x[1] * x[2] * x[3] * x[7] - 0.0968 * x[1] * x[2] * x[3] * x[8] - 0.5954 * x[1] * x[2] * x[3] * x[9] - 0.902 * x[1] * x[2] * x[3] * x[10] + 0.9315 * x[1] * x[2] * x[4] * x[5] + 0.4294 * x[1] * x[2] * x[4] * x[6] + 0.7398 * x[1] * x[2] * x[4] * x[7] - 0.6759 * x[1] * x[2] * x[4] * x[8] - 0.0166 * x[1] * x[2] * x[4] * x[9] + 0.3176 * x[1] * x[2] * x[4] * x[10] - 0.434 * x[1] * x[2] * x[5] * x[6] - 0.8219 * x[1] * x[2] * x[5] * x[7] - 0.9323 * x[1] * x[2] * x[5] * x[8] - 0.2384 * x[1] * x[2] * x[5] * x[9] + 0.2604 * x[1] * x[2] * x[5] * x[10] + 0.4567 * x[1] * x[2] * x[6] * x[7] + 0.7508 * x[1] * x[2] * x[6] * x[8] + 0.1384 * x[1] * x[2] * x[6] * x[9] - 0.5557 * x[1] * x[2] * x[6] * x[10] - 0.2385 * x[1] * x[2] * x[7] * x[8] + 0.0199 * x[1] * x[2] * x[7] * x[9] + 0.7632 * x[1] * x[2] * x[7] * x[10] - 0.9947 * x[1] * x[2] * x[8] * x[9] - 0.3877 * x[1] * x[2] * x[8] * x[10] + 0.8177 * x[1] * x[2] * x[9] * x[10] - 0.3725 * x[1] * x[3] * x[4] * x[5] - 0.3487 * x[1] * x[3] * x[4] * x[6] - 0.8521 * x[1] * x[3] * x[4] * x[7] + 0.7201 * x[1] * x[3] * x[4] * x[8] - 0.9411 * x[1] * x[3] * x[4] * x[9] - 0.6075 * x[1] * x[3] * x[4] * x[10] + 0.4446 * x[1] * x[3] * x[5] * x[6] - 0.6889 * x[1] * x[3] * x[5] * x[7] + 0.5368 * x[1] * x[3] * x[5] * x[8] + 0.9675 * x[1] * x[3] * x[5] * x[9] - 0.1386 * x[1] * x[3] * x[5] * x[10] - 0.4474 * x[1] * x[3] * x[6] * x[7] - 0.8875 * x[1] * x[3] * x[6] * x[8] - 0.7171 * x[1] * x[3] * x[6] * x[9] - 0.2179 * x[1] * x[3] * x[6] * x[10] - 0.317 * x[1] * x[3] * x[7] * x[8] - 0.0332 * x[1] * x[3] * x[7] * x[9] - 0.625 * x[1] * x[3] * x[7] * x[10] + 0.2913 * x[1] * x[3] * x[8] * x[9] + 0.0755 * x[1] * x[3] * x[8] * x[10] - 0.0178 * x[1] * x[3] * x[9] * x[10] - 0.215 * x[1] * x[4] * x[5] * x[6] - 0.7588 * x[1] * x[4] * x[5] * x[7] + 0.2416 * x[1] * x[4] * x[5] * x[8] - 0.1383 * x[1] * x[4] * x[5] * x[9] + 0.2175 * x[1] * x[4] * x[5] * x[10] - 0.5311 * x[1] * x[4] * x[6] * x[7] - 0.6322 * x[1] * x[4] * x[6] * x[8] - 0.8211 * x[1] * x[4] * x[6] * x[9] - 0.2421 * x[1] * x[4] * x[6] * x[10] - 0.9794 * x[1] * x[4] * x[7] * x[8] + 0.6866 * x[1] * x[4] * x[7] * x[9] + 0.144 * x[1] * x[4] * x[7] * x[10] + 0.935 * x[1] * x[4] * x[8] * x[9] - 0.7224 * x[1] * x[4] * x[8] * x[10] - 0.79 * x[1] * x[4] * x[9] * x[10] - 0.6261 * x[1] * x[5] * x[6] * x[7] - 0.59 * x[1] * x[5] * x[6] * x[8] + 0.8708 * x[1] * x[5] * x[6] * x[9] + 0.5423 * x[1] * x[5] * x[6] * x[10] + 0.3356 * x[1] * x[5] * x[7] * x[8] + 0.142 * x[1] * x[5] * x[7] * x[9] + 0.5119 * x[1] * x[5] * x[7] * x[10] + 0.7599 * x[1] * x[5] * x[8] * x[9] - 0.4022 * x[1] * x[5] * x[8] * x[10] + 0.4446 * x[1] * x[5] * x[9] * x[10] - 0.8166 * x[1] * x[6] * x[7] * x[8] + 0.6446 * x[1] * x[6] * x[7] * x[9] - 0.1284 * x[1] * x[6] * x[7] * x[10] - 0.3651 * x[1] * x[6] * x[8] * x[9] - 0.2567 * x[1] * x[6] * x[8] * x[10] + 0.1421 * x[1] * x[6] * x[9] * x[10] - 0.8825 * x[1] * x[7] * x[8] * x[9] - 0.6058 * x[1] * x[7] * x[8] * x[10] + 0.503 * x[1] * x[7] * x[9] * x[10] - 0.0462 * x[1] * x[8] * x[9] * x[10] - 0.717 * x[2] * x[3] * x[4] * x[5] + 0.0253 * x[2] * x[3] * x[4] * x[6] - 0.9476 * x[2] * x[3] * x[4] * x[7] - 0.3171 * x[2] * x[3] * x[4] * x[8] + 0.5691 * x[2] * x[3] * x[4] * x[9] - 0.3612 * x[2] * x[3] * x[4] * x[10] + 0.0488 * x[2] * x[3] * x[5] * x[6] + 0.423 * x[2] * x[3] * x[5] * x[7] + 0.2762 * x[2] * x[3] * x[5] * x[8] + 0.0221 * x[2] * x[3] * x[5] * x[9] + 0.3975 * x[2] * x[3] * x[5] * x[10] - 0.5281 * x[2] * x[3] * x[6] * x[7] - 0.722 * x[2] * x[3] * x[6] * x[8] - 0.1433 * x[2] * x[3] * x[6] * x[9] + 0.1957 * x[2] * x[3] * x[6] * x[10] + 0.7882 * x[2] * x[3] * x[7] * x[8] + 0.9988 * x[2] * x[3] * x[7] * x[9] + 0.8552 * x[2] * x[3] * x[7] * x[10] + 0.3681 * x[2] * x[3] * x[8] * x[9] - 0.6187 * x[2] * x[3] * x[8] * x[10] - 0.2208 * x[2] * x[3] * x[9] * x[10] - 0.8222 * x[2] * x[4] * x[5] * x[6] + 0.3944 * x[2] * x[4] * x[5] * x[7] + 0.4808 * x[2] * x[4] * x[5] * x[8] - 0.8075 * x[2] * x[4] * x[5] * x[9] - 0.8579 * x[2] * x[4] * x[5] * x[10] - 0.5665 * x[2] * x[4] * x[6] * x[7] - 0.895 * x[2] * x[4] * x[6] * x[8] - 0.3975 * x[2] * x[4] * x[6] * x[9] + 0.4934 * x[2] * x[4] * x[6] * x[10] + 0.2624 * x[2] * x[4] * x[7] * x[8] + 0.2931 * x[2] * x[4] * x[7] * x[9] - 0.8108 * x[2] * x[4] * x[7] * x[10] - 0.6769 * x[2] * x[4] * x[8] * x[9] - 0.2571 * x[2] * x[4] * x[8] * x[10] + 0.1818 * x[2] * x[4] * x[9] * x[10] - 0.5706 * x[2] * x[5] * x[6] * x[7] + 0.6166 * x[2] * x[5] * x[6] * x[8] - 0.7727 * x[2] * x[5] * x[6] * x[9] - 0.2887 * x[2] * x[5] * x[6] * x[10] - 0.6625 * x[2] * x[5] * x[7] * x[8] - 0.4673 * x[2] * x[5] * x[7] * x[9] + 0.9985 * x[2] * x[5] * x[7] * x[10] - 0.0513 * x[2] * x[5] * x[8] * x[9] - 0.243 * x[2] * x[5] * x[8] * x[10] + 0.9283 * x[2] * x[5] * x[9] * x[10] - 0.9095 * x[2] * x[6] * x[7] * x[8] + 0.0583 * x[2] * x[6] * x[7] * x[9] + 0.823 * x[2] * x[6] * x[7] * x[10] - 0.5969 * x[2] * x[6] * x[8] * x[9] + 0.8222 * x[2] * x[6] * x[8] * x[10] - 0.0405 * x[2] * x[6] * x[9] * x[10] - 0.131 * x[2] * x[7] * x[8] * x[9] - 0.3485 * x[2] * x[7] * x[8] * x[10] + 0.8998 * x[2] * x[7] * x[9] * x[10] - 0.2805 * x[2] * x[8] * x[9] * x[10] + 0.5217 * x[3] * x[4] * x[5] * x[6] - 0.933 * x[3] * x[4] * x[5] * x[7] + 0.9836 * x[3] * x[4] * x[5] * x[8] - 0.9513 * x[3] * x[4] * x[5] * x[9] - 0.9415 * x[3] * x[4] * x[5] * x[10] - 0.4551 * x[3] * x[4] * x[6] * x[7] + 0.4972 * x[3] * x[4] * x[6] * x[8] - 0.429 * x[3] * x[4] * x[6] * x[9] - 0.5465 * x[3] * x[4] * x[6] * x[10] - 0.1411 * x[3] * x[4] * x[7] * x[8] + 0.5444 * x[3] * x[4] * x[7] * x[9] + 0.1779 * x[3] * x[4] * x[7] * x[10] + 0.0402 * x[3] * x[4] * x[8] * x[9] - 0.9732 * x[3] * x[4] * x[8] * x[10] - 0.3496 * x[3] * x[4] * x[9] * x[10] - 0.2575 * x[3] * x[5] * x[6] * x[7] + 0.6694 * x[3] * x[5] * x[6] * x[8] - 0.4773 * x[3] * x[5] * x[6] * x[9] + 0.4754 * x[3] * x[5] * x[6] * x[10] - 0.9142 * x[3] * x[5] * x[7] * x[8] + 0.6845 * x[3] * x[5] * x[7] * x[9] - 0.7219 * x[3] * x[5] * x[7] * x[10] + 0.7798 * x[3] * x[5] * x[8] * x[9] + 0.0733 * x[3] * x[5] * x[8] * x[10] - 0.7376 * x[3] * x[5] * x[9] * x[10] + 0.0256 * x[3] * x[6] * x[7] * x[8] - 0.2386 * x[3] * x[6] * x[7] * x[9] + 0.8016 * x[3] * x[6] * x[7] * x[10] + 0.6794 * x[3] * x[6] * x[8] * x[9] + 0.6011 * x[3] * x[6] * x[8] * x[10] - 0.1622 * x[3] * x[6] * x[9] * x[10] - 0.0369 * x[3] * x[7] * x[8] * x[9] - 0.5992 * x[3] * x[7] * x[8] * x[10] + 0.9241 * x[3] * x[7] * x[9] * x[10] + 0.9873 * x[3] * x[8] * x[9] * x[10] + 0.5992 * x[4] * x[5] * x[6] * x[7] + 0.8133 * x[4] * x[5] * x[6] * x[8] + 0.4239 * x[4] * x[5] * x[6] * x[9] - 0.1981 * x[4] * x[5] * x[6] * x[10] + 0.5006 * x[4] * x[5] * x[7] * x[8] - 0.5385 * x[4] * x[5] * x[7] * x[9] + 0.1593 * x[4] * x[5] * x[7] * x[10] - 0.0871 * x[4] * x[5] * x[8] * x[9] - 0.9382 * x[4] * x[5] * x[8] * x[10] - 0.0148 * x[4] * x[5] * x[9] * x[10] - 0.4904 * x[4] * x[6] * x[7] * x[8] + 0.5096 * x[4] * x[6] * x[7] * x[9] - 0.4809 * x[4] * x[6] * x[7] * x[10] - 0.4848 * x[4] * x[6] * x[8] * x[9] + 0.3062 * x[4] * x[6] * x[8] * x[10] + 0.9318 * x[4] * x[6] * x[9] * x[10] - 0.1853 * x[4] * x[7] * x[8] * x[9] + 0.5946 * x[4] * x[7] * x[8] * x[10] - 0.9998 * x[4] * x[7] * x[9] * x[10] + 0.054 * x[4] * x[8] * x[9] * x[10] + 0.9006 * x[5] * x[6] * x[7] * x[8] - 0.322 * x[5] * x[6] * x[7] * x[9] - 0.4127 * x[5] * x[6] * x[7] * x[10] - 0.6934 * x[5] * x[6] * x[8] * x[9] + 0.408 * x[5] * x[6] * x[8] * x[10] - 0.6923 * x[5] * x[6] * x[9] * x[10] - 0.0869 * x[5] * x[7] * x[8] * x[9] - 0.0219 * x[5] * x[7] * x[8] * x[10] + 0.4814 * x[5] * x[7] * x[9] * x[10] - 0.0782 * x[5] * x[8] * x[9] * x[10] - 0.3978 * x[6] * x[7] * x[8] * x[9] - 0.0586 * x[6] * x[7] * x[8] * x[10] + 0.8491 * x[6] * x[7] * x[9] * x[10] - 0.9975 * x[6] * x[8] * x[9] * x[10] + 0.5027 * x[7] * x[8] * x[9] * x[10] <= 85.414 ) e5 = replace_expr(e5, x) JuMP.add_nonlinear_constraint(m, e5) e6 = :( (-0.4481 * x[1] * x[2]) - 0.0269 * x[1] * x[3] - 0.1364 * x[1] * x[4] - 0.9192 * x[1] * x[5] + 0.5189 * x[1] * x[6] + 0.3404 * x[1] * x[7] + 0.1516 * x[1] * x[8] + 0.4074 * x[1] * x[9] - 0.3842 * x[1] * x[10] + 0.4361 * x[2] * x[3] - 0.6147 * x[2] * x[4] - 0.8 * x[2] * x[5] + 0.1892 * x[2] * x[6] - 0.8637 * x[2] * x[7] + 0.3065 * x[2] * x[8] + 0.2325 * x[2] * x[9] + 0.2648 * x[2] * x[10] + 0.3826 * x[3] * x[4] + 0.6438 * x[3] * x[5] - 0.5217 * x[3] * x[6] + 0.3787 * x[3] * x[7] + 0.7293 * x[3] * x[8] - 0.1202 * x[3] * x[9] + 0.5314 * x[3] * x[10] + 0.2886 * x[4] * x[5] - 0.4004 * x[4] * x[6] - 0.3376 * x[4] * x[7] - 0.9079 * x[4] * x[8] - 0.4125 * x[4] * x[9] + 0.8876 * x[4] * x[10] + 0.3379 * x[5] * x[6] - 0.2619 * x[5] * x[7] - 0.7405 * x[5] * x[8] + 0.1524 * x[5] * x[9] + 0.8941 * x[5] * x[10] + 0.2131 * x[6] * x[7] - 0.3442 * x[6] * x[8] + 0.5042 * x[6] * x[9] - 0.931 * x[6] * x[10] + 0.6521 * x[7] * x[8] - 0.3237 * x[7] * x[9] + 0.27 * x[7] * x[10] + 0.2362 * x[8] * x[9] + 0.5923 * x[8] * x[10] + 0.986 * x[9] * x[10] - 0.0644 * x[1] + 0.6635 * x[2] - 0.7397 * x[3] + 0.942 * x[4] - 0.6956 * x[5] + 0.7189 * x[6] + 0.2027 * x[7] + 0.7485 * x[8] + 0.4619 * x[9] + 0.0043 * x[10] + (-0.4047 * x[1] * x[2] * x[3]) - 0.8727 * x[1] * x[2] * x[4] - 0.014 * x[1] * x[2] * x[5] - 0.9627 * x[1] * x[2] * x[6] - 0.15 * x[1] * x[2] * x[7] - 0.7809 * x[1] * x[2] * x[8] - 0.4473 * x[1] * x[2] * x[9] + 0.4151 * x[1] * x[2] * x[10] + 0.0728 * x[1] * x[3] * x[4] - 0.2027 * x[1] * x[3] * x[5] - 0.4616 * x[1] * x[3] * x[6] + 0.1176 * x[1] * x[3] * x[7] + 0.108 * x[1] * x[3] * x[8] + 0.3765 * x[1] * x[3] * x[9] + 0.305 * x[1] * x[3] * x[10] - 0.5298 * x[1] * x[4] * x[5] - 0.0275 * x[1] * x[4] * x[6] - 0.8101 * x[1] * x[4] * x[7] - 0.4449 * x[1] * x[4] * x[8] - 0.8782 * x[1] * x[4] * x[9] - 0.6795 * x[1] * x[4] * x[10] - 0.8655 * x[1] * x[5] * x[6] - 0.6457 * x[1] * x[5] * x[7] + 0.8807 * x[1] * x[5] * x[8] - 0.7634 * x[1] * x[5] * x[9] + 0.217 * x[1] * x[5] * x[10] - 0.0549 * x[1] * x[6] * x[7] - 0.9422 * x[1] * x[6] * x[8] - 0.9389 * x[1] * x[6] * x[9] - 0.2805 * x[1] * x[6] * x[10] - 0.3906 * x[1] * x[7] * x[8] + 0.8925 * x[1] * x[7] * x[9] + 0.359 * x[1] * x[7] * x[10] - 0.3714 * x[1] * x[8] * x[9] - 0.5488 * x[1] * x[8] * x[10] + 0.1483 * x[1] * x[9] * x[10] + 0.225 * x[2] * x[3] * x[4] + 0.7272 * x[2] * x[3] * x[5] - 0.8881 * x[2] * x[3] * x[6] - 0.0211 * x[2] * x[3] * x[7] - 0.4108 * x[2] * x[3] * x[8] - 0.0434 * x[2] * x[3] * x[9] - 0.7799 * x[2] * x[3] * x[10] - 0.4614 * x[2] * x[4] * x[5] - 0.0865 * x[2] * x[4] * x[6] + 0.3207 * x[2] * x[4] * x[7] + 0.0431 * x[2] * x[4] * x[8] + 0.8559 * x[2] * x[4] * x[9] - 0.2257 * x[2] * x[4] * x[10] - 0.1022 * x[2] * x[5] * x[6] - 0.5768 * x[2] * x[5] * x[7] - 0.8797 * x[2] * x[5] * x[8] + 0.3955 * x[2] * x[5] * x[9] + 0.7964 * x[2] * x[5] * x[10] + 0.2734 * x[2] * x[6] * x[7] + 0.0895 * x[2] * x[6] * x[8] - 0.4146 * x[2] * x[6] * x[9] + 0.9077 * x[2] * x[6] * x[10] - 0.1895 * x[2] * x[7] * x[8] + 0.994 * x[2] * x[7] * x[9] - 0.6899 * x[2] * x[7] * x[10] + 0.9394 * x[2] * x[8] * x[9] - 0.2503 * x[2] * x[8] * x[10] - 0.2187 * x[2] * x[9] * x[10] - 0.1793 * x[3] * x[4] * x[5] + 0.9029 * x[3] * x[4] * x[6] + 0.1218 * x[3] * x[4] * x[7] + 0.2453 * x[3] * x[4] * x[8] + 0.7306 * x[3] * x[4] * x[9] - 0.2001 * x[3] * x[4] * x[10] + 0.7936 * x[3] * x[5] * x[6] - 0.7984 * x[3] * x[5] * x[7] - 0.589 * x[3] * x[5] * x[8] + 0.6958 * x[3] * x[5] * x[9] - 0.0455 * x[3] * x[5] * x[10] - 0.267 * x[3] * x[6] * x[7] + 0.8622 * x[3] * x[6] * x[8] - 0.5897 * x[3] * x[6] * x[9] + 0.1178 * x[3] * x[6] * x[10] + 0.8772 * x[3] * x[7] * x[8] - 0.7239 * x[3] * x[7] * x[9] + 0.8153 * x[3] * x[7] * x[10] + 0.9875 * x[3] * x[8] * x[9] + 0.0661 * x[3] * x[8] * x[10] + 0.0747 * x[3] * x[9] * x[10] - 0.9466 * x[4] * x[5] * x[6] + 0.9993 * x[4] * x[5] * x[7] + 0.4921 * x[4] * x[5] * x[8] + 0.1736 * x[4] * x[5] * x[9] - 0.5295 * x[4] * x[5] * x[10] - 0.5874 * x[4] * x[6] * x[7] - 0.9963 * x[4] * x[6] * x[8] - 0.6875 * x[4] * x[6] * x[9] - 0.6238 * x[4] * x[6] * x[10] + 0.0738 * x[4] * x[7] * x[8] + 0.3122 * x[4] * x[7] * x[9] + 0.9116 * x[4] * x[7] * x[10] - 0.7073 * x[4] * x[8] * x[9] + 0.3956 * x[4] * x[8] * x[10] + 0.6408 * x[4] * x[9] * x[10] + 0.906 * x[5] * x[6] * x[7] + 0.4384 * x[5] * x[6] * x[8] - 0.0051 * x[5] * x[6] * x[9] + 0.689 * x[5] * x[6] * x[10] + 0.8015 * x[5] * x[7] * x[8] - 0.1671 * x[5] * x[7] * x[9] + 0.1501 * x[5] * x[7] * x[10] - 0.6129 * x[5] * x[8] * x[9] - 0.4673 * x[5] * x[8] * x[10] - 0.2172 * x[5] * x[9] * x[10] + 0.5448 * x[6] * x[7] * x[8] + 0.5743 * x[6] * x[7] * x[9] - 0.2467 * x[6] * x[7] * x[10] + 0.8448 * x[6] * x[8] * x[9] - 0.784 * x[6] * x[8] * x[10] - 0.2975 * x[6] * x[9] * x[10] - 0.9803 * x[7] * x[8] * x[9] + 0.9786 * x[7] * x[8] * x[10] + 0.1967 * x[7] * x[9] * x[10] - 0.9423 * x[8] * x[9] * x[10] + 0.4814 * x[1] * x[2] * x[3] * x[4] + 0.1703 * x[1] * x[2] * x[3] * x[5] + 0.511 * x[1] * x[2] * x[3] * x[6] + 0.9122 * x[1] * x[2] * x[3] * x[7] + 0.1772 * x[1] * x[2] * x[3] * x[8] + 0.6143 * x[1] * x[2] * x[3] * x[9] + 0.0351 * x[1] * x[2] * x[3] * x[10] - 0.6117 * x[1] * x[2] * x[4] * x[5] + 0.6903 * x[1] * x[2] * x[4] * x[6] + 0.8105 * x[1] * x[2] * x[4] * x[7] + 0.3583 * x[1] * x[2] * x[4] * x[8] + 0.296 * x[1] * x[2] * x[4] * x[9] + 0.6876 * x[1] * x[2] * x[4] * x[10] - 0.393 * x[1] * x[2] * x[5] * x[6] - 0.3819 * x[1] * x[2] * x[5] * x[7] - 0.3434 * x[1] * x[2] * x[5] * x[8] + 0.498 * x[1] * x[2] * x[5] * x[9] + 0.3344 * x[1] * x[2] * x[5] * x[10] - 0.6604 * x[1] * x[2] * x[6] * x[7] + 0.1448 * x[1] * x[2] * x[6] * x[8] - 0.2679 * x[1] * x[2] * x[6] * x[9] - 0.9699 * x[1] * x[2] * x[6] * x[10] + 0.4874 * x[1] * x[2] * x[7] * x[8] - 0.2642 * x[1] * x[2] * x[7] * x[9] + 0.0611 * x[1] * x[2] * x[7] * x[10] + 0.1584 * x[1] * x[2] * x[8] * x[9] - 0.3937 * x[1] * x[2] * x[8] * x[10] + 0.9029 * x[1] * x[2] * x[9] * x[10] - 0.3443 * x[1] * x[3] * x[4] * x[5] + 0.1484 * x[1] * x[3] * x[4] * x[6] + 0.4433 * x[1] * x[3] * x[4] * x[7] + 0.3218 * x[1] * x[3] * x[4] * x[8] - 0.2226 * x[1] * x[3] * x[4] * x[9] + 0.3904 * x[1] * x[3] * x[4] * x[10] + 0.6146 * x[1] * x[3] * x[5] * x[6] - 0.8245 * x[1] * x[3] * x[5] * x[7] + 0.8728 * x[1] * x[3] * x[5] * x[8] - 0.3059 * x[1] * x[3] * x[5] * x[9] + 0.8877 * x[1] * x[3] * x[5] * x[10] + 0.1024 * x[1] * x[3] * x[6] * x[7] + 0.1653 * x[1] * x[3] * x[6] * x[8] - 0.3166 * x[1] * x[3] * x[6] * x[9] + 0.13 * x[1] * x[3] * x[6] * x[10] - 0.4146 * x[1] * x[3] * x[7] * x[8] - 0.0127 * x[1] * x[3] * x[7] * x[9] + 0.4993 * x[1] * x[3] * x[7] * x[10] + 0.6925 * x[1] * x[3] * x[8] * x[9] - 0.0677 * x[1] * x[3] * x[8] * x[10] - 0.2175 * x[1] * x[3] * x[9] * x[10] + 0.828 * x[1] * x[4] * x[5] * x[6] - 0.1967 * x[1] * x[4] * x[5] * x[7] + 0.4211 * x[1] * x[4] * x[5] * x[8] - 0.2497 * x[1] * x[4] * x[5] * x[9] + 0.462 * x[1] * x[4] * x[5] * x[10] - 0.7244 * x[1] * x[4] * x[6] * x[7] + 0.5054 * x[1] * x[4] * x[6] * x[8] - 0.6719 * x[1] * x[4] * x[6] * x[9] + 0.2062 * x[1] * x[4] * x[6] * x[10] + 0.4854 * x[1] * x[4] * x[7] * x[8] - 0.8001 * x[1] * x[4] * x[7] * x[9] + 0.4813 * x[1] * x[4] * x[7] * x[10] - 0.2475 * x[1] * x[4] * x[8] * x[9] + 0.659 * x[1] * x[4] * x[8] * x[10] - 0.8335 * x[1] * x[4] * x[9] * x[10] + 0.2203 * x[1] * x[5] * x[6] * x[7] + 0.8903 * x[1] * x[5] * x[6] * x[8] - 0.7647 * x[1] * x[5] * x[6] * x[9] + 0.5881 * x[1] * x[5] * x[6] * x[10] - 0.3864 * x[1] * x[5] * x[7] * x[8] - 0.5257 * x[1] * x[5] * x[7] * x[9] - 0.5672 * x[1] * x[5] * x[7] * x[10] - 0.0589 * x[1] * x[5] * x[8] * x[9] - 0.1993 * x[1] * x[5] * x[8] * x[10] - 0.4537 * x[1] * x[5] * x[9] * x[10] + 0.7725 * x[1] * x[6] * x[7] * x[8] + 0.1709 * x[1] * x[6] * x[7] * x[9] - 0.0676 * x[1] * x[6] * x[7] * x[10] - 0.6013 * x[1] * x[6] * x[8] * x[9] + 0.8428 * x[1] * x[6] * x[8] * x[10] - 0.6915 * x[1] * x[6] * x[9] * x[10] + 0.8838 * x[1] * x[7] * x[8] * x[9] + 0.9223 * x[1] * x[7] * x[8] * x[10] + 0.5193 * x[1] * x[7] * x[9] * x[10] + 0.3182 * x[1] * x[8] * x[9] * x[10] - 0.221 * x[2] * x[3] * x[4] * x[5] + 0.6815 * x[2] * x[3] * x[4] * x[6] - 0.0966 * x[2] * x[3] * x[4] * x[7] - 0.1797 * x[2] * x[3] * x[4] * x[8] - 0.7994 * x[2] * x[3] * x[4] * x[9] + 0.6868 * x[2] * x[3] * x[4] * x[10] + 0.4518 * x[2] * x[3] * x[5] * x[6] + 0.8514 * x[2] * x[3] * x[5] * x[7] + 0.6759 * x[2] * x[3] * x[5] * x[8] - 0.6871 * x[2] * x[3] * x[5] * x[9] + 0.6584 * x[2] * x[3] * x[5] * x[10] - 0.2458 * x[2] * x[3] * x[6] * x[7] + 0.6472 * x[2] * x[3] * x[6] * x[8] - 0.3359 * x[2] * x[3] * x[6] * x[9] - 0.863 * x[2] * x[3] * x[6] * x[10] + 0.1233 * x[2] * x[3] * x[7] * x[8] + 0.6612 * x[2] * x[3] * x[7] * x[9] + 0.2013 * x[2] * x[3] * x[7] * x[10] + 0.6938 * x[2] * x[3] * x[8] * x[9] - 0.7642 * x[2] * x[3] * x[8] * x[10] + 0.3951 * x[2] * x[3] * x[9] * x[10] - 0.3524 * x[2] * x[4] * x[5] * x[6] - 0.9741 * x[2] * x[4] * x[5] * x[7] + 0.6833 * x[2] * x[4] * x[5] * x[8] - 0.4752 * x[2] * x[4] * x[5] * x[9] - 0.3353 * x[2] * x[4] * x[5] * x[10] + 0.9698 * x[2] * x[4] * x[6] * x[7] - 0.9741 * x[2] * x[4] * x[6] * x[8] - 0.1607 * x[2] * x[4] * x[6] * x[9] + 0.7583 * x[2] * x[4] * x[6] * x[10] + 0.803 * x[2] * x[4] * x[7] * x[8] - 0.4884 * x[2] * x[4] * x[7] * x[9] + 0.459 * x[2] * x[4] * x[7] * x[10] + 0.7593 * x[2] * x[4] * x[8] * x[9] + 0.3966 * x[2] * x[4] * x[8] * x[10] + 0.2922 * x[2] * x[4] * x[9] * x[10] - 0.8999 * x[2] * x[5] * x[6] * x[7] - 0.3177 * x[2] * x[5] * x[6] * x[8] + 0.2054 * x[2] * x[5] * x[6] * x[9] - 0.0702 * x[2] * x[5] * x[6] * x[10] - 0.1661 * x[2] * x[5] * x[7] * x[8] + 0.949 * x[2] * x[5] * x[7] * x[9] + 0.8319 * x[2] * x[5] * x[7] * x[10] - 0.2402 * x[2] * x[5] * x[8] * x[9] + 0.3515 * x[2] * x[5] * x[8] * x[10] - 0.6997 * x[2] * x[5] * x[9] * x[10] + 0.7683 * x[2] * x[6] * x[7] * x[8] - 0.6599 * x[2] * x[6] * x[7] * x[9] + 0.1491 * x[2] * x[6] * x[7] * x[10] + 0.4292 * x[2] * x[6] * x[8] * x[9] + 0.5753 * x[2] * x[6] * x[8] * x[10] - 0.2752 * x[2] * x[6] * x[9] * x[10] - 0.7367 * x[2] * x[7] * x[8] * x[9] + 0.2302 * x[2] * x[7] * x[8] * x[10] + 0.9897 * x[2] * x[7] * x[9] * x[10] - 0.5626 * x[2] * x[8] * x[9] * x[10] - 0.3133 * x[3] * x[4] * x[5] * x[6] - 0.113 * x[3] * x[4] * x[5] * x[7] + 0.3194 * x[3] * x[4] * x[5] * x[8] + 0.4135 * x[3] * x[4] * x[5] * x[9] - 0.4578 * x[3] * x[4] * x[5] * x[10] - 0.4937 * x[3] * x[4] * x[6] * x[7] + 0.2359 * x[3] * x[4] * x[6] * x[8] + 0.2791 * x[3] * x[4] * x[6] * x[9] - 0.8753 * x[3] * x[4] * x[6] * x[10] - 0.8146 * x[3] * x[4] * x[7] * x[8] + 0.3627 * x[3] * x[4] * x[7] * x[9] + 0.6978 * x[3] * x[4] * x[7] * x[10] - 0.1502 * x[3] * x[4] * x[8] * x[9] + 0.8516 * x[3] * x[4] * x[8] * x[10] - 0.8482 * x[3] * x[4] * x[9] * x[10] - 0.7326 * x[3] * x[5] * x[6] * x[7] + 0.3347 * x[3] * x[5] * x[6] * x[8] - 0.3677 * x[3] * x[5] * x[6] * x[9] + 0.8576 * x[3] * x[5] * x[6] * x[10] + 0.8423 * x[3] * x[5] * x[7] * x[8] + 0.4222 * x[3] * x[5] * x[7] * x[9] + 0.3568 * x[3] * x[5] * x[7] * x[10] + 0.1597 * x[3] * x[5] * x[8] * x[9] + 0.2008 * x[3] * x[5] * x[8] * x[10] + 0.6678 * x[3] * x[5] * x[9] * x[10] - 0.7699 * x[3] * x[6] * x[7] * x[8] + 0.6536 * x[3] * x[6] * x[7] * x[9] - 0.4263 * x[3] * x[6] * x[7] * x[10] + 0.5469 * x[3] * x[6] * x[8] * x[9] + 0.6991 * x[3] * x[6] * x[8] * x[10] + 0.4764 * x[3] * x[6] * x[9] * x[10] - 0.6822 * x[3] * x[7] * x[8] * x[9] - 0.709 * x[3] * x[7] * x[8] * x[10] - 0.6123 * x[3] * x[7] * x[9] * x[10] - 0.6075 * x[3] * x[8] * x[9] * x[10] - 0.6624 * x[4] * x[5] * x[6] * x[7] + 0.3302 * x[4] * x[5] * x[6] * x[8] + 0.6541 * x[4] * x[5] * x[6] * x[9] - 0.6579 * x[4] * x[5] * x[6] * x[10] - 0.5587 * x[4] * x[5] * x[7] * x[8] - 0.1261 * x[4] * x[5] * x[7] * x[9] + 0.8603 * x[4] * x[5] * x[7] * x[10] + 0.1445 * x[4] * x[5] * x[8] * x[9] - 0.773 * x[4] * x[5] * x[8] * x[10] + 0.1692 * x[4] * x[5] * x[9] * x[10] + 0.8432 * x[4] * x[6] * x[7] * x[8] + 0.8133 * x[4] * x[6] * x[7] * x[9] + 0.1169 * x[4] * x[6] * x[7] * x[10] - 0.1312 * x[4] * x[6] * x[8] * x[9] + 0.9717 * x[4] * x[6] * x[8] * x[10] + 0.3126 * x[4] * x[6] * x[9] * x[10] + 0.4154 * x[4] * x[7] * x[8] * x[9] - 0.0105 * x[4] * x[7] * x[8] * x[10] + 0.4772 * x[4] * x[7] * x[9] * x[10] + 0.1875 * x[4] * x[8] * x[9] * x[10] + 0.9525 * x[5] * x[6] * x[7] * x[8] - 0.3099 * x[5] * x[6] * x[7] * x[9] - 0.239 * x[5] * x[6] * x[7] * x[10] + 0.5059 * x[5] * x[6] * x[8] * x[9] + 0.466 * x[5] * x[6] * x[8] * x[10] - 0.334 * x[5] * x[6] * x[9] * x[10] + 0.8077 * x[5] * x[7] * x[8] * x[9] + 0.3148 * x[5] * x[7] * x[8] * x[10] - 0.4982 * x[5] * x[7] * x[9] * x[10] + 0.2499 * x[5] * x[8] * x[9] * x[10] - 0.4484 * x[6] * x[7] * x[8] * x[9] + 0.0002 * x[6] * x[7] * x[8] * x[10] + 0.9242 * x[6] * x[7] * x[9] * x[10] - 0.3877 * x[6] * x[8] * x[9] * x[10] - 0.776 * x[7] * x[8] * x[9] * x[10] <= 91.904 ) e6 = replace_expr(e6, x) JuMP.add_nonlinear_constraint(m, e6) e7 = :( 0.1493 * x[1] * x[2] - 0.0821 * x[1] * x[3] + 0.497 * x[1] * x[4] - 0.9345 * x[1] * x[5] + 0.4136 * x[1] * x[6] + 0.7518 * x[1] * x[7] - 0.343 * x[1] * x[8] - 0.4928 * x[1] * x[9] + 0.7599 * x[1] * x[10] + 0.6319 * x[2] * x[3] - 0.8854 * x[2] * x[4] + 0.7768 * x[2] * x[5] + 0.0498 * x[2] * x[6] - 0.87 * x[2] * x[7] + 0.2151 * x[2] * x[8] - 0.5144 * x[2] * x[9] - 0.4663 * x[2] * x[10] - 0.7141 * x[3] * x[4] + 0.3885 * x[3] * x[5] + 0.8542 * x[3] * x[6] + 0.7864 * x[3] * x[7] + 0.2841 * x[3] * x[8] - 0.2428 * x[3] * x[9] - 0.8116 * x[3] * x[10] + 0.8953 * x[4] * x[5] + 0.2995 * x[4] * x[6] - 0.2316 * x[4] * x[7] - 0.7342 * x[4] * x[8] + 0.3091 * x[4] * x[9] - 0.114 * x[4] * x[10] - 0.6494 * x[5] * x[6] - 0.5173 * x[5] * x[7] - 0.7047 * x[5] * x[8] - 0.764 * x[5] * x[9] - 0.2591 * x[5] * x[10] - 0.6065 * x[6] * x[7] - 0.5798 * x[6] * x[8] + 0.1489 * x[6] * x[9] - 0.7814 * x[6] * x[10] + 0.0265 * x[7] * x[8] - 0.0071 * x[7] * x[9] - 0.985 * x[7] * x[10] + 0.9441 * x[8] * x[9] + 0.4356 * x[8] * x[10] + 0.9238 * x[9] * x[10] - 0.8049 * x[1] - 0.4609 * x[2] + 0.0185 * x[3] - 0.5567 * x[4] + 0.5428 * x[5] + 0.8039 * x[6] - 0.7982 * x[7] + 0.433 * x[8] + 0.3945 * x[9] - 0.8879 * x[10] + 0.7921 * x[1] * x[2] * x[4] - 0.9752 * x[1] * x[2] * x[3] - 0.6234 * x[1] * x[2] * x[5] - 0.2596 * x[1] * x[2] * x[6] + 0.038 * x[1] * x[2] * x[7] + 0.7493 * x[1] * x[2] * x[8] + 0.0256 * x[1] * x[2] * x[9] - 0.457 * x[1] * x[2] * x[10] - 0.3738 * x[1] * x[3] * x[4] + 0.2854 * x[1] * x[3] * x[5] - 0.4543 * x[1] * x[3] * x[6] - 0.03 * x[1] * x[3] * x[7] - 0.9105 * x[1] * x[3] * x[8] - 0.7535 * x[1] * x[3] * x[9] - 0.1891 * x[1] * x[3] * x[10] + 0.6336 * x[1] * x[4] * x[5] + 0.1559 * x[1] * x[4] * x[6] - 0.3327 * x[1] * x[4] * x[7] - 0.0413 * x[1] * x[4] * x[8] - 0.3352 * x[1] * x[4] * x[9] - 0.9197 * x[1] * x[4] * x[10] - 0.3498 * x[1] * x[5] * x[6] - 0.3321 * x[1] * x[5] * x[7] + 0.3069 * x[1] * x[5] * x[8] - 0.6815 * x[1] * x[5] * x[9] - 0.9023 * x[1] * x[5] * x[10] - 0.3243 * x[1] * x[6] * x[7] - 0.7002 * x[1] * x[6] * x[8] + 0.8733 * x[1] * x[6] * x[9] + 0.7257 * x[1] * x[6] * x[10] + 0.807 * x[1] * x[7] * x[8] - 0.3247 * x[1] * x[7] * x[9] + 0.751 * x[1] * x[7] * x[10] - 0.1371 * x[1] * x[8] * x[9] + 0.3378 * x[1] * x[8] * x[10] + 0.4854 * x[1] * x[9] * x[10] + 0.6818 * x[2] * x[3] * x[4] - 0.2154 * x[2] * x[3] * x[5] + 0.9713 * x[2] * x[3] * x[6] + 0.0508 * x[2] * x[3] * x[7] - 0.0821 * x[2] * x[3] * x[8] - 0.2744 * x[2] * x[3] * x[9] + 0.3301 * x[2] * x[3] * x[10] + 0.0977 * x[2] * x[4] * x[5] + 0.7447 * x[2] * x[4] * x[6] + 0.152 * x[2] * x[4] * x[7] + 0.6629 * x[2] * x[4] * x[8] - 0.8393 * x[2] * x[4] * x[9] + 0.1067 * x[2] * x[4] * x[10] - 0.9084 * x[2] * x[5] * x[6] + 0.761 * x[2] * x[5] * x[7] + 0.5597 * x[2] * x[5] * x[8] - 0.2003 * x[2] * x[5] * x[9] - 0.9542 * x[2] * x[5] * x[10] - 0.1824 * x[2] * x[6] * x[7] - 0.8383 * x[2] * x[6] * x[8] - 0.6698 * x[2] * x[6] * x[9] + 0.0278 * x[2] * x[6] * x[10] - 0.6996 * x[2] * x[7] * x[8] - 0.3721 * x[2] * x[7] * x[9] - 0.0097 * x[2] * x[7] * x[10] - 0.1389 * x[2] * x[8] * x[9] - 0.1557 * x[2] * x[8] * x[10] + 0.3259 * x[2] * x[9] * x[10] + 0.2066 * x[3] * x[4] * x[5] + 0.4973 * x[3] * x[4] * x[6] - 0.0794 * x[3] * x[4] * x[7] + 0.9822 * x[3] * x[4] * x[8] + 0.9661 * x[3] * x[4] * x[9] - 0.7344 * x[3] * x[4] * x[10] + 0.5813 * x[3] * x[5] * x[6] - 0.0259 * x[3] * x[5] * x[7] - 0.8178 * x[3] * x[5] * x[8] + 0.1696 * x[3] * x[5] * x[9] + 0.0474 * x[3] * x[5] * x[10] - 0.6102 * x[3] * x[6] * x[7] + 0.3413 * x[3] * x[6] * x[8] - 0.0321 * x[3] * x[6] * x[9] + 0.3867 * x[3] * x[6] * x[10] - 0.9594 * x[3] * x[7] * x[8] - 0.0941 * x[3] * x[7] * x[9] + 0.2824 * x[3] * x[7] * x[10] + 0.2279 * x[3] * x[8] * x[9] - 0.2678 * x[3] * x[8] * x[10] + 0.8357 * x[3] * x[9] * x[10] - 0.1385 * x[4] * x[5] * x[6] - 0.0028 * x[4] * x[5] * x[7] + 0.6343 * x[4] * x[5] * x[8] + 0.6558 * x[4] * x[5] * x[9] - 0.3929 * x[4] * x[5] * x[10] + 0.5754 * x[4] * x[6] * x[7] + 0.5376 * x[4] * x[6] * x[8] - 0.9033 * x[4] * x[6] * x[9] - 0.3758 * x[4] * x[6] * x[10] + 0.0538 * x[4] * x[7] * x[8] + 0.5201 * x[4] * x[7] * x[9] + 0.0502 * x[4] * x[7] * x[10] + 0.6526 * x[4] * x[8] * x[9] + 0.3788 * x[4] * x[8] * x[10] - 0.2957 * x[4] * x[9] * x[10] + 0.2894 * x[5] * x[6] * x[7] - 0.7789 * x[5] * x[6] * x[8] - 0.7901 * x[5] * x[6] * x[9] + 0.4762 * x[5] * x[6] * x[10] + 0.4641 * x[5] * x[7] * x[8] + 0.4006 * x[5] * x[7] * x[9] + 0.9277 * x[5] * x[7] * x[10] + 0.1455 * x[5] * x[8] * x[9] - 0.2138 * x[5] * x[8] * x[10] + 0.5281 * x[5] * x[9] * x[10] - 0.3557 * x[6] * x[7] * x[8] + 0.9451 * x[6] * x[7] * x[9] + 0.3845 * x[6] * x[7] * x[10] - 0.931 * x[6] * x[8] * x[9] - 0.7231 * x[6] * x[8] * x[10] - 0.1203 * x[6] * x[9] * x[10] + 0.6813 * x[7] * x[8] * x[9] - 0.1748 * x[7] * x[8] * x[10] - 0.893 * x[7] * x[9] * x[10] + 0.3339 * x[8] * x[9] * x[10] + (-0.8394 * x[1] * x[2] * x[3] * x[4]) - 0.7701 * x[1] * x[2] * x[3] * x[5] - 0.3017 * x[1] * x[2] * x[3] * x[6] - 0.2722 * x[1] * x[2] * x[3] * x[7] + 0.4795 * x[1] * x[2] * x[3] * x[8] + 0.3531 * x[1] * x[2] * x[3] * x[9] + 0.2825 * x[1] * x[2] * x[3] * x[10] + 0.3274 * x[1] * x[2] * x[4] * x[5] - 0.4461 * x[1] * x[2] * x[4] * x[6] + 0.2588 * x[1] * x[2] * x[4] * x[7] + 0.5324 * x[1] * x[2] * x[4] * x[8] - 0.6424 * x[1] * x[2] * x[4] * x[9] - 0.573 * x[1] * x[2] * x[4] * x[10] + 0.6427 * x[1] * x[2] * x[5] * x[6] + 0.1464 * x[1] * x[2] * x[5] * x[7] + 0.7913 * x[1] * x[2] * x[5] * x[8] + 0.0191 * x[1] * x[2] * x[5] * x[9] + 0.6857 * x[1] * x[2] * x[5] * x[10] + 0.3674 * x[1] * x[2] * x[6] * x[7] - 0.7488 * x[1] * x[2] * x[6] * x[8] - 0.9634 * x[1] * x[2] * x[6] * x[9] - 0.2154 * x[1] * x[2] * x[6] * x[10] + 0.9814 * x[1] * x[2] * x[7] * x[8] + 0.3058 * x[1] * x[2] * x[7] * x[9] - 0.5648 * x[1] * x[2] * x[7] * x[10] + 0.043 * x[1] * x[2] * x[8] * x[9] + 0.3748 * x[1] * x[2] * x[8] * x[10] - 0.1711 * x[1] * x[2] * x[9] * x[10] + 0.1803 * x[1] * x[3] * x[4] * x[5] - 0.3642 * x[1] * x[3] * x[4] * x[6] + 0.4124 * x[1] * x[3] * x[4] * x[7] + 0.2058 * x[1] * x[3] * x[4] * x[8] + 0.2026 * x[1] * x[3] * x[4] * x[9] + 0.3626 * x[1] * x[3] * x[4] * x[10] + 0.5458 * x[1] * x[3] * x[5] * x[6] - 0.0222 * x[1] * x[3] * x[5] * x[7] - 0.7975 * x[1] * x[3] * x[5] * x[8] - 0.5112 * x[1] * x[3] * x[5] * x[9] + 0.0613 * x[1] * x[3] * x[5] * x[10] + 0.769 * x[1] * x[3] * x[6] * x[7] + 0.701 * x[1] * x[3] * x[6] * x[8] - 0.7641 * x[1] * x[3] * x[6] * x[9] + 0.3574 * x[1] * x[3] * x[6] * x[10] - 0.0437 * x[1] * x[3] * x[7] * x[8] + 0.7193 * x[1] * x[3] * x[7] * x[9] + 0.4535 * x[1] * x[3] * x[7] * x[10] + 0.5978 * x[1] * x[3] * x[8] * x[9] + 0.0133 * x[1] * x[3] * x[8] * x[10] + 0.8512 * x[1] * x[3] * x[9] * x[10] - 0.6772 * x[1] * x[4] * x[5] * x[6] + 0.5878 * x[1] * x[4] * x[5] * x[7] - 0.3585 * x[1] * x[4] * x[5] * x[8] + 0.1872 * x[1] * x[4] * x[5] * x[9] + 0.0589 * x[1] * x[4] * x[5] * x[10] - 0.3317 * x[1] * x[4] * x[6] * x[7] + 0.7479 * x[1] * x[4] * x[6] * x[8] - 0.9671 * x[1] * x[4] * x[6] * x[9] + 0.9391 * x[1] * x[4] * x[6] * x[10] + 0.9018 * x[1] * x[4] * x[7] * x[8] + 0.32 * x[1] * x[4] * x[7] * x[9] + 0.6027 * x[1] * x[4] * x[7] * x[10] - 0.6141 * x[1] * x[4] * x[8] * x[9] + 0.531 * x[1] * x[4] * x[8] * x[10] + 0.2639 * x[1] * x[4] * x[9] * x[10] + 0.3663 * x[1] * x[5] * x[6] * x[7] - 0.233 * x[1] * x[5] * x[6] * x[8] + 0.4189 * x[1] * x[5] * x[6] * x[9] + 0.4041 * x[1] * x[5] * x[6] * x[10] + 0.304 * x[1] * x[5] * x[7] * x[8] + 0.3126 * x[1] * x[5] * x[7] * x[9] + 0.0481 * x[1] * x[5] * x[7] * x[10] - 0.5275 * x[1] * x[5] * x[8] * x[9] - 0.1305 * x[1] * x[5] * x[8] * x[10] - 0.6678 * x[1] * x[5] * x[9] * x[10] - 0.5155 * x[1] * x[6] * x[7] * x[8] + 0.5784 * x[1] * x[6] * x[7] * x[9] + 0.0016 * x[1] * x[6] * x[7] * x[10] - 0.1111 * x[1] * x[6] * x[8] * x[9] - 0.3946 * x[1] * x[6] * x[8] * x[10] - 0.98 * x[1] * x[6] * x[9] * x[10] - 0.1806 * x[1] * x[7] * x[8] * x[9] + 0.988 * x[1] * x[7] * x[8] * x[10] - 0.6747 * x[1] * x[7] * x[9] * x[10] - 0.3078 * x[1] * x[8] * x[9] * x[10] + 0.2953 * x[2] * x[3] * x[4] * x[5] - 0.8559 * x[2] * x[3] * x[4] * x[6] + 0.3771 * x[2] * x[3] * x[4] * x[7] - 0.6117 * x[2] * x[3] * x[4] * x[8] + 0.1766 * x[2] * x[3] * x[4] * x[9] + 0.472 * x[2] * x[3] * x[4] * x[10] - 0.1445 * x[2] * x[3] * x[5] * x[6] - 0.1965 * x[2] * x[3] * x[5] * x[7] + 0.5678 * x[2] * x[3] * x[5] * x[8] + 0.8256 * x[2] * x[3] * x[5] * x[9] - 0.0288 * x[2] * x[3] * x[5] * x[10] - 0.0473 * x[2] * x[3] * x[6] * x[7] + 0.1173 * x[2] * x[3] * x[6] * x[8] + 0.6063 * x[2] * x[3] * x[6] * x[9] - 0.8786 * x[2] * x[3] * x[6] * x[10] + 0.8495 * x[2] * x[3] * x[7] * x[8] + 0.1714 * x[2] * x[3] * x[7] * x[9] + 0.4934 * x[2] * x[3] * x[7] * x[10] - 0.7093 * x[2] * x[3] * x[8] * x[9] - 0.5405 * x[2] * x[3] * x[8] * x[10] + 0.7902 * x[2] * x[3] * x[9] * x[10] - 0.333 * x[2] * x[4] * x[5] * x[6] + 0.9342 * x[2] * x[4] * x[5] * x[7] + 0.6046 * x[2] * x[4] * x[5] * x[8] - 0.7882 * x[2] * x[4] * x[5] * x[9] + 0.4245 * x[2] * x[4] * x[5] * x[10] - 0.3577 * x[2] * x[4] * x[6] * x[7] - 0.6746 * x[2] * x[4] * x[6] * x[8] - 0.1915 * x[2] * x[4] * x[6] * x[9] - 0.0401 * x[2] * x[4] * x[6] * x[10] - 0.9931 * x[2] * x[4] * x[7] * x[8] + 0.0294 * x[2] * x[4] * x[7] * x[9] + 0.5066 * x[2] * x[4] * x[7] * x[10] + 0.9387 * x[2] * x[4] * x[8] * x[9] + 0.4504 * x[2] * x[4] * x[8] * x[10] - 0.8174 * x[2] * x[4] * x[9] * x[10] - 0.1996 * x[2] * x[5] * x[6] * x[7] + 0.3514 * x[2] * x[5] * x[6] * x[8] + 0.316 * x[2] * x[5] * x[6] * x[9] + 0.6336 * x[2] * x[5] * x[6] * x[10] - 0.5032 * x[2] * x[5] * x[7] * x[8] - 0.4267 * x[2] * x[5] * x[7] * x[9] - 0.9986 * x[2] * x[5] * x[7] * x[10] - 0.5176 * x[2] * x[5] * x[8] * x[9] - 0.9889 * x[2] * x[5] * x[8] * x[10] - 0.2244 * x[2] * x[5] * x[9] * x[10] - 0.1486 * x[2] * x[6] * x[7] * x[8] + 0.4237 * x[2] * x[6] * x[7] * x[9] + 0.7526 * x[2] * x[6] * x[7] * x[10] + 0.3702 * x[2] * x[6] * x[8] * x[9] - 0.0792 * x[2] * x[6] * x[8] * x[10] + 0.3093 * x[2] * x[6] * x[9] * x[10] - 0.3792 * x[2] * x[7] * x[8] * x[9] + 0.5826 * x[2] * x[7] * x[8] * x[10] - 0.027 * x[2] * x[7] * x[9] * x[10] + 0.2429 * x[2] * x[8] * x[9] * x[10] + 0.4158 * x[3] * x[4] * x[5] * x[6] - 0.5107 * x[3] * x[4] * x[5] * x[7] - 0.3875 * x[3] * x[4] * x[5] * x[8] - 0.8247 * x[3] * x[4] * x[5] * x[9] - 0.1237 * x[3] * x[4] * x[5] * x[10] - 0.9108 * x[3] * x[4] * x[6] * x[7] + 0.8865 * x[3] * x[4] * x[6] * x[8] - 0.2339 * x[3] * x[4] * x[6] * x[9] - 0.3238 * x[3] * x[4] * x[6] * x[10] + 0.3171 * x[3] * x[4] * x[7] * x[8] - 0.7991 * x[3] * x[4] * x[7] * x[9] + 0.8642 * x[3] * x[4] * x[7] * x[10] - 0.3354 * x[3] * x[4] * x[8] * x[9] - 0.9854 * x[3] * x[4] * x[8] * x[10] + 0.6736 * x[3] * x[4] * x[9] * x[10] + 0.9472 * x[3] * x[5] * x[6] * x[7] - 0.6774 * x[3] * x[5] * x[6] * x[8] + 0.2819 * x[3] * x[5] * x[6] * x[9] - 0.8312 * x[3] * x[5] * x[6] * x[10] + 0.9588 * x[3] * x[5] * x[7] * x[8] + 0.6607 * x[3] * x[5] * x[7] * x[9] - 0.7955 * x[3] * x[5] * x[7] * x[10] - 0.3957 * x[3] * x[5] * x[8] * x[9] - 0.7523 * x[3] * x[5] * x[8] * x[10] - 0.232 * x[3] * x[5] * x[9] * x[10] + 0.7743 * x[3] * x[6] * x[7] * x[8] - 0.4182 * x[3] * x[6] * x[7] * x[9] - 0.8409 * x[3] * x[6] * x[7] * x[10] + 0.2953 * x[3] * x[6] * x[8] * x[9] - 0.6522 * x[3] * x[6] * x[8] * x[10] + 0.2996 * x[3] * x[6] * x[9] * x[10] - 0.319 * x[3] * x[7] * x[8] * x[9] + 0.092 * x[3] * x[7] * x[8] * x[10] - 0.9485 * x[3] * x[7] * x[9] * x[10] + 0.7382 * x[3] * x[8] * x[9] * x[10] - 0.1359 * x[4] * x[5] * x[6] * x[7] + 0.3935 * x[4] * x[5] * x[6] * x[8] + 0.8373 * x[4] * x[5] * x[6] * x[9] + 0.8982 * x[4] * x[5] * x[6] * x[10] - 0.5906 * x[4] * x[5] * x[7] * x[8] - 0.1772 * x[4] * x[5] * x[7] * x[9] + 0.834 * x[4] * x[5] * x[7] * x[10] - 0.6971 * x[4] * x[5] * x[8] * x[9] - 0.5593 * x[4] * x[5] * x[8] * x[10] + 0.5782 * x[4] * x[5] * x[9] * x[10] - 0.0524 * x[4] * x[6] * x[7] * x[8] + 0.3458 * x[4] * x[6] * x[7] * x[9] - 0.5235 * x[4] * x[6] * x[7] * x[10] - 0.1639 * x[4] * x[6] * x[8] * x[9] + 0.8372 * x[4] * x[6] * x[8] * x[10] + 0.6061 * x[4] * x[6] * x[9] * x[10] - 0.0421 * x[4] * x[7] * x[8] * x[9] + 0.0078 * x[4] * x[7] * x[8] * x[10] + 0.992 * x[4] * x[7] * x[9] * x[10] - 0.9383 * x[4] * x[8] * x[9] * x[10] + 0.3232 * x[5] * x[6] * x[7] * x[8] - 0.1077 * x[5] * x[6] * x[7] * x[9] - 0.6034 * x[5] * x[6] * x[7] * x[10] + 0.5167 * x[5] * x[6] * x[8] * x[9] + 0.5893 * x[5] * x[6] * x[8] * x[10] + 0.3498 * x[5] * x[6] * x[9] * x[10] + 0.9897 * x[5] * x[7] * x[8] * x[9] - 0.4292 * x[5] * x[7] * x[8] * x[10] + 0.6811 * x[5] * x[7] * x[9] * x[10] - 0.9318 * x[5] * x[8] * x[9] * x[10] - 0.628 * x[6] * x[7] * x[8] * x[9] - 0.7347 * x[6] * x[7] * x[8] * x[10] - 0.6338 * x[6] * x[7] * x[9] * x[10] - 0.0089 * x[6] * x[8] * x[9] * x[10] + 0.435 * x[7] * x[8] * x[9] * x[10] <= 46.589 ) e7 = replace_expr(e7, x) JuMP.add_nonlinear_constraint(m, e7) e8 = :( 0.0457 * x[1] * x[2] + 0.9914 * x[1] * x[3] - 0.2043 * x[1] * x[4] - 0.8175 * x[1] * x[5] - 0.3506 * x[1] * x[6] + 0.8449 * x[1] * x[7] + 0.9969 * x[1] * x[8] + 0.7066 * x[1] * x[9] + 0.7814 * x[1] * x[10] - 0.2681 * x[2] * x[3] + 0.1122 * x[2] * x[4] + 0.5142 * x[2] * x[5] + 0.5563 * x[2] * x[6] + 0.7168 * x[2] * x[7] + 0.1767 * x[2] * x[8] - 0.4082 * x[2] * x[9] + 0.6883 * x[2] * x[10] + 0.4342 * x[3] * x[4] + 0.2648 * x[3] * x[5] + 0.3778 * x[3] * x[6] - 0.8064 * x[3] * x[7] + 0.6143 * x[3] * x[8] + 0.0073 * x[3] * x[9] - 0.385 * x[3] * x[10] - 0.1292 * x[4] * x[5] + 0.0795 * x[4] * x[6] - 0.3467 * x[4] * x[7] + 0.4255 * x[4] * x[8] + 0.5645 * x[4] * x[9] - 0.6424 * x[4] * x[10] + 0.0119 * x[5] * x[6] - 0.6729 * x[5] * x[7] + 0.5847 * x[5] * x[8] + 0.7055 * x[5] * x[9] + 0.325 * x[5] * x[10] + 0.2792 * x[6] * x[7] + 0.0091 * x[6] * x[8] - 0.8959 * x[6] * x[9] - 0.2254 * x[6] * x[10] + 0.718 * x[7] * x[8] + 0.7289 * x[7] * x[9] + 0.0895 * x[7] * x[10] - 0.3158 * x[8] * x[9] - 0.6424 * x[8] * x[10] - 0.4076 * x[9] * x[10] - 0.7606 * x[1] - 0.4835 * x[2] + 0.7128 * x[3] - 0.7993 * x[4] + 0.1586 * x[5] - 0.2892 * x[6] - 0.297 * x[7] + 0.4053 * x[8] + 0.5703 * x[9] + 0.8903 * x[10] + (-0.9557 * x[1] * x[2] * x[3]) - 0.0043 * x[1] * x[2] * x[4] - 0.3711 * x[1] * x[2] * x[5] - 0.3175 * x[1] * x[2] * x[6] - 0.3467 * x[1] * x[2] * x[7] - 0.0837 * x[1] * x[2] * x[8] + 0.397 * x[1] * x[2] * x[9] - 0.8681 * x[1] * x[2] * x[10] - 0.2124 * x[1] * x[3] * x[4] + 0.9815 * x[1] * x[3] * x[5] - 0.5043 * x[1] * x[3] * x[6] - 0.2869 * x[1] * x[3] * x[7] + 0.6841 * x[1] * x[3] * x[8] - 0.4616 * x[1] * x[3] * x[9] + 0.4655 * x[1] * x[3] * x[10] - 0.6494 * x[1] * x[4] * x[5] - 0.2862 * x[1] * x[4] * x[6] - 0.5755 * x[1] * x[4] * x[7] - 0.5887 * x[1] * x[4] * x[8] + 0.3282 * x[1] * x[4] * x[9] + 0.0774 * x[1] * x[4] * x[10] + 0.6841 * x[1] * x[5] * x[6] - 0.2826 * x[1] * x[5] * x[7] + 0.9124 * x[1] * x[5] * x[8] + 0.8253 * x[1] * x[5] * x[9] + 0.1537 * x[1] * x[5] * x[10] - 0.6056 * x[1] * x[6] * x[7] + 0.1527 * x[1] * x[6] * x[8] + 0.8957 * x[1] * x[6] * x[9] - 0.5742 * x[1] * x[6] * x[10] + 0.235 * x[1] * x[7] * x[8] - 0.5581 * x[1] * x[7] * x[9] - 0.6459 * x[1] * x[7] * x[10] + 0.6936 * x[1] * x[8] * x[9] + 0.5801 * x[1] * x[8] * x[10] + 0.6639 * x[1] * x[9] * x[10] + 0.6154 * x[2] * x[3] * x[4] + 0.593 * x[2] * x[3] * x[5] - 0.5041 * x[2] * x[3] * x[6] - 0.8966 * x[2] * x[3] * x[7] + 0.2624 * x[2] * x[3] * x[8] + 0.1377 * x[2] * x[3] * x[9] - 0.3901 * x[2] * x[3] * x[10] - 0.244 * x[2] * x[4] * x[5] - 0.0898 * x[2] * x[4] * x[6] + 0.7614 * x[2] * x[4] * x[7] - 0.7333 * x[2] * x[4] * x[8] + 0.3803 * x[2] * x[4] * x[9] + 0.6721 * x[2] * x[4] * x[10] - 0.1619 * x[2] * x[5] * x[6] + 0.8134 * x[2] * x[5] * x[7] + 0.9525 * x[2] * x[5] * x[8] + 0.992 * x[2] * x[5] * x[9] + 0.7007 * x[2] * x[5] * x[10] + 0.3342 * x[2] * x[6] * x[7] + 0.7684 * x[2] * x[6] * x[8] + 0.3835 * x[2] * x[6] * x[9] - 0.3171 * x[2] * x[6] * x[10] - 0.5577 * x[2] * x[7] * x[8] + 0.6115 * x[2] * x[7] * x[9] - 0.1189 * x[2] * x[7] * x[10] + 0.8643 * x[2] * x[8] * x[9] + 0.3953 * x[2] * x[8] * x[10] - 0.3491 * x[2] * x[9] * x[10] - 0.7712 * x[3] * x[4] * x[5] - 0.8291 * x[3] * x[4] * x[6] - 0.3737 * x[3] * x[4] * x[7] + 0.388 * x[3] * x[4] * x[8] - 0.5345 * x[3] * x[4] * x[9] - 0.2952 * x[3] * x[4] * x[10] + 0.2886 * x[3] * x[5] * x[6] + 0.0765 * x[3] * x[5] * x[7] + 0.8758 * x[3] * x[5] * x[8] + 0.4549 * x[3] * x[5] * x[9] - 0.0236 * x[3] * x[5] * x[10] - 0.1005 * x[3] * x[6] * x[7] + 0.7607 * x[3] * x[6] * x[8] - 0.7844 * x[3] * x[6] * x[9] - 0.0479 * x[3] * x[6] * x[10] + 0.9452 * x[3] * x[7] * x[8] - 0.1973 * x[3] * x[7] * x[9] + 0.6377 * x[3] * x[7] * x[10] + 0.5098 * x[3] * x[8] * x[9] - 0.3909 * x[3] * x[8] * x[10] + 0.9553 * x[3] * x[9] * x[10] + 0.1032 * x[4] * x[5] * x[6] + 0.6899 * x[4] * x[5] * x[7] + 0.8619 * x[4] * x[5] * x[8] + 0.3971 * x[4] * x[5] * x[9] - 0.3458 * x[4] * x[5] * x[10] - 0.5388 * x[4] * x[6] * x[7] + 0.8271 * x[4] * x[6] * x[8] - 0.4226 * x[4] * x[6] * x[9] + 0.3216 * x[4] * x[6] * x[10] + 0.5984 * x[4] * x[7] * x[8] + 0.8383 * x[4] * x[7] * x[9] + 0.9912 * x[4] * x[7] * x[10] - 0.6707 * x[4] * x[8] * x[9] + 0.623 * x[4] * x[8] * x[10] + 0.93 * x[4] * x[9] * x[10] - 0.9724 * x[5] * x[6] * x[7] + 0.693 * x[5] * x[6] * x[8] - 0.4268 * x[5] * x[6] * x[9] - 0.9103 * x[5] * x[6] * x[10] + 0.0769 * x[5] * x[7] * x[8] - 0.9401 * x[5] * x[7] * x[9] + 0.4041 * x[5] * x[7] * x[10] + 0.256 * x[5] * x[8] * x[9] - 0.4499 * x[5] * x[8] * x[10] - 0.967 * x[5] * x[9] * x[10] + 0.7441 * x[6] * x[7] * x[8] + 0.9925 * x[6] * x[7] * x[9] - 0.8395 * x[6] * x[7] * x[10] + 0.0652 * x[6] * x[8] * x[9] + 0.6151 * x[6] * x[8] * x[10] - 0.5872 * x[6] * x[9] * x[10] - 0.021 * x[7] * x[8] * x[9] - 0.355 * x[7] * x[8] * x[10] - 0.0804 * x[7] * x[9] * x[10] - 0.8904 * x[8] * x[9] * x[10] + 0.8792 * x[1] * x[2] * x[3] * x[5] - 0.0645 * x[1] * x[2] * x[3] * x[4] - 0.8687 * x[1] * x[2] * x[3] * x[6] + 0.3423 * x[1] * x[2] * x[3] * x[7] - 0.9285 * x[1] * x[2] * x[3] * x[8] - 0.8432 * x[1] * x[2] * x[3] * x[9] - 0.5799 * x[1] * x[2] * x[3] * x[10] - 0.6942 * x[1] * x[2] * x[4] * x[5] - 0.4111 * x[1] * x[2] * x[4] * x[6] + 0.386 * x[1] * x[2] * x[4] * x[7] + 0.1187 * x[1] * x[2] * x[4] * x[8] + 0.12 * x[1] * x[2] * x[4] * x[9] + 0.3772 * x[1] * x[2] * x[4] * x[10] - 0.7117 * x[1] * x[2] * x[5] * x[6] - 0.5063 * x[1] * x[2] * x[5] * x[7] - 0.5562 * x[1] * x[2] * x[5] * x[8] + 0.5658 * x[1] * x[2] * x[5] * x[9] - 0.9644 * x[1] * x[2] * x[5] * x[10] + 0.9425 * x[1] * x[2] * x[6] * x[7] - 0.7938 * x[1] * x[2] * x[6] * x[8] + 0.0856 * x[1] * x[2] * x[6] * x[9] + 0.9841 * x[1] * x[2] * x[6] * x[10] - 0.5537 * x[1] * x[2] * x[7] * x[8] - 0.6452 * x[1] * x[2] * x[7] * x[9] - 0.6664 * x[1] * x[2] * x[7] * x[10] - 0.5412 * x[1] * x[2] * x[8] * x[9] + 0.6908 * x[1] * x[2] * x[8] * x[10] - 0.5576 * x[1] * x[2] * x[9] * x[10] + 0.1221 * x[1] * x[3] * x[4] * x[5] - 0.925 * x[1] * x[3] * x[4] * x[6] + 0.4836 * x[1] * x[3] * x[4] * x[7] - 0.4814 * x[1] * x[3] * x[4] * x[8] - 0.8928 * x[1] * x[3] * x[4] * x[9] + 0.8237 * x[1] * x[3] * x[4] * x[10] + 0.2967 * x[1] * x[3] * x[5] * x[6] + 0.519 * x[1] * x[3] * x[5] * x[7] - 0.4036 * x[1] * x[3] * x[5] * x[8] + 0.2184 * x[1] * x[3] * x[5] * x[9] + 0.5597 * x[1] * x[3] * x[5] * x[10] - 0.6636 * x[1] * x[3] * x[6] * x[7] - 0.2396 * x[1] * x[3] * x[6] * x[8] + 0.2761 * x[1] * x[3] * x[6] * x[9] - 0.8421 * x[1] * x[3] * x[6] * x[10] + 0.5215 * x[1] * x[3] * x[7] * x[8] - 0.3457 * x[1] * x[3] * x[7] * x[9] + 0.54 * x[1] * x[3] * x[7] * x[10] + 0.1788 * x[1] * x[3] * x[8] * x[9] + 0.2414 * x[1] * x[3] * x[8] * x[10] - 0.055 * x[1] * x[3] * x[9] * x[10] - 0.2767 * x[1] * x[4] * x[5] * x[6] + 0.3488 * x[1] * x[4] * x[5] * x[7] + 0.0979 * x[1] * x[4] * x[5] * x[8] - 0.6934 * x[1] * x[4] * x[5] * x[9] - 0.6615 * x[1] * x[4] * x[5] * x[10] + 0.503 * x[1] * x[4] * x[6] * x[7] - 0.7626 * x[1] * x[4] * x[6] * x[8] - 0.7943 * x[1] * x[4] * x[6] * x[9] - 0.3063 * x[1] * x[4] * x[6] * x[10] + 0.0558 * x[1] * x[4] * x[7] * x[8] - 0.2301 * x[1] * x[4] * x[7] * x[9] + 0.5779 * x[1] * x[4] * x[7] * x[10] - 0.0523 * x[1] * x[4] * x[8] * x[9] + 0.4117 * x[1] * x[4] * x[8] * x[10] + 0.7896 * x[1] * x[4] * x[9] * x[10] - 0.3012 * x[1] * x[5] * x[6] * x[7] - 0.0166 * x[1] * x[5] * x[6] * x[8] - 0.6013 * x[1] * x[5] * x[6] * x[9] - 0.27 * x[1] * x[5] * x[6] * x[10] - 0.5193 * x[1] * x[5] * x[7] * x[8] + 0.0948 * x[1] * x[5] * x[7] * x[9] + 0.2315 * x[1] * x[5] * x[7] * x[10] - 0.8466 * x[1] * x[5] * x[8] * x[9] - 0.4082 * x[1] * x[5] * x[8] * x[10] + 0.7234 * x[1] * x[5] * x[9] * x[10] - 0.2451 * x[1] * x[6] * x[7] * x[8] + 0.486 * x[1] * x[6] * x[7] * x[9] - 0.9333 * x[1] * x[6] * x[7] * x[10] - 0.577 * x[1] * x[6] * x[8] * x[9] + 0.6391 * x[1] * x[6] * x[8] * x[10] - 0.078 * x[1] * x[6] * x[9] * x[10] - 0.7901 * x[1] * x[7] * x[8] * x[9] + 0.3108 * x[1] * x[7] * x[8] * x[10] - 0.5911 * x[1] * x[7] * x[9] * x[10] - 0.7161 * x[1] * x[8] * x[9] * x[10] + 0.6677 * x[2] * x[3] * x[4] * x[5] + 0.9834 * x[2] * x[3] * x[4] * x[6] - 0.2604 * x[2] * x[3] * x[4] * x[7] + 0.1312 * x[2] * x[3] * x[4] * x[8] + 0.1699 * x[2] * x[3] * x[4] * x[9] + 0.8036 * x[2] * x[3] * x[4] * x[10] + 0.4179 * x[2] * x[3] * x[5] * x[6] - 0.4876 * x[2] * x[3] * x[5] * x[7] - 0.9695 * x[2] * x[3] * x[5] * x[8] + 0.8412 * x[2] * x[3] * x[5] * x[9] - 0.6245 * x[2] * x[3] * x[5] * x[10] - 0.2725 * x[2] * x[3] * x[6] * x[7] + 0.9959 * x[2] * x[3] * x[6] * x[8] + 0.7839 * x[2] * x[3] * x[6] * x[9] - 0.2566 * x[2] * x[3] * x[6] * x[10] - 0.3715 * x[2] * x[3] * x[7] * x[8] - 0.1659 * x[2] * x[3] * x[7] * x[9] - 0.3605 * x[2] * x[3] * x[7] * x[10] + 0.4571 * x[2] * x[3] * x[8] * x[9] + 0.157 * x[2] * x[3] * x[8] * x[10] + 0.3664 * x[2] * x[3] * x[9] * x[10] + 0.2114 * x[2] * x[4] * x[5] * x[6] - 0.8717 * x[2] * x[4] * x[5] * x[7] + 0.7656 * x[2] * x[4] * x[5] * x[8] - 0.1614 * x[2] * x[4] * x[5] * x[9] + 0.208 * x[2] * x[4] * x[5] * x[10] + 0.2939 * x[2] * x[4] * x[6] * x[7] + 0.4719 * x[2] * x[4] * x[6] * x[8] + 0.1079 * x[2] * x[4] * x[6] * x[9] - 0.1952 * x[2] * x[4] * x[6] * x[10] + 0.9831 * x[2] * x[4] * x[7] * x[8] - 0.3912 * x[2] * x[4] * x[7] * x[9] - 0.0164 * x[2] * x[4] * x[7] * x[10] - 0.7641 * x[2] * x[4] * x[8] * x[9] + 0.825 * x[2] * x[4] * x[8] * x[10] + 0.7573 * x[2] * x[4] * x[9] * x[10] - 0.0731 * x[2] * x[5] * x[6] * x[7] - 0.7839 * x[2] * x[5] * x[6] * x[8] + 0.2375 * x[2] * x[5] * x[6] * x[9] + 0.342 * x[2] * x[5] * x[6] * x[10] - 0.2362 * x[2] * x[5] * x[7] * x[8] + 0.7813 * x[2] * x[5] * x[7] * x[9] + 0.6021 * x[2] * x[5] * x[7] * x[10] + 0.3864 * x[2] * x[5] * x[8] * x[9] + 0.7828 * x[2] * x[5] * x[8] * x[10] - 0.2355 * x[2] * x[5] * x[9] * x[10] + 0.1796 * x[2] * x[6] * x[7] * x[8] - 0.7816 * x[2] * x[6] * x[7] * x[9] + 0.6992 * x[2] * x[6] * x[7] * x[10] - 0.5391 * x[2] * x[6] * x[8] * x[9] + 0.1898 * x[2] * x[6] * x[8] * x[10] - 0.3419 * x[2] * x[6] * x[9] * x[10] - 0.6057 * x[2] * x[7] * x[8] * x[9] + 0.4886 * x[2] * x[7] * x[8] * x[10] - 0.0693 * x[2] * x[7] * x[9] * x[10] + 0.6415 * x[2] * x[8] * x[9] * x[10] - 0.1695 * x[3] * x[4] * x[5] * x[6] - 0.662 * x[3] * x[4] * x[5] * x[7] - 0.6558 * x[3] * x[4] * x[5] * x[8] - 0.2137 * x[3] * x[4] * x[5] * x[9] + 0.0807 * x[3] * x[4] * x[5] * x[10] + 0.2775 * x[3] * x[4] * x[6] * x[7] - 0.639 * x[3] * x[4] * x[6] * x[8] + 0.1566 * x[3] * x[4] * x[6] * x[9] + 0.4792 * x[3] * x[4] * x[6] * x[10] + 0.1403 * x[3] * x[4] * x[7] * x[8] - 0.6095 * x[3] * x[4] * x[7] * x[9] + 0.9322 * x[3] * x[4] * x[7] * x[10] - 0.0214 * x[3] * x[4] * x[8] * x[9] + 0.3126 * x[3] * x[4] * x[8] * x[10] - 0.6241 * x[3] * x[4] * x[9] * x[10] + 0.1136 * x[3] * x[5] * x[6] * x[7] + 0.4677 * x[3] * x[5] * x[6] * x[8] - 0.6577 * x[3] * x[5] * x[6] * x[9] + 0.3394 * x[3] * x[5] * x[6] * x[10] - 0.7785 * x[3] * x[5] * x[7] * x[8] - 0.7024 * x[3] * x[5] * x[7] * x[9] + 0.2443 * x[3] * x[5] * x[7] * x[10] - 0.2521 * x[3] * x[5] * x[8] * x[9] + 0.2286 * x[3] * x[5] * x[8] * x[10] - 0.0991 * x[3] * x[5] * x[9] * x[10] - 0.7218 * x[3] * x[6] * x[7] * x[8] + 0.9204 * x[3] * x[6] * x[7] * x[9] - 0.1743 * x[3] * x[6] * x[7] * x[10] + 0.2405 * x[3] * x[6] * x[8] * x[9] + 0.1433 * x[3] * x[6] * x[8] * x[10] + 0.402 * x[3] * x[6] * x[9] * x[10] + 0.7113 * x[3] * x[7] * x[8] * x[9] - 0.14 * x[3] * x[7] * x[8] * x[10] + 0.1251 * x[3] * x[7] * x[9] * x[10] + 0.0473 * x[3] * x[8] * x[9] * x[10] - 0.5929 * x[4] * x[5] * x[6] * x[7] + 0.0649 * x[4] * x[5] * x[6] * x[8] + 0.9708 * x[4] * x[5] * x[6] * x[9] + 0.6177 * x[4] * x[5] * x[6] * x[10] + 0.5806 * x[4] * x[5] * x[7] * x[8] - 0.1607 * x[4] * x[5] * x[7] * x[9] + 0.059 * x[4] * x[5] * x[7] * x[10] - 0.8811 * x[4] * x[5] * x[8] * x[9] - 0.4492 * x[4] * x[5] * x[8] * x[10] + 0.7614 * x[4] * x[5] * x[9] * x[10] + 0.2033 * x[4] * x[6] * x[7] * x[8] - 0.9171 * x[4] * x[6] * x[7] * x[9] - 0.0382 * x[4] * x[6] * x[7] * x[10] - 0.8299 * x[4] * x[6] * x[8] * x[9] - 0.5709 * x[4] * x[6] * x[8] * x[10] - 0.396 * x[4] * x[6] * x[9] * x[10] + 0.7934 * x[4] * x[7] * x[8] * x[9] + 0.0689 * x[4] * x[7] * x[8] * x[10] - 0.4928 * x[4] * x[7] * x[9] * x[10] - 0.4895 * x[4] * x[8] * x[9] * x[10] + 0.8422 * x[5] * x[6] * x[7] * x[8] + 0.8058 * x[5] * x[6] * x[7] * x[9] - 0.3989 * x[5] * x[6] * x[7] * x[10] - 0.7604 * x[5] * x[6] * x[8] * x[9] - 0.2455 * x[5] * x[6] * x[8] * x[10] - 0.1685 * x[5] * x[6] * x[9] * x[10] - 0.5593 * x[5] * x[7] * x[8] * x[9] - 0.7832 * x[5] * x[7] * x[8] * x[10] + 0.0926 * x[5] * x[7] * x[9] * x[10] + 0.6215 * x[5] * x[8] * x[9] * x[10] + 0.3352 * x[6] * x[7] * x[8] * x[9] + 0.3423 * x[6] * x[7] * x[8] * x[10] - 0.8728 * x[6] * x[7] * x[9] * x[10] + 0.6484 * x[6] * x[8] * x[9] * x[10] - 0.2626 * x[7] * x[8] * x[9] * x[10] <= 14.826 ) e8 = replace_expr(e8, x) JuMP.add_nonlinear_constraint(m, e8) e9 = :( 0.1204 * x[1] * x[3] - 0.6331 * x[1] * x[2] + 0.2074 * x[1] * x[4] - 0.0007 * x[1] * x[5] + 0.1524 * x[1] * x[6] - 0.1373 * x[1] * x[7] - 0.5286 * x[1] * x[8] + 0.0533 * x[1] * x[9] - 0.0113 * x[1] * x[10] + 0.039 * x[2] * x[3] + 0.746 * x[2] * x[4] - 0.7493 * x[2] * x[5] - 0.3501 * x[2] * x[6] - 0.7046 * x[2] * x[7] + 0.623 * x[2] * x[8] - 0.3282 * x[2] * x[9] + 0.2535 * x[2] * x[10] + 0.7369 * x[3] * x[4] - 0.3179 * x[3] * x[5] - 0.7554 * x[3] * x[6] + 0.3384 * x[3] * x[7] + 0.7428 * x[3] * x[8] + 0.6871 * x[3] * x[9] - 0.2774 * x[3] * x[10] + 0.1942 * x[4] * x[5] - 0.0372 * x[4] * x[6] + 0.9036 * x[4] * x[7] + 0.9891 * x[4] * x[8] + 0.2623 * x[4] * x[9] + 0.4058 * x[4] * x[10] + 0.2905 * x[5] * x[6] + 0.8707 * x[5] * x[7] - 0.6906 * x[5] * x[8] + 0.0175 * x[5] * x[9] + 0.7644 * x[5] * x[10] + 0.1747 * x[6] * x[7] - 0.3217 * x[6] * x[8] - 0.3756 * x[6] * x[9] - 0.4446 * x[6] * x[10] - 0.5191 * x[7] * x[8] + 0.8229 * x[7] * x[9] - 0.0585 * x[7] * x[10] + 0.7931 * x[8] * x[9] + 0.2165 * x[8] * x[10] + 0.3018 * x[9] * x[10] - 0.6853 * x[1] + 0.4834 * x[2] - 0.9677 * x[3] + 0.9793 * x[4] - 0.3145 * x[5] + 0.9356 * x[6] - 0.651 * x[7] - 0.7873 * x[8] + 0.5914 * x[9] - 0.82 * x[10] + 0.6907 * x[1] * x[2] * x[4] - 0.4133 * x[1] * x[2] * x[3] + 0.0963 * x[1] * x[2] * x[5] - 0.2825 * x[1] * x[2] * x[6] + 0.0354 * x[1] * x[2] * x[7] + 0.5125 * x[1] * x[2] * x[8] + 0.9351 * x[1] * x[2] * x[9] + 0.7973 * x[1] * x[2] * x[10] - 0.8916 * x[1] * x[3] * x[4] - 0.7597 * x[1] * x[3] * x[5] + 0.2381 * x[1] * x[3] * x[6] + 0.0077 * x[1] * x[3] * x[7] + 0.3442 * x[1] * x[3] * x[8] + 0.1405 * x[1] * x[3] * x[9] + 0.8568 * x[1] * x[3] * x[10] - 0.261 * x[1] * x[4] * x[5] - 0.8792 * x[1] * x[4] * x[6] - 0.0695 * x[1] * x[4] * x[7] - 0.827 * x[1] * x[4] * x[8] + 0.5092 * x[1] * x[4] * x[9] + 0.4796 * x[1] * x[4] * x[10] - 0.7576 * x[1] * x[5] * x[6] - 0.2986 * x[1] * x[5] * x[7] - 0.6192 * x[1] * x[5] * x[8] - 0.8556 * x[1] * x[5] * x[9] - 0.0737 * x[1] * x[5] * x[10] - 0.0614 * x[1] * x[6] * x[7] - 0.0832 * x[1] * x[6] * x[8] - 0.6275 * x[1] * x[6] * x[9] - 0.4122 * x[1] * x[6] * x[10] + 0.1479 * x[1] * x[7] * x[8] - 0.4795 * x[1] * x[7] * x[9] + 0.4531 * x[1] * x[7] * x[10] - 0.564 * x[1] * x[8] * x[9] - 0.7735 * x[1] * x[8] * x[10] + 0.5994 * x[1] * x[9] * x[10] + 0.5007 * x[2] * x[3] * x[4] + 0.5843 * x[2] * x[3] * x[5] - 0.436 * x[2] * x[3] * x[6] - 0.2484 * x[2] * x[3] * x[7] + 0.5402 * x[2] * x[3] * x[8] + 0.4467 * x[2] * x[3] * x[9] - 0.7388 * x[2] * x[3] * x[10] + 0.449 * x[2] * x[4] * x[5] + 0.2 * x[2] * x[4] * x[6] - 0.2227 * x[2] * x[4] * x[7] + 0.1216 * x[2] * x[4] * x[8] - 0.1403 * x[2] * x[4] * x[9] + 0.2873 * x[2] * x[4] * x[10] - 0.9251 * x[2] * x[5] * x[6] - 0.9097 * x[2] * x[5] * x[7] - 0.299 * x[2] * x[5] * x[8] - 0.037 * x[2] * x[5] * x[9] + 0.1356 * x[2] * x[5] * x[10] + 0.1424 * x[2] * x[6] * x[7] + 0.9099 * x[2] * x[6] * x[8] - 0.8295 * x[2] * x[6] * x[9] - 0.9163 * x[2] * x[6] * x[10] - 0.886 * x[2] * x[7] * x[8] - 0.5395 * x[2] * x[7] * x[9] + 0.4885 * x[2] * x[7] * x[10] + 0.0733 * x[2] * x[8] * x[9] + 0.6171 * x[2] * x[8] * x[10] + 0.9443 * x[2] * x[9] * x[10] + 0.8452 * x[3] * x[4] * x[5] + 0.2589 * x[3] * x[4] * x[6] - 0.3954 * x[3] * x[4] * x[7] + 0.2099 * x[3] * x[4] * x[8] - 0.4274 * x[3] * x[4] * x[9] + 0.7638 * x[3] * x[4] * x[10] + 0.0518 * x[3] * x[5] * x[6] - 0.7951 * x[3] * x[5] * x[7] - 0.0508 * x[3] * x[5] * x[8] - 0.2861 * x[3] * x[5] * x[9] + 0.0163 * x[3] * x[5] * x[10] + 0.3989 * x[3] * x[6] * x[7] - 0.3631 * x[3] * x[6] * x[8] - 0.1875 * x[3] * x[6] * x[9] + 0.6995 * x[3] * x[6] * x[10] + 0.5373 * x[3] * x[7] * x[8] + 0.7748 * x[3] * x[7] * x[9] + 0.0892 * x[3] * x[7] * x[10] + 0.093 * x[3] * x[8] * x[9] - 0.4689 * x[3] * x[8] * x[10] + 0.4298 * x[3] * x[9] * x[10] - 0.4441 * x[4] * x[5] * x[6] - 0.9731 * x[4] * x[5] * x[7] - 0.0911 * x[4] * x[5] * x[8] - 0.8933 * x[4] * x[5] * x[9] - 0.3553 * x[4] * x[5] * x[10] - 0.1372 * x[4] * x[6] * x[7] + 0.239 * x[4] * x[6] * x[8] + 0.9347 * x[4] * x[6] * x[9] - 0.8911 * x[4] * x[6] * x[10] - 0.528 * x[4] * x[7] * x[8] - 0.13 * x[4] * x[7] * x[9] - 0.2034 * x[4] * x[7] * x[10] - 0.69 * x[4] * x[8] * x[9] + 0.2966 * x[4] * x[8] * x[10] + 0.9593 * x[4] * x[9] * x[10] - 0.9582 * x[5] * x[6] * x[7] + 0.4532 * x[5] * x[6] * x[8] + 0.5574 * x[5] * x[6] * x[9] - 0.4571 * x[5] * x[6] * x[10] - 0.9344 * x[5] * x[7] * x[8] - 0.1114 * x[5] * x[7] * x[9] + 0.477 * x[5] * x[7] * x[10] - 0.0515 * x[5] * x[8] * x[9] - 0.456 * x[5] * x[8] * x[10] + 0.1071 * x[5] * x[9] * x[10] + 0.3639 * x[6] * x[7] * x[8] + 0.1604 * x[6] * x[7] * x[9] + 0.7412 * x[6] * x[7] * x[10] - 0.842 * x[6] * x[8] * x[9] + 0.2298 * x[6] * x[8] * x[10] - 0.7632 * x[6] * x[9] * x[10] + 0.467 * x[7] * x[8] * x[9] - 0.3678 * x[7] * x[8] * x[10] - 0.0498 * x[7] * x[9] * x[10] + 0.2148 * x[8] * x[9] * x[10] + 0.607 * x[1] * x[2] * x[3] * x[4] - 0.984 * x[1] * x[2] * x[3] * x[5] + 0.1984 * x[1] * x[2] * x[3] * x[6] - 0.3261 * x[1] * x[2] * x[3] * x[7] + 0.9942 * x[1] * x[2] * x[3] * x[8] + 0.4899 * x[1] * x[2] * x[3] * x[9] + 0.1859 * x[1] * x[2] * x[3] * x[10] + 0.7152 * x[1] * x[2] * x[4] * x[5] + 0.6231 * x[1] * x[2] * x[4] * x[6] - 0.3239 * x[1] * x[2] * x[4] * x[7] + 0.6656 * x[1] * x[2] * x[4] * x[8] + 0.6511 * x[1] * x[2] * x[4] * x[9] + 0.4798 * x[1] * x[2] * x[4] * x[10] - 0.6549 * x[1] * x[2] * x[5] * x[6] + 0.3657 * x[1] * x[2] * x[5] * x[7] + 0.2469 * x[1] * x[2] * x[5] * x[8] + 0.1256 * x[1] * x[2] * x[5] * x[9] - 0.83 * x[1] * x[2] * x[5] * x[10] + 0.8632 * x[1] * x[2] * x[6] * x[7] - 0.6316 * x[1] * x[2] * x[6] * x[8] + 0.901 * x[1] * x[2] * x[6] * x[9] + 0.2282 * x[1] * x[2] * x[6] * x[10] - 0.3158 * x[1] * x[2] * x[7] * x[8] - 0.9495 * x[1] * x[2] * x[7] * x[9] + 0.379 * x[1] * x[2] * x[7] * x[10] - 0.7787 * x[1] * x[2] * x[8] * x[9] - 0.3534 * x[1] * x[2] * x[8] * x[10] + 0.0053 * x[1] * x[2] * x[9] * x[10] - 0.1876 * x[1] * x[3] * x[4] * x[5] - 0.502 * x[1] * x[3] * x[4] * x[6] + 0.1311 * x[1] * x[3] * x[4] * x[7] + 0.6431 * x[1] * x[3] * x[4] * x[8] + 0.3694 * x[1] * x[3] * x[4] * x[9] - 0.7882 * x[1] * x[3] * x[4] * x[10] - 0.3699 * x[1] * x[3] * x[5] * x[6] - 0.874 * x[1] * x[3] * x[5] * x[7] - 0.4416 * x[1] * x[3] * x[5] * x[8] + 0.2313 * x[1] * x[3] * x[5] * x[9] + 0.357 * x[1] * x[3] * x[5] * x[10] + 0.1096 * x[1] * x[3] * x[6] * x[7] + 0.9751 * x[1] * x[3] * x[6] * x[8] + 0.4229 * x[1] * x[3] * x[6] * x[9] - 0.0638 * x[1] * x[3] * x[6] * x[10] + 0.9879 * x[1] * x[3] * x[7] * x[8] + 0.8635 * x[1] * x[3] * x[7] * x[9] + 0.4333 * x[1] * x[3] * x[7] * x[10] + 0.8267 * x[1] * x[3] * x[8] * x[9] + 0.3304 * x[1] * x[3] * x[8] * x[10] + 0.7375 * x[1] * x[3] * x[9] * x[10] + 0.1234 * x[1] * x[4] * x[5] * x[6] - 0.2028 * x[1] * x[4] * x[5] * x[7] + 0.4864 * x[1] * x[4] * x[5] * x[8] + 0.4254 * x[1] * x[4] * x[5] * x[9] - 0.7986 * x[1] * x[4] * x[5] * x[10] - 0.3318 * x[1] * x[4] * x[6] * x[7] + 0.7505 * x[1] * x[4] * x[6] * x[8] + 0.8088 * x[1] * x[4] * x[6] * x[9] - 0.4503 * x[1] * x[4] * x[6] * x[10] + 0.8307 * x[1] * x[4] * x[7] * x[8] - 0.9624 * x[1] * x[4] * x[7] * x[9] - 0.172 * x[1] * x[4] * x[7] * x[10] + 0.2328 * x[1] * x[4] * x[8] * x[9] - 0.0483 * x[1] * x[4] * x[8] * x[10] - 0.8543 * x[1] * x[4] * x[9] * x[10] - 0.1414 * x[1] * x[5] * x[6] * x[7] - 0.6745 * x[1] * x[5] * x[6] * x[8] + 0.2956 * x[1] * x[5] * x[6] * x[9] - 0.9646 * x[1] * x[5] * x[6] * x[10] + 0.6631 * x[1] * x[5] * x[7] * x[8] - 0.921 * x[1] * x[5] * x[7] * x[9] + 0.7216 * x[1] * x[5] * x[7] * x[10] - 0.0916 * x[1] * x[5] * x[8] * x[9] + 0.5066 * x[1] * x[5] * x[8] * x[10] - 0.2279 * x[1] * x[5] * x[9] * x[10] + 0.4388 * x[1] * x[6] * x[7] * x[8] + 0.1251 * x[1] * x[6] * x[7] * x[9] - 0.4666 * x[1] * x[6] * x[7] * x[10] - 0.6096 * x[1] * x[6] * x[8] * x[9] - 0.1296 * x[1] * x[6] * x[8] * x[10] + 0.147 * x[1] * x[6] * x[9] * x[10] - 0.8773 * x[1] * x[7] * x[8] * x[9] + 0.3256 * x[1] * x[7] * x[8] * x[10] + 0.1917 * x[1] * x[7] * x[9] * x[10] - 0.7454 * x[1] * x[8] * x[9] * x[10] + 0.953 * x[2] * x[3] * x[4] * x[5] - 0.2524 * x[2] * x[3] * x[4] * x[6] + 0.6998 * x[2] * x[3] * x[4] * x[7] + 0.9019 * x[2] * x[3] * x[4] * x[8] + 0.0886 * x[2] * x[3] * x[4] * x[9] - 0.745 * x[2] * x[3] * x[4] * x[10] + 0.7499 * x[2] * x[3] * x[5] * x[6] + 0.064 * x[2] * x[3] * x[5] * x[7] - 0.919 * x[2] * x[3] * x[5] * x[8] - 0.9064 * x[2] * x[3] * x[5] * x[9] + 0.2797 * x[2] * x[3] * x[5] * x[10] - 0.6761 * x[2] * x[3] * x[6] * x[7] - 0.9433 * x[2] * x[3] * x[6] * x[8] + 0.4738 * x[2] * x[3] * x[6] * x[9] - 0.469 * x[2] * x[3] * x[6] * x[10] - 0.6195 * x[2] * x[3] * x[7] * x[8] + 0.4109 * x[2] * x[3] * x[7] * x[9] + 0.774 * x[2] * x[3] * x[7] * x[10] - 0.6599 * x[2] * x[3] * x[8] * x[9] + 0.5277 * x[2] * x[3] * x[8] * x[10] - 0.207 * x[2] * x[3] * x[9] * x[10] + 0.7556 * x[2] * x[4] * x[5] * x[6] - 0.0444 * x[2] * x[4] * x[5] * x[7] - 0.6359 * x[2] * x[4] * x[5] * x[8] + 0.5783 * x[2] * x[4] * x[5] * x[9] + 0.4262 * x[2] * x[4] * x[5] * x[10] - 0.5666 * x[2] * x[4] * x[6] * x[7] + 0.4188 * x[2] * x[4] * x[6] * x[8] + 0.3495 * x[2] * x[4] * x[6] * x[9] - 0.6488 * x[2] * x[4] * x[6] * x[10] - 0.9492 * x[2] * x[4] * x[7] * x[8] - 0.2321 * x[2] * x[4] * x[7] * x[9] - 0.0055 * x[2] * x[4] * x[7] * x[10] - 0.556 * x[2] * x[4] * x[8] * x[9] + 0.3175 * x[2] * x[4] * x[8] * x[10] + 0.392 * x[2] * x[4] * x[9] * x[10] + 0.7571 * x[2] * x[5] * x[6] * x[7] - 0.123 * x[2] * x[5] * x[6] * x[8] - 0.9402 * x[2] * x[5] * x[6] * x[9] + 0.9707 * x[2] * x[5] * x[6] * x[10] - 0.9632 * x[2] * x[5] * x[7] * x[8] + 0.5879 * x[2] * x[5] * x[7] * x[9] + 0.7006 * x[2] * x[5] * x[7] * x[10] + 0.3368 * x[2] * x[5] * x[8] * x[9] + 0.7005 * x[2] * x[5] * x[8] * x[10] - 0.9946 * x[2] * x[5] * x[9] * x[10] - 0.5453 * x[2] * x[6] * x[7] * x[8] - 0.6007 * x[2] * x[6] * x[7] * x[9] + 0.1658 * x[2] * x[6] * x[7] * x[10] + 0.5857 * x[2] * x[6] * x[8] * x[9] - 0.6648 * x[2] * x[6] * x[8] * x[10] - 0.3842 * x[2] * x[6] * x[9] * x[10] - 0.8785 * x[2] * x[7] * x[8] * x[9] - 0.3002 * x[2] * x[7] * x[8] * x[10] - 0.1467 * x[2] * x[7] * x[9] * x[10] + 0.5581 * x[2] * x[8] * x[9] * x[10] + 0.255 * x[3] * x[4] * x[5] * x[6] - 0.3062 * x[3] * x[4] * x[5] * x[7] - 0.1995 * x[3] * x[4] * x[5] * x[8] + 0.7855 * x[3] * x[4] * x[5] * x[9] + 0.076 * x[3] * x[4] * x[5] * x[10] + 0.9889 * x[3] * x[4] * x[6] * x[7] + 0.6766 * x[3] * x[4] * x[6] * x[8] + 0.3158 * x[3] * x[4] * x[6] * x[9] - 0.8643 * x[3] * x[4] * x[6] * x[10] - 0.8024 * x[3] * x[4] * x[7] * x[8] - 0.6817 * x[3] * x[4] * x[7] * x[9] - 0.9275 * x[3] * x[4] * x[7] * x[10] + 0.5669 * x[3] * x[4] * x[8] * x[9] - 0.8213 * x[3] * x[4] * x[8] * x[10] + 0.3068 * x[3] * x[4] * x[9] * x[10] + 0.9216 * x[3] * x[5] * x[6] * x[7] + 0.8245 * x[3] * x[5] * x[6] * x[8] - 0.387 * x[3] * x[5] * x[6] * x[9] + 0.2332 * x[3] * x[5] * x[6] * x[10] - 0.2114 * x[3] * x[5] * x[7] * x[8] - 0.5222 * x[3] * x[5] * x[7] * x[9] - 0.1285 * x[3] * x[5] * x[7] * x[10] + 0.2733 * x[3] * x[5] * x[8] * x[9] - 0.5025 * x[3] * x[5] * x[8] * x[10] - 0.3684 * x[3] * x[5] * x[9] * x[10] - 0.1281 * x[3] * x[6] * x[7] * x[8] + 0.7043 * x[3] * x[6] * x[7] * x[9] + 0.4752 * x[3] * x[6] * x[7] * x[10] + 0.4398 * x[3] * x[6] * x[8] * x[9] - 0.2425 * x[3] * x[6] * x[8] * x[10] + 0.0265 * x[3] * x[6] * x[9] * x[10] + 0.1761 * x[3] * x[7] * x[8] * x[9] + 0.6789 * x[3] * x[7] * x[8] * x[10] - 0.2652 * x[3] * x[7] * x[9] * x[10] - 0.7416 * x[3] * x[8] * x[9] * x[10] + 0.3104 * x[4] * x[5] * x[6] * x[7] + 0.5838 * x[4] * x[5] * x[6] * x[8] - 0.2481 * x[4] * x[5] * x[6] * x[9] - 0.5737 * x[4] * x[5] * x[6] * x[10] + 0.1995 * x[4] * x[5] * x[7] * x[8] + 0.7254 * x[4] * x[5] * x[7] * x[9] - 0.6076 * x[4] * x[5] * x[7] * x[10] + 0.2583 * x[4] * x[5] * x[8] * x[9] + 0.3748 * x[4] * x[5] * x[8] * x[10] - 0.821 * x[4] * x[5] * x[9] * x[10] - 0.7231 * x[4] * x[6] * x[7] * x[8] + 0.792 * x[4] * x[6] * x[7] * x[9] + 0.1935 * x[4] * x[6] * x[7] * x[10] + 0.3677 * x[4] * x[6] * x[8] * x[9] - 0.3893 * x[4] * x[6] * x[8] * x[10] - 0.5531 * x[4] * x[6] * x[9] * x[10] + 0.3063 * x[4] * x[7] * x[8] * x[9] - 0.3756 * x[4] * x[7] * x[8] * x[10] + 0.9983 * x[4] * x[7] * x[9] * x[10] - 0.4544 * x[4] * x[8] * x[9] * x[10] + 0.8651 * x[5] * x[6] * x[7] * x[8] + 0.8738 * x[5] * x[6] * x[7] * x[9] + 0.7123 * x[5] * x[6] * x[7] * x[10] - 0.789 * x[5] * x[6] * x[8] * x[9] - 0.9015 * x[5] * x[6] * x[8] * x[10] + 0.8536 * x[5] * x[6] * x[9] * x[10] - 0.6222 * x[5] * x[7] * x[8] * x[9] + 0.531 * x[5] * x[7] * x[8] * x[10] - 0.7534 * x[5] * x[7] * x[9] * x[10] + 0.1807 * x[5] * x[8] * x[9] * x[10] + 0.8496 * x[6] * x[7] * x[8] * x[9] + 0.0791 * x[6] * x[7] * x[8] * x[10] + 0.8057 * x[6] * x[7] * x[9] * x[10] - 0.81 * x[6] * x[8] * x[9] * x[10] + 0.7906 * x[7] * x[8] * x[9] * x[10] <= 9.957 ) e9 = replace_expr(e9, x) JuMP.add_nonlinear_constraint(m, e9) e10 = :( (-0.6891 * x[1] * x[2]) - 0.416 * x[1] * x[3] - 0.4715 * x[1] * x[4] + 0.6858 * x[1] * x[5] - 0.4223 * x[1] * x[6] + 0.7652 * x[1] * x[7] + 0.7955 * x[1] * x[8] + 0.5377 * x[1] * x[9] + 0.9667 * x[1] * x[10] - 0.8157 * x[2] * x[3] - 0.9023 * x[2] * x[4] - 0.5467 * x[2] * x[5] - 0.3177 * x[2] * x[6] - 0.9398 * x[2] * x[7] + 0.2349 * x[2] * x[8] + 0.001 * x[2] * x[9] + 0.3641 * x[2] * x[10] - 0.9461 * x[3] * x[4] + 0.1124 * x[3] * x[5] + 0.0992 * x[3] * x[6] + 0.0372 * x[3] * x[7] - 0.6933 * x[3] * x[8] + 0.9793 * x[3] * x[9] - 0.2495 * x[3] * x[10] - 0.865 * x[4] * x[5] - 0.5344 * x[4] * x[6] + 0.3443 * x[4] * x[7] + 0.0946 * x[4] * x[8] + 0.99 * x[4] * x[9] + 0.1293 * x[4] * x[10] - 0.1439 * x[5] * x[6] - 0.1023 * x[5] * x[7] + 0.4527 * x[5] * x[8] - 0.9526 * x[5] * x[9] - 0.9404 * x[5] * x[10] - 0.4876 * x[6] * x[7] - 0.4892 * x[6] * x[8] - 0.8809 * x[6] * x[9] + 0.5844 * x[6] * x[10] - 0.5909 * x[7] * x[8] + 0.8432 * x[7] * x[9] + 0.4261 * x[7] * x[10] - 0.7159 * x[8] * x[9] + 0.6584 * x[8] * x[10] + 0.0654 * x[9] * x[10] + 0.9716 * x[1] + 0.3374 * x[2] - 0.6073 * x[3] - 0.4237 * x[4] + 0.4155 * x[5] + 0.8152 * x[6] - 0.6799 * x[7] - 0.7925 * x[8] - 0.3313 * x[9] - 0.8543 * x[10] + (-0.1007 * x[1] * x[2] * x[3]) - 0.5326 * x[1] * x[2] * x[4] + 0.6566 * x[1] * x[2] * x[5] + 0.1937 * x[1] * x[2] * x[6] - 0.9996 * x[1] * x[2] * x[7] - 0.5367 * x[1] * x[2] * x[8] - 0.1918 * x[1] * x[2] * x[9] - 0.8802 * x[1] * x[2] * x[10] - 0.6497 * x[1] * x[3] * x[4] - 0.3399 * x[1] * x[3] * x[5] + 0.0515 * x[1] * x[3] * x[6] + 0.8846 * x[1] * x[3] * x[7] + 0.022 * x[1] * x[3] * x[8] + 0.9133 * x[1] * x[3] * x[9] - 0.7262 * x[1] * x[3] * x[10] - 0.7918 * x[1] * x[4] * x[5] - 0.6313 * x[1] * x[4] * x[6] + 0.9966 * x[1] * x[4] * x[7] - 0.6426 * x[1] * x[4] * x[8] - 0.3197 * x[1] * x[4] * x[9] - 0.2285 * x[1] * x[4] * x[10] + 0.0003 * x[1] * x[5] * x[6] + 0.8027 * x[1] * x[5] * x[7] + 0.8966 * x[1] * x[5] * x[8] + 0.6134 * x[1] * x[5] * x[9] + 0.0598 * x[1] * x[5] * x[10] - 0.9651 * x[1] * x[6] * x[7] + 0.9353 * x[1] * x[6] * x[8] + 0.8902 * x[1] * x[6] * x[9] - 0.007 * x[1] * x[6] * x[10] + 0.5675 * x[1] * x[7] * x[8] + 0.8712 * x[1] * x[7] * x[9] + 0.2321 * x[1] * x[7] * x[10] - 0.3199 * x[1] * x[8] * x[9] + 0.0664 * x[1] * x[8] * x[10] - 0.3827 * x[1] * x[9] * x[10] + 0.4324 * x[2] * x[3] * x[4] + 0.9173 * x[2] * x[3] * x[5] + 0.0144 * x[2] * x[3] * x[6] + 0.0691 * x[2] * x[3] * x[7] - 0.2872 * x[2] * x[3] * x[8] - 0.8985 * x[2] * x[3] * x[9] + 0.0914 * x[2] * x[3] * x[10] + 0.1849 * x[2] * x[4] * x[5] - 0.0897 * x[2] * x[4] * x[6] - 0.7576 * x[2] * x[4] * x[7] - 0.1726 * x[2] * x[4] * x[8] + 0.9337 * x[2] * x[4] * x[9] + 0.0318 * x[2] * x[4] * x[10] - 0.2369 * x[2] * x[5] * x[6] + 0.9287 * x[2] * x[5] * x[7] - 0.9551 * x[2] * x[5] * x[8] - 0.6268 * x[2] * x[5] * x[9] + 0.4162 * x[2] * x[5] * x[10] + 0.7695 * x[2] * x[6] * x[7] + 0.615 * x[2] * x[6] * x[8] + 0.4118 * x[2] * x[6] * x[9] - 0.8214 * x[2] * x[6] * x[10] + 0.1937 * x[2] * x[7] * x[8] + 0.2846 * x[2] * x[7] * x[9] - 0.1472 * x[2] * x[7] * x[10] + 0.307 * x[2] * x[8] * x[9] + 0.7698 * x[2] * x[8] * x[10] - 0.6545 * x[2] * x[9] * x[10] - 0.5534 * x[3] * x[4] * x[5] + 0.0359 * x[3] * x[4] * x[6] + 0.7667 * x[3] * x[4] * x[7] + 0.0927 * x[3] * x[4] * x[8] - 0.5321 * x[3] * x[4] * x[9] - 0.4937 * x[3] * x[4] * x[10] + 0.7388 * x[3] * x[5] * x[6] + 0.9809 * x[3] * x[5] * x[7] + 0.0004 * x[3] * x[5] * x[8] + 0.695 * x[3] * x[5] * x[9] + 0.5494 * x[3] * x[5] * x[10] + 0.6195 * x[3] * x[6] * x[7] + 0.2356 * x[3] * x[6] * x[8] - 0.1412 * x[3] * x[6] * x[9] + 0.7508 * x[3] * x[6] * x[10] - 0.769 * x[3] * x[7] * x[8] - 0.1995 * x[3] * x[7] * x[9] + 0.7897 * x[3] * x[7] * x[10] - 0.9464 * x[3] * x[8] * x[9] - 0.0035 * x[3] * x[8] * x[10] + 0.7893 * x[3] * x[9] * x[10] + 0.2009 * x[4] * x[5] * x[6] + 0.573 * x[4] * x[5] * x[7] + 0.0687 * x[4] * x[5] * x[8] + 0.3609 * x[4] * x[5] * x[9] + 0.7069 * x[4] * x[5] * x[10] + 0.3176 * x[4] * x[6] * x[7] - 0.2025 * x[4] * x[6] * x[8] + 0.9283 * x[4] * x[6] * x[9] + 0.6098 * x[4] * x[6] * x[10] + 0.6859 * x[4] * x[7] * x[8] - 0.3653 * x[4] * x[7] * x[9] - 0.406 * x[4] * x[7] * x[10] + 0.6706 * x[4] * x[8] * x[9] - 0.4475 * x[4] * x[8] * x[10] - 0.1989 * x[4] * x[9] * x[10] - 0.5974 * x[5] * x[6] * x[7] + 0.4318 * x[5] * x[6] * x[8] + 0.3654 * x[5] * x[6] * x[9] - 0.2119 * x[5] * x[6] * x[10] - 0.0018 * x[5] * x[7] * x[8] - 0.9865 * x[5] * x[7] * x[9] - 0.8902 * x[5] * x[7] * x[10] - 0.6653 * x[5] * x[8] * x[9] + 0.3769 * x[5] * x[8] * x[10] - 0.2194 * x[5] * x[9] * x[10] + 0.8789 * x[6] * x[7] * x[8] - 0.7093 * x[6] * x[7] * x[9] + 0.3827 * x[6] * x[7] * x[10] - 0.0405 * x[6] * x[8] * x[9] + 0.7626 * x[6] * x[8] * x[10] + 0.4358 * x[6] * x[9] * x[10] + 0.7368 * x[7] * x[8] * x[9] - 0.0174 * x[7] * x[8] * x[10] - 0.4531 * x[7] * x[9] * x[10] + 0.3375 * x[8] * x[9] * x[10] + (-0.4826 * x[1] * x[2] * x[3] * x[4]) - 0.2493 * x[1] * x[2] * x[3] * x[5] + 0.5075 * x[1] * x[2] * x[3] * x[6] - 0.6548 * x[1] * x[2] * x[3] * x[7] - 0.7159 * x[1] * x[2] * x[3] * x[8] - 0.7049 * x[1] * x[2] * x[3] * x[9] - 0.3438 * x[1] * x[2] * x[3] * x[10] - 0.1976 * x[1] * x[2] * x[4] * x[5] + 0.0079 * x[1] * x[2] * x[4] * x[6] - 0.8311 * x[1] * x[2] * x[4] * x[7] + 0.3371 * x[1] * x[2] * x[4] * x[8] + 0.6852 * x[1] * x[2] * x[4] * x[9] + 0.2669 * x[1] * x[2] * x[4] * x[10] + 0.3508 * x[1] * x[2] * x[5] * x[6] - 0.281 * x[1] * x[2] * x[5] * x[7] - 0.1383 * x[1] * x[2] * x[5] * x[8] - 0.5659 * x[1] * x[2] * x[5] * x[9] + 0.008 * x[1] * x[2] * x[5] * x[10] - 0.2438 * x[1] * x[2] * x[6] * x[7] + 0.8352 * x[1] * x[2] * x[6] * x[8] - 0.6792 * x[1] * x[2] * x[6] * x[9] - 0.505 * x[1] * x[2] * x[6] * x[10] - 0.117 * x[1] * x[2] * x[7] * x[8] - 0.3067 * x[1] * x[2] * x[7] * x[9] - 0.3803 * x[1] * x[2] * x[7] * x[10] + 0.7882 * x[1] * x[2] * x[8] * x[9] + 0.3372 * x[1] * x[2] * x[8] * x[10] - 0.919 * x[1] * x[2] * x[9] * x[10] - 0.7383 * x[1] * x[3] * x[4] * x[5] + 0.7541 * x[1] * x[3] * x[4] * x[6] + 0.5834 * x[1] * x[3] * x[4] * x[7] + 0.1474 * x[1] * x[3] * x[4] * x[8] + 0.0948 * x[1] * x[3] * x[4] * x[9] - 0.3359 * x[1] * x[3] * x[4] * x[10] + 0.165 * x[1] * x[3] * x[5] * x[6] + 0.3496 * x[1] * x[3] * x[5] * x[7] + 0.6279 * x[1] * x[3] * x[5] * x[8] - 0.6031 * x[1] * x[3] * x[5] * x[9] + 0.1115 * x[1] * x[3] * x[5] * x[10] - 0.7796 * x[1] * x[3] * x[6] * x[7] - 0.5661 * x[1] * x[3] * x[6] * x[8] + 0.1693 * x[1] * x[3] * x[6] * x[9] + 0.957 * x[1] * x[3] * x[6] * x[10] + 0.7301 * x[1] * x[3] * x[7] * x[8] - 0.1917 * x[1] * x[3] * x[7] * x[9] + 0.9096 * x[1] * x[3] * x[7] * x[10] - 0.2321 * x[1] * x[3] * x[8] * x[9] - 0.1408 * x[1] * x[3] * x[8] * x[10] + 0.9235 * x[1] * x[3] * x[9] * x[10] - 0.5794 * x[1] * x[4] * x[5] * x[6] + 0.227 * x[1] * x[4] * x[5] * x[7] - 0.3337 * x[1] * x[4] * x[5] * x[8] - 0.3646 * x[1] * x[4] * x[5] * x[9] - 0.4327 * x[1] * x[4] * x[5] * x[10] - 0.1094 * x[1] * x[4] * x[6] * x[7] + 0.3825 * x[1] * x[4] * x[6] * x[8] + 0.5071 * x[1] * x[4] * x[6] * x[9] + 0.8944 * x[1] * x[4] * x[6] * x[10] - 0.3627 * x[1] * x[4] * x[7] * x[8] + 0.065 * x[1] * x[4] * x[7] * x[9] + 0.7137 * x[1] * x[4] * x[7] * x[10] + 0.5367 * x[1] * x[4] * x[8] * x[9] + 0.1169 * x[1] * x[4] * x[8] * x[10] + 0.1142 * x[1] * x[4] * x[9] * x[10] - 0.814 * x[1] * x[5] * x[6] * x[7] + 0.7162 * x[1] * x[5] * x[6] * x[8] + 0.4038 * x[1] * x[5] * x[6] * x[9] + 0.3275 * x[1] * x[5] * x[6] * x[10] - 0.7578 * x[1] * x[5] * x[7] * x[8] + 0.2681 * x[1] * x[5] * x[7] * x[9] + 0.618 * x[1] * x[5] * x[7] * x[10] + 0.8112 * x[1] * x[5] * x[8] * x[9] + 0.652 * x[1] * x[5] * x[8] * x[10] + 0.5574 * x[1] * x[5] * x[9] * x[10] + 0.1105 * x[1] * x[6] * x[7] * x[8] - 0.685 * x[1] * x[6] * x[7] * x[9] + 0.2517 * x[1] * x[6] * x[7] * x[10] - 0.2113 * x[1] * x[6] * x[8] * x[9] - 0.9952 * x[1] * x[6] * x[8] * x[10] - 0.9702 * x[1] * x[6] * x[9] * x[10] - 0.3537 * x[1] * x[7] * x[8] * x[9] + 0.326 * x[1] * x[7] * x[8] * x[10] - 0.2615 * x[1] * x[7] * x[9] * x[10] - 0.1564 * x[1] * x[8] * x[9] * x[10] + 0.9175 * x[2] * x[3] * x[4] * x[5] - 0.5903 * x[2] * x[3] * x[4] * x[6] + 0.9029 * x[2] * x[3] * x[4] * x[7] + 0.3648 * x[2] * x[3] * x[4] * x[8] - 0.9126 * x[2] * x[3] * x[4] * x[9] - 0.644 * x[2] * x[3] * x[4] * x[10] + 0.7789 * x[2] * x[3] * x[5] * x[6] + 0.0203 * x[2] * x[3] * x[5] * x[7] + 0.8897 * x[2] * x[3] * x[5] * x[8] - 0.5469 * x[2] * x[3] * x[5] * x[9] - 0.2008 * x[2] * x[3] * x[5] * x[10] + 0.6762 * x[2] * x[3] * x[6] * x[7] + 0.3243 * x[2] * x[3] * x[6] * x[8] - 0.6903 * x[2] * x[3] * x[6] * x[9] + 0.2058 * x[2] * x[3] * x[6] * x[10] + 0.3876 * x[2] * x[3] * x[7] * x[8] + 0.3695 * x[2] * x[3] * x[7] * x[9] + 0.0322 * x[2] * x[3] * x[7] * x[10] - 0.502 * x[2] * x[3] * x[8] * x[9] - 0.9679 * x[2] * x[3] * x[8] * x[10] + 0.6939 * x[2] * x[3] * x[9] * x[10] - 0.7335 * x[2] * x[4] * x[5] * x[6] - 0.0071 * x[2] * x[4] * x[5] * x[7] + 0.7911 * x[2] * x[4] * x[5] * x[8] - 0.8217 * x[2] * x[4] * x[5] * x[9] - 0.6734 * x[2] * x[4] * x[5] * x[10] + 0.5343 * x[2] * x[4] * x[6] * x[7] - 0.6164 * x[2] * x[4] * x[6] * x[8] - 0.0679 * x[2] * x[4] * x[6] * x[9] - 0.3156 * x[2] * x[4] * x[6] * x[10] - 0.9986 * x[2] * x[4] * x[7] * x[8] - 0.0287 * x[2] * x[4] * x[7] * x[9] + 0.3193 * x[2] * x[4] * x[7] * x[10] - 0.92 * x[2] * x[4] * x[8] * x[9] - 0.147 * x[2] * x[4] * x[8] * x[10] - 0.9656 * x[2] * x[4] * x[9] * x[10] - 0.9044 * x[2] * x[5] * x[6] * x[7] + 0.9256 * x[2] * x[5] * x[6] * x[8] - 0.0849 * x[2] * x[5] * x[6] * x[9] - 0.2946 * x[2] * x[5] * x[6] * x[10] + 0.4543 * x[2] * x[5] * x[7] * x[8] - 0.6516 * x[2] * x[5] * x[7] * x[9] - 0.2951 * x[2] * x[5] * x[7] * x[10] - 0.5713 * x[2] * x[5] * x[8] * x[9] + 0.9107 * x[2] * x[5] * x[8] * x[10] + 0.5607 * x[2] * x[5] * x[9] * x[10] + 0.5813 * x[2] * x[6] * x[7] * x[8] + 0.1879 * x[2] * x[6] * x[7] * x[9] + 0.0879 * x[2] * x[6] * x[7] * x[10] - 0.1947 * x[2] * x[6] * x[8] * x[9] - 0.5199 * x[2] * x[6] * x[8] * x[10] - 0.661 * x[2] * x[6] * x[9] * x[10] + 0.7548 * x[2] * x[7] * x[8] * x[9] - 0.8094 * x[2] * x[7] * x[8] * x[10] - 0.8729 * x[2] * x[7] * x[9] * x[10] + 0.703 * x[2] * x[8] * x[9] * x[10] - 0.6193 * x[3] * x[4] * x[5] * x[6] + 0.863 * x[3] * x[4] * x[5] * x[7] + 0.3731 * x[3] * x[4] * x[5] * x[8] + 0.975 * x[3] * x[4] * x[5] * x[9] - 0.9151 * x[3] * x[4] * x[5] * x[10] - 0.1013 * x[3] * x[4] * x[6] * x[7] - 0.7563 * x[3] * x[4] * x[6] * x[8] - 0.9394 * x[3] * x[4] * x[6] * x[9] - 0.1056 * x[3] * x[4] * x[6] * x[10] + 0.5528 * x[3] * x[4] * x[7] * x[8] - 0.4469 * x[3] * x[4] * x[7] * x[9] - 0.6919 * x[3] * x[4] * x[7] * x[10] + 0.6454 * x[3] * x[4] * x[8] * x[9] - 0.7436 * x[3] * x[4] * x[8] * x[10] - 0.4406 * x[3] * x[4] * x[9] * x[10] - 0.6553 * x[3] * x[5] * x[6] * x[7] + 0.0815 * x[3] * x[5] * x[6] * x[8] - 0.2592 * x[3] * x[5] * x[6] * x[9] - 0.3449 * x[3] * x[5] * x[6] * x[10] - 0.723 * x[3] * x[5] * x[7] * x[8] + 0.7367 * x[3] * x[5] * x[7] * x[9] - 0.5166 * x[3] * x[5] * x[7] * x[10] - 0.6852 * x[3] * x[5] * x[8] * x[9] + 0.5099 * x[3] * x[5] * x[8] * x[10] - 0.1606 * x[3] * x[5] * x[9] * x[10] - 0.8887 * x[3] * x[6] * x[7] * x[8] + 0.499 * x[3] * x[6] * x[7] * x[9] + 0.6686 * x[3] * x[6] * x[7] * x[10] + 0.4415 * x[3] * x[6] * x[8] * x[9] - 0.2126 * x[3] * x[6] * x[8] * x[10] - 0.8338 * x[3] * x[6] * x[9] * x[10] - 0.8861 * x[3] * x[7] * x[8] * x[9] - 0.9484 * x[3] * x[7] * x[8] * x[10] - 0.2048 * x[3] * x[7] * x[9] * x[10] - 0.1835 * x[3] * x[8] * x[9] * x[10] - 0.2758 * x[4] * x[5] * x[6] * x[7] - 0.5844 * x[4] * x[5] * x[6] * x[8] + 0.3621 * x[4] * x[5] * x[6] * x[9] + 0.6829 * x[4] * x[5] * x[6] * x[10] - 0.5893 * x[4] * x[5] * x[7] * x[8] + 0.5491 * x[4] * x[5] * x[7] * x[9] - 0.8351 * x[4] * x[5] * x[7] * x[10] + 0.5027 * x[4] * x[5] * x[8] * x[9] + 0.7318 * x[4] * x[5] * x[8] * x[10] - 0.8597 * x[4] * x[5] * x[9] * x[10] + 0.7574 * x[4] * x[6] * x[7] * x[8] - 0.9517 * x[4] * x[6] * x[7] * x[9] - 0.6703 * x[4] * x[6] * x[7] * x[10] + 0.1705 * x[4] * x[6] * x[8] * x[9] + 0.3118 * x[4] * x[6] * x[8] * x[10] - 0.299 * x[4] * x[6] * x[9] * x[10] + 0.1919 * x[4] * x[7] * x[8] * x[9] + 0.2 * x[4] * x[7] * x[8] * x[10] + 0.0314 * x[4] * x[7] * x[9] * x[10] - 0.9798 * x[4] * x[8] * x[9] * x[10] - 0.4391 * x[5] * x[6] * x[7] * x[8] + 0.4177 * x[5] * x[6] * x[7] * x[9] - 0.3681 * x[5] * x[6] * x[7] * x[10] - 0.7607 * x[5] * x[6] * x[8] * x[9] + 0.6108 * x[5] * x[6] * x[8] * x[10] + 0.9076 * x[5] * x[6] * x[9] * x[10] + 0.3781 * x[5] * x[7] * x[8] * x[9] + 0.4656 * x[5] * x[7] * x[8] * x[10] - 0.965 * x[5] * x[7] * x[9] * x[10] - 0.7647 * x[5] * x[8] * x[9] * x[10] - 0.7166 * x[6] * x[7] * x[8] * x[9] - 0.7744 * x[6] * x[7] * x[8] * x[10] - 0.1137 * x[6] * x[7] * x[9] * x[10] + 0.2768 * x[6] * x[8] * x[9] * x[10] - 0.1211 * x[7] * x[8] * x[9] * x[10] <= 84.029 ) e10 = replace_expr(e10, x) JuMP.add_nonlinear_constraint(m, e10) e11 = :( 0.591 * x[1] * x[3] - 0.6987 * x[1] * x[2] + 0.7248 * x[1] * x[4] - 0.3342 * x[1] * x[5] + 0.2565 * x[1] * x[6] + 0.0506 * x[1] * x[7] + 0.1018 * x[1] * x[8] + 0.6964 * x[1] * x[9] - 0.3124 * x[1] * x[10] - 0.0906 * x[2] * x[3] - 0.4594 * x[2] * x[4] - 0.7137 * x[2] * x[5] + 0.6835 * x[2] * x[6] - 0.9256 * x[2] * x[7] + 0.8048 * x[2] * x[8] - 0.8525 * x[2] * x[9] + 0.6184 * x[2] * x[10] + 0.6039 * x[3] * x[4] - 0.1299 * x[3] * x[5] + 0.7409 * x[3] * x[6] + 0.7098 * x[3] * x[7] - 0.7156 * x[3] * x[8] + 0.7937 * x[3] * x[9] - 0.9671 * x[3] * x[10] - 0.8201 * x[4] * x[5] - 0.9828 * x[4] * x[6] - 0.2199 * x[4] * x[7] - 0.1975 * x[4] * x[8] + 0.6526 * x[4] * x[9] + 0.8052 * x[4] * x[10] + 0.2971 * x[5] * x[6] + 0.1198 * x[5] * x[7] + 0.217 * x[5] * x[8] + 0.0079 * x[5] * x[9] - 0.3018 * x[5] * x[10] + 0.9843 * x[6] * x[7] - 0.9696 * x[6] * x[8] + 0.8791 * x[6] * x[9] - 0.9214 * x[6] * x[10] - 0.6654 * x[7] * x[8] + 0.8961 * x[7] * x[9] + 0.7488 * x[7] * x[10] - 0.816 * x[8] * x[9] + 0.7283 * x[8] * x[10] + 0.7735 * x[9] * x[10] + 0.4313 * x[1] - 0.8995 * x[2] - 0.0242 * x[3] + 0.1137 * x[4] - 0.0807 * x[5] + 0.3716 * x[6] - 0.9041 * x[7] - 0.0494 * x[8] + 0.8577 * x[9] + 0.4838 * x[10] + 0.4225 * x[1] * x[2] * x[4] - 0.2484 * x[1] * x[2] * x[3] + 0.9204 * x[1] * x[2] * x[5] + 0.4425 * x[1] * x[2] * x[6] + 0.8533 * x[1] * x[2] * x[7] - 0.8434 * x[1] * x[2] * x[8] + 0.3368 * x[1] * x[2] * x[9] - 0.2922 * x[1] * x[2] * x[10] - 0.674 * x[1] * x[3] * x[4] - 0.506 * x[1] * x[3] * x[5] + 0.45 * x[1] * x[3] * x[6] + 0.9451 * x[1] * x[3] * x[7] - 0.6033 * x[1] * x[3] * x[8] - 0.5666 * x[1] * x[3] * x[9] - 0.5187 * x[1] * x[3] * x[10] - 0.2378 * x[1] * x[4] * x[5] - 0.8728 * x[1] * x[4] * x[6] + 0.2078 * x[1] * x[4] * x[7] - 0.4754 * x[1] * x[4] * x[8] - 0.0257 * x[1] * x[4] * x[9] - 0.6292 * x[1] * x[4] * x[10] - 0.3056 * x[1] * x[5] * x[6] + 0.9041 * x[1] * x[5] * x[7] + 0.9193 * x[1] * x[5] * x[8] + 0.1786 * x[1] * x[5] * x[9] - 0.8288 * x[1] * x[5] * x[10] + 0.8871 * x[1] * x[6] * x[7] - 0.5883 * x[1] * x[6] * x[8] - 0.4245 * x[1] * x[6] * x[9] + 0.2509 * x[1] * x[6] * x[10] - 0.8896 * x[1] * x[7] * x[8] - 0.7735 * x[1] * x[7] * x[9] + 0.6383 * x[1] * x[7] * x[10] - 0.7938 * x[1] * x[8] * x[9] - 0.6181 * x[1] * x[8] * x[10] + 0.0857 * x[1] * x[9] * x[10] - 0.4053 * x[2] * x[3] * x[4] + 0.2158 * x[2] * x[3] * x[5] - 0.7104 * x[2] * x[3] * x[6] + 0.1614 * x[2] * x[3] * x[7] - 0.5585 * x[2] * x[3] * x[8] - 0.0765 * x[2] * x[3] * x[9] - 0.9573 * x[2] * x[3] * x[10] + 0.744 * x[2] * x[4] * x[5] - 0.1551 * x[2] * x[4] * x[6] + 0.4025 * x[2] * x[4] * x[7] + 0.9942 * x[2] * x[4] * x[8] - 0.2869 * x[2] * x[4] * x[9] - 0.6106 * x[2] * x[4] * x[10] + 0.5482 * x[2] * x[5] * x[6] - 0.5155 * x[2] * x[5] * x[7] + 0.2689 * x[2] * x[5] * x[8] + 0.291 * x[2] * x[5] * x[9] - 0.6436 * x[2] * x[5] * x[10] - 0.6477 * x[2] * x[6] * x[7] - 0.0194 * x[2] * x[6] * x[8] - 0.2997 * x[2] * x[6] * x[9] + 0.7213 * x[2] * x[6] * x[10] - 0.9991 * x[2] * x[7] * x[8] + 0.8354 * x[2] * x[7] * x[9] + 0.9739 * x[2] * x[7] * x[10] + 0.9231 * x[2] * x[8] * x[9] - 0.5433 * x[2] * x[8] * x[10] - 0.5059 * x[2] * x[9] * x[10] + 0.1579 * x[3] * x[4] * x[5] + 0.9595 * x[3] * x[4] * x[6] - 0.4744 * x[3] * x[4] * x[7] - 0.7872 * x[3] * x[4] * x[8] + 0.8894 * x[3] * x[4] * x[9] + 0.6219 * x[3] * x[4] * x[10] - 0.9093 * x[3] * x[5] * x[6] + 0.9121 * x[3] * x[5] * x[7] + 0.4676 * x[3] * x[5] * x[8] - 0.056 * x[3] * x[5] * x[9] + 0.7962 * x[3] * x[5] * x[10] + 0.2177 * x[3] * x[6] * x[7] - 0.1877 * x[3] * x[6] * x[8] + 0.2283 * x[3] * x[6] * x[9] + 0.5367 * x[3] * x[6] * x[10] - 0.594 * x[3] * x[7] * x[8] + 0.022 * x[3] * x[7] * x[9] - 0.9741 * x[3] * x[7] * x[10] - 0.7372 * x[3] * x[8] * x[9] - 0.0799 * x[3] * x[8] * x[10] + 0.6106 * x[3] * x[9] * x[10] + 0.4631 * x[4] * x[5] * x[6] - 0.7378 * x[4] * x[5] * x[7] - 0.8125 * x[4] * x[5] * x[8] - 0.4392 * x[4] * x[5] * x[9] - 0.7147 * x[4] * x[5] * x[10] - 0.974 * x[4] * x[6] * x[7] + 0.9874 * x[4] * x[6] * x[8] + 0.422 * x[4] * x[6] * x[9] + 0.6878 * x[4] * x[6] * x[10] + 0.12 * x[4] * x[7] * x[8] - 0.8755 * x[4] * x[7] * x[9] - 0.2555 * x[4] * x[7] * x[10] - 0.5743 * x[4] * x[8] * x[9] - 0.5735 * x[4] * x[8] * x[10] - 0.6477 * x[4] * x[9] * x[10] + 0.0007 * x[5] * x[6] * x[7] + 0.0896 * x[5] * x[6] * x[8] + 0.1403 * x[5] * x[6] * x[9] + 0.0392 * x[5] * x[6] * x[10] - 0.9063 * x[5] * x[7] * x[8] - 0.3817 * x[5] * x[7] * x[9] + 0.8622 * x[5] * x[7] * x[10] + 0.0331 * x[5] * x[8] * x[9] - 0.1539 * x[5] * x[8] * x[10] - 0.684 * x[5] * x[9] * x[10] + 0.8427 * x[6] * x[7] * x[8] + 0.679 * x[6] * x[7] * x[9] - 0.8744 * x[6] * x[7] * x[10] - 0.5763 * x[6] * x[8] * x[9] + 0.131 * x[6] * x[8] * x[10] + 0.7207 * x[6] * x[9] * x[10] + 0.2711 * x[7] * x[8] * x[9] + 0.901 * x[7] * x[8] * x[10] - 0.0142 * x[7] * x[9] * x[10] + 0.7093 * x[8] * x[9] * x[10] + 0.7493 * x[1] * x[2] * x[3] * x[5] - 0.7313 * x[1] * x[2] * x[3] * x[4] - 0.1795 * x[1] * x[2] * x[3] * x[6] - 0.6154 * x[1] * x[2] * x[3] * x[7] + 0.4774 * x[1] * x[2] * x[3] * x[8] + 0.2237 * x[1] * x[2] * x[3] * x[9] + 0.819 * x[1] * x[2] * x[3] * x[10] - 0.2799 * x[1] * x[2] * x[4] * x[5] - 0.4367 * x[1] * x[2] * x[4] * x[6] - 0.7202 * x[1] * x[2] * x[4] * x[7] + 0.7141 * x[1] * x[2] * x[4] * x[8] + 0.2112 * x[1] * x[2] * x[4] * x[9] + 0.7705 * x[1] * x[2] * x[4] * x[10] + 0.0843 * x[1] * x[2] * x[5] * x[6] + 0.3562 * x[1] * x[2] * x[5] * x[7] + 0.7516 * x[1] * x[2] * x[5] * x[8] + 0.6577 * x[1] * x[2] * x[5] * x[9] + 0.288 * x[1] * x[2] * x[5] * x[10] + 0.179 * x[1] * x[2] * x[6] * x[7] + 0.1567 * x[1] * x[2] * x[6] * x[8] - 0.3688 * x[1] * x[2] * x[6] * x[9] + 0.7408 * x[1] * x[2] * x[6] * x[10] - 0.4765 * x[1] * x[2] * x[7] * x[8] + 0.6741 * x[1] * x[2] * x[7] * x[9] + 0.112 * x[1] * x[2] * x[7] * x[10] - 0.8509 * x[1] * x[2] * x[8] * x[9] + 0.4165 * x[1] * x[2] * x[8] * x[10] - 0.9974 * x[1] * x[2] * x[9] * x[10] - 0.3871 * x[1] * x[3] * x[4] * x[5] + 0.6783 * x[1] * x[3] * x[4] * x[6] + 0.8508 * x[1] * x[3] * x[4] * x[7] - 0.7738 * x[1] * x[3] * x[4] * x[8] + 0.6638 * x[1] * x[3] * x[4] * x[9] + 0.5599 * x[1] * x[3] * x[4] * x[10] + 0.7158 * x[1] * x[3] * x[5] * x[6] + 0.1086 * x[1] * x[3] * x[5] * x[7] - 0.69 * x[1] * x[3] * x[5] * x[8] - 0.4714 * x[1] * x[3] * x[5] * x[9] + 0.6628 * x[1] * x[3] * x[5] * x[10] + 0.1565 * x[1] * x[3] * x[6] * x[7] + 0.2639 * x[1] * x[3] * x[6] * x[8] - 0.0214 * x[1] * x[3] * x[6] * x[9] - 0.6831 * x[1] * x[3] * x[6] * x[10] - 0.7759 * x[1] * x[3] * x[7] * x[8] + 0.3236 * x[1] * x[3] * x[7] * x[9] - 0.768 * x[1] * x[3] * x[7] * x[10] - 0.4247 * x[1] * x[3] * x[8] * x[9] + 0.4122 * x[1] * x[3] * x[8] * x[10] + 0.4506 * x[1] * x[3] * x[9] * x[10] + 0.3552 * x[1] * x[4] * x[5] * x[6] + 0.446 * x[1] * x[4] * x[5] * x[7] + 0.3144 * x[1] * x[4] * x[5] * x[8] + 0.4965 * x[1] * x[4] * x[5] * x[9] - 0.8063 * x[1] * x[4] * x[5] * x[10] - 0.612 * x[1] * x[4] * x[6] * x[7] + 0.7794 * x[1] * x[4] * x[6] * x[8] + 0.834 * x[1] * x[4] * x[6] * x[9] + 0.6108 * x[1] * x[4] * x[6] * x[10] + 0.8644 * x[1] * x[4] * x[7] * x[8] - 0.8542 * x[1] * x[4] * x[7] * x[9] - 0.2302 * x[1] * x[4] * x[7] * x[10] - 0.1178 * x[1] * x[4] * x[8] * x[9] - 0.9046 * x[1] * x[4] * x[8] * x[10] - 0.262 * x[1] * x[4] * x[9] * x[10] - 0.6183 * x[1] * x[5] * x[6] * x[7] + 0.6188 * x[1] * x[5] * x[6] * x[8] - 0.0381 * x[1] * x[5] * x[6] * x[9] - 0.7188 * x[1] * x[5] * x[6] * x[10] - 0.1034 * x[1] * x[5] * x[7] * x[8] + 0.4047 * x[1] * x[5] * x[7] * x[9] + 0.0084 * x[1] * x[5] * x[7] * x[10] - 0.4031 * x[1] * x[5] * x[8] * x[9] + 0.702 * x[1] * x[5] * x[8] * x[10] - 0.8478 * x[1] * x[5] * x[9] * x[10] + 0.7782 * x[1] * x[6] * x[7] * x[8] + 0.7223 * x[1] * x[6] * x[7] * x[9] + 0.5405 * x[1] * x[6] * x[7] * x[10] + 0.7626 * x[1] * x[6] * x[8] * x[9] - 0.2324 * x[1] * x[6] * x[8] * x[10] - 0.6926 * x[1] * x[6] * x[9] * x[10] - 0.4473 * x[1] * x[7] * x[8] * x[9] + 0.5227 * x[1] * x[7] * x[8] * x[10] - 0.1544 * x[1] * x[7] * x[9] * x[10] + 0.1788 * x[1] * x[8] * x[9] * x[10] - 0.8851 * x[2] * x[3] * x[4] * x[5] - 0.397 * x[2] * x[3] * x[4] * x[6] - 0.8556 * x[2] * x[3] * x[4] * x[7] + 0.5239 * x[2] * x[3] * x[4] * x[8] + 0.0308 * x[2] * x[3] * x[4] * x[9] - 0.7734 * x[2] * x[3] * x[4] * x[10] + 0.3039 * x[2] * x[3] * x[5] * x[6] - 0.7162 * x[2] * x[3] * x[5] * x[7] + 0.3885 * x[2] * x[3] * x[5] * x[8] - 0.999 * x[2] * x[3] * x[5] * x[9] - 0.1183 * x[2] * x[3] * x[5] * x[10] - 0.1821 * x[2] * x[3] * x[6] * x[7] + 0.6174 * x[2] * x[3] * x[6] * x[8] - 0.854 * x[2] * x[3] * x[6] * x[9] + 0.5544 * x[2] * x[3] * x[6] * x[10] + 0.232 * x[2] * x[3] * x[7] * x[8] - 0.6641 * x[2] * x[3] * x[7] * x[9] - 0.3447 * x[2] * x[3] * x[7] * x[10] + 0.6963 * x[2] * x[3] * x[8] * x[9] + 0.1228 * x[2] * x[3] * x[8] * x[10] + 0.1779 * x[2] * x[3] * x[9] * x[10] + 0.973 * x[2] * x[4] * x[5] * x[6] + 0.1374 * x[2] * x[4] * x[5] * x[7] - 0.5653 * x[2] * x[4] * x[5] * x[8] + 0.3235 * x[2] * x[4] * x[5] * x[9] - 0.7351 * x[2] * x[4] * x[5] * x[10] + 0.1866 * x[2] * x[4] * x[6] * x[7] - 0.1166 * x[2] * x[4] * x[6] * x[8] + 0.6616 * x[2] * x[4] * x[6] * x[9] + 0.3928 * x[2] * x[4] * x[6] * x[10] + 0.4047 * x[2] * x[4] * x[7] * x[8] - 0.492 * x[2] * x[4] * x[7] * x[9] + 0.0233 * x[2] * x[4] * x[7] * x[10] - 0.0839 * x[2] * x[4] * x[8] * x[9] + 0.9802 * x[2] * x[4] * x[8] * x[10] + 0.2466 * x[2] * x[4] * x[9] * x[10] + 0.0186 * x[2] * x[5] * x[6] * x[7] + 0.761 * x[2] * x[5] * x[6] * x[8] + 0.1837 * x[2] * x[5] * x[6] * x[9] + 0.6049 * x[2] * x[5] * x[6] * x[10] - 0.782 * x[2] * x[5] * x[7] * x[8] + 0.8772 * x[2] * x[5] * x[7] * x[9] + 0.9354 * x[2] * x[5] * x[7] * x[10] + 0.5135 * x[2] * x[5] * x[8] * x[9] + 0.5527 * x[2] * x[5] * x[8] * x[10] + 0.5089 * x[2] * x[5] * x[9] * x[10] - 0.9858 * x[2] * x[6] * x[7] * x[8] + 0.7245 * x[2] * x[6] * x[7] * x[9] - 0.7463 * x[2] * x[6] * x[7] * x[10] - 0.5182 * x[2] * x[6] * x[8] * x[9] - 0.6181 * x[2] * x[6] * x[8] * x[10] - 0.815 * x[2] * x[6] * x[9] * x[10] - 0.1105 * x[2] * x[7] * x[8] * x[9] - 0.6992 * x[2] * x[7] * x[8] * x[10] + 0.2491 * x[2] * x[7] * x[9] * x[10] + 0.6866 * x[2] * x[8] * x[9] * x[10] - 0.7184 * x[3] * x[4] * x[5] * x[6] + 0.7077 * x[3] * x[4] * x[5] * x[7] - 0.8608 * x[3] * x[4] * x[5] * x[8] - 0.851 * x[3] * x[4] * x[5] * x[9] + 0.6374 * x[3] * x[4] * x[5] * x[10] - 0.0365 * x[3] * x[4] * x[6] * x[7] + 0.7884 * x[3] * x[4] * x[6] * x[8] + 0.6555 * x[3] * x[4] * x[6] * x[9] - 0.3754 * x[3] * x[4] * x[6] * x[10] - 0.0738 * x[3] * x[4] * x[7] * x[8] + 0.9879 * x[3] * x[4] * x[7] * x[9] + 0.0135 * x[3] * x[4] * x[7] * x[10] - 0.3498 * x[3] * x[4] * x[8] * x[9] - 0.0971 * x[3] * x[4] * x[8] * x[10] + 0.904 * x[3] * x[4] * x[9] * x[10] - 0.2376 * x[3] * x[5] * x[6] * x[7] + 0.2933 * x[3] * x[5] * x[6] * x[8] - 0.9793 * x[3] * x[5] * x[6] * x[9] - 0.2463 * x[3] * x[5] * x[6] * x[10] + 0.4602 * x[3] * x[5] * x[7] * x[8] + 0.2682 * x[3] * x[5] * x[7] * x[9] - 0.5987 * x[3] * x[5] * x[7] * x[10] + 0.5991 * x[3] * x[5] * x[8] * x[9] - 0.2997 * x[3] * x[5] * x[8] * x[10] + 0.4424 * x[3] * x[5] * x[9] * x[10] - 0.2551 * x[3] * x[6] * x[7] * x[8] - 0.4591 * x[3] * x[6] * x[7] * x[9] + 0.191 * x[3] * x[6] * x[7] * x[10] + 0.7592 * x[3] * x[6] * x[8] * x[9] - 0.4934 * x[3] * x[6] * x[8] * x[10] - 0.5187 * x[3] * x[6] * x[9] * x[10] - 0.1522 * x[3] * x[7] * x[8] * x[9] - 0.7995 * x[3] * x[7] * x[8] * x[10] + 0.2015 * x[3] * x[7] * x[9] * x[10] + 0.7515 * x[3] * x[8] * x[9] * x[10] - 0.3003 * x[4] * x[5] * x[6] * x[7] - 0.0052 * x[4] * x[5] * x[6] * x[8] - 0.2116 * x[4] * x[5] * x[6] * x[9] - 0.069 * x[4] * x[5] * x[6] * x[10] + 0.4125 * x[4] * x[5] * x[7] * x[8] + 0.1911 * x[4] * x[5] * x[7] * x[9] + 0.141 * x[4] * x[5] * x[7] * x[10] - 0.4838 * x[4] * x[5] * x[8] * x[9] + 0.0428 * x[4] * x[5] * x[8] * x[10] - 0.3545 * x[4] * x[5] * x[9] * x[10] - 0.836 * x[4] * x[6] * x[7] * x[8] + 0.9044 * x[4] * x[6] * x[7] * x[9] + 0.9537 * x[4] * x[6] * x[7] * x[10] + 0.0803 * x[4] * x[6] * x[8] * x[9] - 0.4248 * x[4] * x[6] * x[8] * x[10] + 0.9858 * x[4] * x[6] * x[9] * x[10] + 0.8136 * x[4] * x[7] * x[8] * x[9] + 0.6273 * x[4] * x[7] * x[8] * x[10] + 0.3116 * x[4] * x[7] * x[9] * x[10] + 0.5186 * x[4] * x[8] * x[9] * x[10] + 0.4613 * x[5] * x[6] * x[7] * x[8] + 0.5744 * x[5] * x[6] * x[7] * x[9] - 0.5661 * x[5] * x[6] * x[7] * x[10] - 0.7528 * x[5] * x[6] * x[8] * x[9] - 0.1247 * x[5] * x[6] * x[8] * x[10] - 0.5048 * x[5] * x[6] * x[9] * x[10] + 0.1487 * x[5] * x[7] * x[8] * x[9] + 0.6904 * x[5] * x[7] * x[8] * x[10] - 0.4091 * x[5] * x[7] * x[9] * x[10] + 0.8667 * x[5] * x[8] * x[9] * x[10] + 0.4524 * x[6] * x[7] * x[8] * x[9] - 0.4188 * x[6] * x[7] * x[8] * x[10] - 0.3955 * x[6] * x[7] * x[9] * x[10] + 0.3814 * x[6] * x[8] * x[9] * x[10] - 0.4766 * x[7] * x[8] * x[9] * x[10] <= 99.878 ) e11 = replace_expr(e11, x) JuMP.add_nonlinear_constraint(m, e11) return m end ================================================ FILE: examples/MINLPs/multi.jl ================================================ # println("--------------------------------------------------------------------------") # println("Multi4/N - exprmode 1 -> X1 * X2 * X3 * X4") # println("Multi4/N - exprmode 2 -> (X1*X2) * (X3*X4)") # println("Multi4/N - exprmode 3 -> (X1*X2) * X3 * X4") # println("Multi4/N - exprmode 4 -> X1 * X2 * (X3*X4)") # println("Multi4/N - exprmode 5 -> ((X1*X2) * X3) * X4") # println("Multi4/N - exprmode 6 -> (X1*X2*X3) *X4") # println("Multi4/N - exprmode 7 -> X1 * (X2 * (X3*X4))") # println("Multi4/N - exprmode 8 -> X1 * (X2*X3) * X4") # println("Multi4/N - exprmode 9 -> X1 * (X2*X3*X4)") # println("Multi4/N - exprmode 10 -> X1 * ((X2*X3) * X4)") # println("Multi4/N - exprmode 11 -> (X1 * (X2*X3)) * X4") # println("--------------------------------------------------------------------------") # println("Multi3/N - exprmode 1 -> X1 * X2 * X3") # println("Multi3/N - exprmode 2 -> (X1*X2) * X3") # println("Multi3/N - exprmode 3 -> X1 * (X2*X3)") # println("--------------------------------------------------------------------------") # println(" Options") # println("N | K | convhull | exprmode | unifrom | randomub | sos2 | presolve | delta") # println("--------------------------------------------------------------------------") function multi4(; verbose = false, solver = nothing, exprmode = 1) m = JuMP.Model(solver) Random.seed!(1) @variable(m, 0.1 <= x[1:4] <= rand() * 100) if exprmode == 1 @NLobjective(m, Max, x[1] * x[2] * x[3] * x[4]) elseif exprmode == 2 @NLobjective(m, Max, (x[1] * x[2]) * (x[3] * x[4])) elseif exprmode == 3 @NLobjective(m, Max, (x[1] * x[2]) * x[3] * x[4]) elseif exprmode == 4 @NLobjective(m, Max, x[1] * x[2] * (x[3] * x[4])) elseif exprmode == 5 @NLobjective(m, Max, (((x[1] * x[2]) * x[3]) * x[4])) elseif exprmode == 6 @NLobjective(m, Max, (x[1] * x[2] * x[3]) * x[4]) elseif exprmode == 7 @NLobjective(m, Max, x[1] * (x[2] * (x[3] * x[4]))) elseif exprmode == 8 @NLobjective(m, Max, x[1] * (x[2] * x[3]) * x[4]) elseif exprmode == 9 @NLobjective(m, Max, x[1] * (x[2] * x[3] * x[4])) elseif exprmode == 10 @NLobjective(m, Max, x[1] * ((x[2] * x[3]) * x[4])) elseif exprmode == 11 @NLobjective(m, Max, (x[1] * (x[2] * x[3])) * x[4]) else error("exprmode argument only taks from 1-7") end @constraint(m, sum(x[i] for i in 1:4) <= 4) if verbose print(m) end return m end function multi3(; verbose = false, solver = nothing, exprmode = 1) m = JuMP.Model(solver) Random.seed!(1) ub = rand() @variable(m, 0.1 <= x[1:3] <= ub * 1000) if exprmode == 1 @NLobjective(m, Max, x[1] * x[2] * x[3]) elseif exprmode == 2 @NLobjective(m, Max, (x[1] * x[2]) * x[3]) elseif exprmode == 3 @NLobjective(m, Max, x[1] * (x[2] * x[3])) else error("exprmode argument only taks from 1-7") end @constraint(m, sum(x[i] for i in 1:3) <= 3) if verbose print(m) end return m end function multi2(; verbose = false, solver = nothing) # Global solution: 0.92906489 (arg min: [0.7336635, 1.266336]) m = JuMP.Model(solver) Random.seed!(1) @variable(m, 0.1 <= x[1:2] <= rand() * 10) @NLobjective(m, Max, x[1] * x[2]) @constraint(m, sum(x[i] for i in 1:2) <= 2) if verbose print(m) end return m end function multi4N(; verbose = false, exprmode = 1, solver = nothing, N = 1, randomub = true, ) m = JuMP.Model(solver) M = 1 + 3 * N Random.seed!(100) isa(randomub, Bool) ? @variable(m, 0.1 <= x[1:M] <= 100 * rand()) : @variable(m, 0.1 <= x[1:M] <= randomub) if exprmode == 1 @NLobjective(m, Max, sum(x[i] * x[i+1] * x[i+2] * x[i+3] for i in 1:3:(M-1))) elseif exprmode == 2 @NLobjective(m, Max, sum((x[i] * x[i+1]) * (x[i+2] * x[i+3]) for i in 1:3:(M-1))) elseif exprmode == 3 @NLobjective(m, Max, sum((x[i] * x[i+1]) * x[i+2] * x[i+3] for i in 1:3:(M-1))) elseif exprmode == 4 @NLobjective(m, Max, sum(x[i] * x[i+1] * (x[i+2] * x[i+3]) for i in 1:3:(M-1))) elseif exprmode == 5 @NLobjective( m, Max, sum((((x[i] * x[i+1]) * x[i+2]) * x[i+3]) for i in 1:3:(M-1)) ) elseif exprmode == 6 @NLobjective(m, Max, sum((x[i] * x[i+1] * x[i+2]) * x[i+3] for i in 1:3:(M-1))) elseif exprmode == 7 @NLobjective(m, Max, sum(x[i] * (x[i+1] * (x[i+2] * x[i+3])) for i in 1:3:(M-1))) elseif exprmode == 8 @NLobjective(m, Max, sum(x[i] * (x[i+1] * x[i+2]) * x[i+3] for i in 1:3:(M-1))) elseif exprmode == 9 @NLobjective(m, Max, sum(x[i] * (x[i+1] * x[i+2] * x[i+3]) for i in 1:3:(M-1))) elseif exprmode == 10 @NLobjective(m, Max, sum(x[i] * ((x[i+1] * x[i+2]) * x[i+3]) for i in 1:3:(M-1))) elseif exprmode == 11 @NLobjective(m, Max, sum((x[i] * (x[i+1] * x[i+2])) * x[i+3] for i in 1:3:(M-1))) else error("exprmode argument only taks from 1-7") end @constraint(m, [i in 1:3:(M-1)], x[i] + x[i+1] + x[i+2] + x[i+3] <= 4) if verbose print(m) end return m end function multi3N(; verbose = false, randomub = nothing, solver = nothing, exprmode = 1, N = 1, delta = 4, ) m = JuMP.Model(solver) M = 1 + 2 * N Random.seed!(100) isa(randomub, Int) ? @variable(m, 0.1 <= x[1:M] <= randomub) : @variable(m, 0.1 <= x[1:M] <= rand() * 100) if exprmode == 1 @NLobjective(m, Max, sum(x[i] * x[i+1] * x[i+2] for i in 1:2:(M-1))) elseif exprmode == 2 @NLobjective(m, Max, sum((x[i] * x[i+1]) * x[i+2] for i in 1:2:(M-1))) elseif exprmode == 3 @NLobjective(m, Max, sum(x[i] * (x[i+1] * x[i+2]) for i in 1:2:(M-1))) else error("exprmode argument only taks from 1-7") end @constraint(m, [i in 1:2:(M-1)], x[i] + x[i+1] + x[i+2] <= 3) if verbose print(m) end return m end function multiKND(; verbose = false, solver = nothing, exprmode = 1, randomub = true, N = 1, K = 2, D = 1, ) m = JuMP.Model(solver) M = K + (K - D) * (N - 1) Random.seed!(100) isa(randomub, Int) ? @variable(m, 0.1 <= x[1:M] <= randomub) : @variable(m, 0.1 <= x[1:M] <= rand() * 100) @NLobjective(m, Max, sum(prod(x[i+k] for k in 0:(K-1)) for i in 1:(K-D):(M-D))) @constraint(m, [i in 1:(K-D):(M-D)], sum(x[i+k] for k in 0:(K-1)) <= K) verbose && print(m) return m end ================================================ FILE: examples/MINLPs/nlp.jl ================================================ function nlp1(; solver = nothing) m = JuMP.Model(solver) @variable(m, 1 <= x[1:2] <= 4) @NLconstraint(m, x[1] * x[2] >= 8) @NLobjective(m, Min, 6 * x[1]^2 + 4 * x[2]^2 - 2.5 * x[1] * x[2]) return m end function nlp2(; solver = nothing) m = JuMP.Model(solver) @variable(m, -500 <= x[1:2] <= 500) @NLobjective(m, Min, sum((x[i]^2 - i)^2 for i in 1:2)) return m end function max_cover_var_picker(m::Alpine.Optimizer) nodes = Set() for pair in keys(m.nonconvex_terms) for i in pair @assert isa(i.args[2], Int) push!(nodes, i.args[2]) end end nodes = collect(nodes) m.num_var_disc_mip = length(nodes) m.disc_vars = nodes return end function mathopt(; solver = nothing) # Modified based on `mathopt` instances from MINLPLib # Global solution: -1004.73094034, arg min: [ -10.0, 15.2543377, -3.2034701] m = JuMP.Model(solver) LB = [-10, -15, -10] UB = [20, 20, 20] x0 = [-10.0, 15.3, -3.2] @variable( m, LB[i] <= x[i = 1:3] <= UB[i], start = x0[i], ) @NLobjective(m, Min, 10 * (x[1] * x[2] - x[2] * x[3]) + x[1] * x[3]) @NLconstraint(m, x[1] * x[2] + x[2] * x[3]^2 >= 4) @constraint(m, 3 * x[1] + 4 * x[2] + 5 * x[3] <= 15) return m end function nlp3(; solver = nothing) m = JuMP.Model(solver) LB = [100, 1000, 1000, 10, 10, 10, 10, 10] UB = [10000, 10000, 10000, 1000, 1000, 1000, 1000, 1000] @variable(m, LB[i] <= x[i = 1:8] <= UB[i]) @constraint(m, 0.0025 * (x[4] + x[6]) <= 1) @constraint(m, 0.0025 * (x[5] - x[4] + x[7]) <= 1) @constraint(m, 0.01(x[8] - x[5]) <= 1) @NLconstraint(m, 100 * x[1] - x[1] * x[6] + 833.33252 * x[4] <= 83333.333) @NLconstraint(m, x[2] * x[4] - x[2] * x[7] - 1250 * x[4] + 1250 * x[5] <= 0) @NLconstraint(m, x[3] * x[5] - x[3] * x[8] - 2500 * x[5] + 1250000 <= 0) @objective(m, Min, x[1] + x[2] + x[3]) return m end ================================================ FILE: examples/MINLPs/rosenbrock.jl ================================================ # Reference: https://direct.mit.edu/evco/article/14/1/119/1232/A-Note-on-the-Extended-Rosenbrock-Function # Global optimum = 0.0, arg min = (1,1) function rosenbrock(; solver = nothing) m = JuMP.Model(solver) @variable(m, -10 <= x <= 10) @variable(m, -10 <= y <= 10) @NLobjective(m, Min, 100 * (y - x^2)^2 + (1 - x)^2) return m end ================================================ FILE: examples/MINLPs/sincos.jl ================================================ # Functions in this file are not tested until support for trigonometric functions is added. function sincos_p1(; solver = nothing) m = JuMP.Model(solver) @variable(m, 0.1 <= x[1:10] <= 10) @NLconstraint(m, [i in 1:9], x[i] * x[i+1] * sin(x[i]) >= 0.32) @NLconstraint(m, [i in 1:9], x[i] * x[i+1] * sin(x[i]) <= 0.42) @NLobjective(m, Min, sum(cos(x[i]) + sin(x[i]) for i in 1:10)) return m end function trig(; solver = nothing) m = JuMP.Model(solver) @variable(m, objvar) x_Idx = Any[1] @variable(m, x[x_Idx]) JuMP.set_lower_bound(x[1], -2.0) JuMP.set_upper_bound(x[1], 5.0) @NLconstraint( m, e1, -(sin(11 * x[1]) + cos(13 * x[1]) - sin(17 * x[1]) - cos(19 * x[1])) + objvar == 0.0 ) @NLconstraint(m, e2, 5 * sin(x[1]) - x[1] <= 0.0) @objective(m, Min, objvar) return m end function specialopts(; verbose = false, solver = nothing) m = JuMP.Model(solver) @variable(m, x[i = 1:6]) @NLconstraint(m, sin(x[1]) + cos(x[2]) >= 1) @NLconstraint(m, sin(x[1]) * x[2] >= 1) @NLconstraint(m, sin(x[1]) * cos(x[2]) >= 1) # @NLconstraint(m, sin(x[1] * x[2]) >= 0.5) @NLconstraint(m, cos(x[1] + x[2]) >= 0.5) @NLconstraint(m, cos(x[1] / 2) >= 0.5) @NLconstraint(m, cos(x[1] * x[2] / 5) >= 0.5) @NLconstraint(m, sin(x[1] / 5 + x[2] / 5) >= 0.5) return m end ================================================ FILE: examples/Project.toml ================================================ [deps] Alpine = "07493b3f-dabb-5b16-a503-4139292d7dd4" CPLEX = "a076750e-1247-5638-91d2-ce28b192dca0" Gurobi = "2e9cd046-0924-5485-92f1-d5272153d98b" HiGHS = "87dc4568-4c63-4d18-b0c0-bb2238e4078b" Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" JuMP = "4076af6c-e467-56ae-b986-b466b2749572" Juniper = "2ddba703-00a4-53a7-87a5-e8b9971dde84" Pavito = "cd433a01-47d1-575d-afb7-6db927ee8d8f" Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" [compat] JuMP = "1" julia = "1" ================================================ FILE: examples/README.md ================================================ # Examples for Alpine `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. A few useful **hints** to explore within Alpine: * Try different integer values (>= 4) for `partition_scaling_factor` to potentially observe better Alpine run times, which can be instance specific. * Choose `presolve_bt` to `false` if you prefer the optimization-based bound tightening (OBBT) presolve to be turned off. * If you prefer to use Alpine for only OBBT presolve, without any paritioning applied to the nonlinear terms, include option `"apply_partitioning"` and set it to `false` while initializing the Alpine solver. * 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`. # Random families of non-convex QCQPs Scripts 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). ================================================ FILE: examples/optimizers.jl ================================================ #---------------------------; # MIP solvers - commercial ; #---------------------------; # https://github.com/jump-dev/Gurobi.jl function get_gurobi() GRB_ENV = Gurobi.Env() return optimizer_with_attributes( () -> Gurobi.Optimizer(GRB_ENV), # To avoid printing License info multiple times MOI.Silent() => true, "Presolve" => 1, ) end # https://github.com/jump-dev/CPLEX.jl function get_cplex() return optimizer_with_attributes( CPLEX.Optimizer, MOI.Silent() => true, "CPX_PARAM_PREIND" => 1, ) end #---------------------------; # MIP solvers - open-source #---------------------------; # https://github.com/jump-dev/HiGHS.jl function get_highs() return JuMP.optimizer_with_attributes( HiGHS.Optimizer, "presolve" => "on", "log_to_console" => false, ) end # https://github.com/jump-dev/Cbc.jl function get_cbc() return optimizer_with_attributes(Cbc.Optimizer, MOI.Silent() => true) end #---------------------------; # Continuous local solver ; #---------------------------; # https://github.com/jump-dev/Ipopt.jl function get_ipopt() return optimizer_with_attributes( Ipopt.Optimizer, MOI.Silent() => true, "sb" => "yes", "max_iter" => Int(1E4), ) end #----------------------; # Convex MINLP solver ; #----------------------; # https://github.com/jump-dev/Pavito.jl function get_pavito(mip_solver, cont_solver) return optimizer_with_attributes( Pavito.Optimizer, MOI.Silent() => true, "mip_solver" => mip_solver, "cont_solver" => cont_solver, "mip_solver_drives" => false, ) end #-------------------------------; # Non-convex Local MINLP solver ; #-------------------------------; # https://github.com/lanl-ansi/Juniper.jl function get_juniper(mip_solver, nl_solver) return optimizer_with_attributes( Juniper.Optimizer, MOI.Silent() => true, "mip_solver" => mip_solver, "nl_solver" => nl_solver, ) end ================================================ FILE: examples/random_QCQPs/README.md ================================================ # Random families of non-convex QCQPs Scripts 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. Instances in the above paper were generated using Python 3.8.5 and NumPy 1.19.2. To generate 1000 random bilinear instances with `N` variables (`N = 10, 20, 50`), run ``` python3 generate_bilinear_instances.py --numVariables N --numInstances 1000 ``` To generate 1000 random QCQP instances (including both bilinear and univariate quadratic terms) with `N` variables (`N = 10, 20, 50`), run ``` python3 generate_qcqp_instances.py --numVariables N --numInstances 1000 ``` To generate 1000 random pooling instances, run ``` python3 generate_pooling_instances.py --numInstances 1000 ``` Additional 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). If 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): ```bibtex @article{alpine_learning_2022, title={Learning to Accelerate the Global Optimization of Quadratically-Constrained Quadratic Programs}, author={Kannan, Rohit and Nagarajan, Harsha and Deka, Deepjyoti}, journal={arXiv preprint:2301.00306}, url={https://arxiv.org/abs/2301.00306}, year={2022} } ``` ================================================ FILE: examples/random_QCQPs/bilinear/generate_bilinear_instances.py ================================================ """ // @brief Script to generate the nonconvex instances with only bilinear terms // Input arguments: numVariables, numInstances // Reference: "Learning to Accelerate the Global Optimization of Quadratically-Constrained Quadratic Programs" by R. Kannan, H. Nagarajan, and D. Deka (Link: https://arxiv.org/abs/2301.00306) // Contributor: @rohitkannan """ import random import json import numpy as np import argparse import os parser = argparse.ArgumentParser() parser.add_argument('--numVariables', type=int, required=True) parser.add_argument('--numInstances', type=int, required=True) args = parser.parse_args() numVariables = int(args.numVariables) numInstances = int(args.numInstances) instances_path = "./N_" + str(numVariables) + "/" os.makedirs(instances_path) # random seed for instances if numVariables == 10: random.seed(4898) elif numVariables == 20: random.seed(6736) elif numVariables == 50: random.seed(8197) np.random.seed(round(random.random()*10000)) start = 1 # starting instance number numQuadraticConstraints = numVariables # number of constraints with bilinear and linear terms numLinearConstraints = round(numVariables/5) # number of linear equality constraints constraint_sparsity = 1.0 # (actually opposite of sparsity) fraction of possible bilinear and linear terms occurring in each constraint maxNumBilinearTerms = round(numVariables*(numVariables-1)/2) numBilinearTerms = min(5*numVariables,maxNumBilinearTerms) # number of bilinear terms in the formulation frac_quad_con_pert = 0.2 # fraction of quadratic constraints perturbed numPertFactors = 3 # number of perturbation factors per perturbed quadratic constraint pert_frac = 0.5 # perturbation fraction around nominal instance # to sort list of lists def Sort(sub_li): return(sorted(sub_li, key = lambda x: (x[0],x[1]))) # GENERATE COMMON BILINEAR TERMS FOR ALL INSTANCES possible_bilinear_terms = [[i,j] for i in range(numVariables) for j in range(i+1,numVariables)] random.shuffle(possible_bilinear_terms) bilinear_terms = Sort(possible_bilinear_terms[:numBilinearTerms]) # GENERATE BASE COEFFICIENTS q_bilinear = [] # bilinear coefficients q_bilinear_ind = [] # bilinear coefficient indices # OBJECTIVE COEFFICIENTS q_bilinear.append([2*random.random()-1 for j in range(numBilinearTerms)]) # all bilinear terms participate in the objective (sparsity not applied here) q_bilinear_ind.append(list(np.arange(numBilinearTerms))) # CONSTRAINT COEFFICIENTS numQuadNonZero = round(numBilinearTerms*constraint_sparsity) for i in range(numQuadraticConstraints): q_bilinear.append([2*random.random()-1 for j in range(numQuadNonZero)]) tmp_ind = list(np.random.choice(numBilinearTerms, numQuadNonZero, replace=False)) tmp_ind.sort() q_bilinear_ind.append(tmp_ind) q_linear = [] # linear coefficients q_linear_ind = [] # linear coefficient indices # OBJECTIVE COEFFICIENTS q_linear.append([2*random.random()-1 for j in range(numVariables)]) # all linear terms participate in the objective (sparsity not applied here) q_linear_ind.append(list(np.arange(numVariables))) # CONSTRAINT COEFFICIENTS numLinNonZero = round(numVariables*constraint_sparsity) for i in range(numQuadraticConstraints+numLinearConstraints): if i < numQuadraticConstraints: # only a fraction of linear terms appear in quadratic constraints q_linear.append([2*random.random()-1 for j in range(numLinNonZero)]) tmp_ind = list(np.random.choice(numVariables, numLinNonZero, replace=False)) else: # all linear terms appear in linear equality constraints q_linear.append([2*random.random()-1 for j in range(numVariables)]) tmp_ind = list(np.arange(numVariables)) tmp_ind.sort() q_linear_ind.append(tmp_ind) # GENERATE BASE RHS COEFFICIENTS quadratic_scaling = 100 rhs_quadratic = [quadratic_scaling*random.random() for i in range(numQuadraticConstraints)] linear_scaling = 1 rhs_linear = [linear_scaling*(2*random.random()-1) for i in range(numLinearConstraints)] # RE-SCALE PROBLEM SO THAT CONSTRAINTS RHS ARE EQUAL TO ONE for i in range(numQuadraticConstraints): for j in range(numQuadNonZero): q_bilinear[i+1][j] /= rhs_quadratic[i] for j in range(numLinNonZero): q_linear[i+1][j] /= rhs_quadratic[i] for i in range(numLinearConstraints): for j in range(numVariables): q_linear[i+1+numQuadraticConstraints][j] /= rhs_linear[i] # CONSTRUCT PERTURBATION FACTORS FOR THE OBJECTIVE AND QUADRATIC CONSTRAINT COEFFICIENTS q_bilinear_obj_factors = np.zeros((numPertFactors,numBilinearTerms)) q_linear_obj_factors = np.zeros((numPertFactors,numVariables)) for j in range(numBilinearTerms): for k in range(numPertFactors): q_bilinear_obj_factors[k,j] = pert_frac*random.random()*q_bilinear[0][j] for j in range(numVariables): for k in range(numPertFactors): q_linear_obj_factors[k,j] = pert_frac*random.random()*q_linear[0][j] numQuadConPert = round(numQuadraticConstraints*frac_quad_con_pert) q_bilinear_con_factors = np.zeros((numPertFactors,numQuadConPert,numQuadNonZero)) q_linear_con_factors = np.zeros((numPertFactors,numQuadConPert,numLinNonZero)) for i in range(numQuadConPert): for j in range(numQuadNonZero): for k in range(numPertFactors): q_bilinear_con_factors[k,i,j] = pert_frac*random.random()*q_bilinear[i+1][j] for j in range(numLinNonZero): for k in range(numPertFactors): q_linear_con_factors[k,i,j] = pert_frac*random.random()*q_linear[i+1][j] # GENERATE PERTURBED INSTANCES for inst in range(start,numInstances+start): output_file = instances_path + "bilinear_v" + str(numVariables) + "_b" + str(numBilinearTerms) + "_s" + str(round(constraint_sparsity*100)) + "_" + str(inst) + ".jl" json_file = instances_path + "bilinear_v" + str(numVariables) + "_b" + str(numBilinearTerms) + "_s" + str(round(constraint_sparsity*100)) + "_" + str(inst) + ".json" json_dict = {} json_dict["numVariables"] = numVariables json_dict["numQuadraticConstraints"] = numQuadraticConstraints json_dict["numLinearConstraints"] = numLinearConstraints json_dict["constraint_sparsity"] = constraint_sparsity json_dict["numBilinearTerms"] = numBilinearTerms json_dict["bilinear_terms"] = bilinear_terms json_dict["pert_frac"] = pert_frac json_dict["numPertFactors"] = numPertFactors json_dict["numQuadConPert"] = numQuadConPert json_dict["bilinear_obj_factors"] = q_bilinear_obj_factors.tolist() json_dict["linear_obj_factors"] = q_linear_obj_factors.tolist() json_dict["bilinear_con_factors"] = q_bilinear_con_factors.tolist() json_dict["linear_con_factors"] = q_linear_con_factors.tolist() # GENERATE PERTURBATION FACTORS theta = 2*(np.random.rand(numPertFactors,numQuadConPert+1) - 0.5) json_dict["theta"] = theta.tolist() # STORE SPARSITY PATTERN AND INITIALIZE DATA f = open(output_file, "w") f.write("# ----- Bilinear Terms ----- #\n") f.write("numBilinearTerms = " + str(numBilinearTerms) + "\n") f.write("bilinear_terms = [") count_bilinear = 0 for term in bilinear_terms: f.write("[" + str(term[0]+1) + "," + str(term[1]+1) + "]") count_bilinear += 1 if count_bilinear < numBilinearTerms: f.write(", ") else: f.write("] \n\n") f.write("numQuadNonZero = " + str(numQuadNonZero) + "\n") f.write("numLinNonZero = " + str(numLinNonZero) + "\n\n") f.write("# ----- Data Matrices ----- #\n") f.write("bilinear_obj_coeffs = zeros(Float64," + str(numBilinearTerms) + ") \n") f.write("bilinear_con_coeffs = zeros(Float64," + str(numQuadraticConstraints) + "," + str(numQuadNonZero) + ") \n") f.write("bilinear_con_coeff_indices = zeros(Int64," + str(numQuadraticConstraints) + "," + str(numQuadNonZero) + ") \n") f.write("linear_obj_coeffs = zeros(Float64," + str(numVariables) + ") \n") f.write("linear_con_coeffs_1 = zeros(Float64," + str(numQuadraticConstraints) + "," + str(numLinNonZero) + ") \n") f.write("linear_con_coeff_indices_1 = zeros(Int64," + str(numQuadraticConstraints) + "," + str(numLinNonZero) + ") \n") f.write("linear_con_coeffs_2 = zeros(Float64," + str(numLinearConstraints) + "," + str(numVariables) + ") \n") f.write("linear_con_coeff_indices_2 = zeros(Int64," + str(numLinearConstraints) + "," + str(numVariables) + ") \n\n") f.write("# ----- Variables ----- #\n") f.write("@variable(m, 0 <= x[1:" + str(numVariables) + "] <= 1)\n") f.write("@variable(m, 0 <= w[1:" + str(numBilinearTerms) + "] <= 1)\n\n") f.write("# ----- Bilinear Equations ----- #\n") f.write("@NLconstraint(m, [i=1:" + str(numBilinearTerms) + "], w[i] == x[bilinear_terms[i][1]]*x[bilinear_terms[i][2]])\n\n\n") json_dict["x_lower"] = [0 for i in range(numVariables)] json_dict["x_upper"] = [1 for i in range(numVariables)] # OBJECTIVE # tmp variables for storing generated data Q = [0.]*numBilinearTerms q = [0.]*numVariables count_quad_con = 0 count_lin_con = 0 for i in range(numVariables): q[i] = q_linear[0][i] for k in range(numPertFactors): q[i] += q_linear_obj_factors[k,i]*theta[k,0] for i in range(numBilinearTerms): Q[i] = q_bilinear[0][i] for k in range(numPertFactors): Q[i] += q_bilinear_obj_factors[k,i]*theta[k,0] json_dict["obj_bilinear_coeffs"] = Q json_dict["obj_linear_coeffs"] = q f.write("# ----- Objective ----- #\n") f.write("bilinear_obj_coeffs = " + str(Q) + "\n") f.write("linear_obj_coeffs = " + str(q) + "\n") f.write("\n") f.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") bilinear_obj_matrix = np.zeros((numVariables, numVariables)) for i in range(numBilinearTerms): bilinear_obj_matrix[bilinear_terms[i][0]][bilinear_terms[i][1]] = Q[i]/2.0 bilinear_obj_matrix[bilinear_terms[i][1]][bilinear_terms[i][0]] = Q[i]/2.0 json_dict["obj_bilinear_eigvals"] = np.linalg.eigvals(bilinear_obj_matrix).tolist() # QUADRATIC CONSTRAINTS f.write("# ----- Constraints ----- #\n") json_dict["quadratic_con_rhs"] = [1.0 for i in range(numQuadraticConstraints)] bilinear_con_coeffs = [] bilinear_con_coeff_indices = [] linear_con_coeffs = [] linear_con_coeff_indices = [] con_bilinear_eigvals = np.empty([numQuadraticConstraints, numVariables], dtype=float) for k in range(numQuadraticConstraints): Q = [0.]*numQuadNonZero Q_ind = [i+1 for i in q_bilinear_ind[count_quad_con+1]] q = [0.]*numLinNonZero q_ind = [i+1 for i in q_linear_ind[count_lin_con+1]] count_quad_con += 1 count_lin_con += 1 for i in range(numLinNonZero): q[i] = q_linear[count_lin_con][i] if k < numQuadConPert: for j in range(numPertFactors): q[i] += q_linear_con_factors[j,count_lin_con-1,i]*theta[j,count_lin_con] for i in range(numQuadNonZero): Q[i] = q_bilinear[count_quad_con][i] if k < numQuadConPert: for j in range(numPertFactors): Q[i] += q_bilinear_con_factors[j,count_quad_con-1,i]*theta[j,count_quad_con] bilinear_con_coeffs.append(Q) bilinear_con_coeff_indices.append([float(i) for i in q_bilinear_ind[count_quad_con]]) linear_con_coeffs.append(q) linear_con_coeff_indices.append([float(i) for i in q_linear_ind[count_lin_con]]) f.write("bilinear_con_coeffs[" + str(count_quad_con) + ",:] = " + str(Q) + "\n") f.write("bilinear_con_coeff_indices[" + str(count_quad_con) + ",:] = " + str(Q_ind) + "\n") f.write("linear_con_coeffs_1[" + str(count_lin_con) + ",:] = " + str(q) + "\n") f.write("linear_con_coeff_indices_1[" + str(count_lin_con) + ",:] = " + str(q_ind) + "\n") f.write("\n") f.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") bilinear_con_matrix = np.zeros((numVariables, numVariables)) for i in range(numQuadNonZero): ind = q_bilinear_ind[count_quad_con][i] ind1 = bilinear_terms[ind][0] ind2 = bilinear_terms[ind][1] bilinear_con_matrix[ind1][ind2] = Q[i]/2.0 bilinear_con_matrix[ind2][ind1] = Q[i]/2.0 con_bilinear_eigvals[k] = np.linalg.eigvals(bilinear_con_matrix) json_dict["con_bilinear_eigvals"] = con_bilinear_eigvals.tolist() # LINEAR CONSTRAINTS json_dict["linear_con_rhs"] = [1.0 for i in range(numLinearConstraints)] for k in range(numLinearConstraints): q = [0.]*numVariables q_ind = [i+1 for i in q_linear_ind[count_lin_con+1]] count_lin_con += 1 for i in range(numVariables): q[i] = q_linear[count_lin_con][i] linear_con_coeffs.append(q) linear_con_coeff_indices.append([float(i) for i in q_linear_ind[count_lin_con]]) f.write("linear_con_coeffs_2[" + str(count_lin_con - numQuadraticConstraints) + ",:] = " + str(q) + "\n") f.write("linear_con_coeff_indices_2[" + str(count_lin_con - numQuadraticConstraints) + ",:] = " + str(q_ind) + "\n") f.write("\n") f.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") f.close() json_dict["con_bilinear_coeffs"] = bilinear_con_coeffs json_dict["con_bilinear_coeff_indices"] = bilinear_con_coeff_indices json_dict["con_linear_coeffs"] = linear_con_coeffs json_dict["con_linear_coeff_indices"] = linear_con_coeff_indices with open(json_file, 'w', encoding='utf-8') as outF: json.dump(json_dict, outF, ensure_ascii=False, indent=4) ================================================ FILE: examples/random_QCQPs/pooling/generate_pooling_instances.py ================================================ """ // @brief Script to generate the nonconvex pooling instances based on Luedtke et al. (SIOPT vol. 30 (2020), pp. 1582–1609) // Input arguments: numInstances // Reference: "Learning to Accelerate the Global Optimization of Quadratically-Constrained Quadratic Programs" by R. Kannan, H. Nagarajan, and D. Deka (Link: https://arxiv.org/abs/2301.00306) // Contributor: @rohitkannan """ import numpy as np import random import json import argparse import os parser = argparse.ArgumentParser() parser.add_argument('--numInstances', type=int, required=True) args = parser.parse_args() numInstances = int(args.numInstances) instances_path = "./pooling_instances/" os.mkdir(instances_path) # random seed for instances random.seed(8446) np.random.seed(round(random.random()*10000)) def flatten(t): return [item for sublist in t for item in sublist] # parameters defining the instance num_copies = 15 num_added_edges = 150 num_specs = 1 num_orig_inputs = 3 num_orig_pools = 1 num_orig_outputs = 2 # fraction by which to perturb the nominal input qualities pert_frac = 0.2 # scaling factors for parameters capacities_scaling = 100.0 costs_scaling = 2.0 input_file = "haverly_" + str(num_copies) + "_addedges_" + str(num_added_edges) + "_attr_" + str(num_specs-1) + "_1.dat" # first map the vertex labels to integers inputs_dict = dict() outputs_dict = dict() pools_dict = dict() for c in range(num_copies): for i in range(num_orig_inputs): if c < 10 and num_copies > 10: tmp = "h0" + str(c) + "_i" + str(i+1) else: tmp = "h" + str(c) + "_i" + str(i+1) inputs_dict[tmp] = c*num_orig_inputs + i for j in range(num_orig_outputs): if c < 10 and num_copies > 10: tmp = "h0" + str(c) + "_j" + str(j+1) else: tmp = "h" + str(c) + "_j" + str(j+1) outputs_dict[tmp] = c*num_orig_outputs + j for l in range(num_orig_pools): if c < 10 and num_copies > 10: tmp = "h0" + str(c) + "_l" + str(l+1) else: tmp = "h" + str(c) + "_l" + str(l+1) pools_dict[tmp] = c*num_orig_pools + l # compute actual number of inputs, pools, and outputs num_inputs = num_orig_inputs*num_copies num_pools = num_orig_pools*num_copies num_outputs = num_orig_outputs*num_copies # extract the relevant lines for each input parameter file1 = open(input_file, 'r') Lines = file1.readlines() start_edges = False start_costs = False start_capacities = False start_specs = False start_limits = False lines_edges = [] lines_costs = [] lines_capacities = [] lines_specs = [] lines_limits = [] for line in Lines: if start_edges and line.startswith('/;'): start_edges = False if start_costs and line.startswith('/;'): start_costs = False if start_capacities and line.startswith('/;'): start_capacities = False if start_specs and line.startswith('/;'): start_specs = False if start_limits and line.startswith('/;'): start_limits = False if start_edges: lines_edges.append(line) if start_costs: lines_costs.append(line) if start_capacities: lines_capacities.append(line) if start_specs: lines_specs.append(line) if start_limits: lines_limits.append(line) if line.startswith('set A /'): start_edges = True if line.startswith('parameter cost(V,V) /'): start_costs = True if line.startswith('parameter C(V) /'): start_capacities = True if line.startswith('parameter lambda(K,V) /'): start_specs = True if line.startswith('parameter overbeta(K,V) /'): start_limits = True # first, extract capacities cap_i = [0.0 for i in range(num_inputs)] cap_j = [0.0 for j in range(num_outputs)] cap_l = [0.0 for l in range(num_pools)] for line in lines_capacities: if num_copies > 10: id = line[4:10] val = float(line[11:]) else: id = line[4:9] val = float(line[10:]) if id in inputs_dict: cap_i[inputs_dict[id]] = val/capacities_scaling if id in outputs_dict: cap_j[outputs_dict[id]] = val/capacities_scaling if id in pools_dict: cap_l[pools_dict[id]] = val/capacities_scaling # next, extract costs cost_ij_rows = [] cost_ij_cols = [] cost_ij_vals = [] cost_il_rows = [] cost_il_cols = [] cost_il_vals = [] cost_lj_rows = [] cost_lj_cols = [] cost_lj_vals = [] for line in lines_costs: ids = line.rstrip().split('.') if num_copies > 10: id1 = ids[0][-6:] id2 = ids[1][:6] val = float(line[18:]) else: id1 = ids[0][-5:] id2 = ids[1][:5] val = float(line[16:]) if id1 in inputs_dict and id2 in outputs_dict: cost_ij_rows.append(inputs_dict[id1]) cost_ij_cols.append(outputs_dict[id2]) cost_ij_vals.append(val/costs_scaling) if id1 in inputs_dict and id2 in pools_dict: cost_il_rows.append(inputs_dict[id1]) cost_il_cols.append(pools_dict[id2]) cost_il_vals.append(val/costs_scaling) if id1 in pools_dict and id2 in outputs_dict: cost_lj_rows.append(pools_dict[id1]) cost_lj_cols.append(outputs_dict[id2]) cost_lj_vals.append(val/costs_scaling) # next, extract the edges arcs_ij = [] arcs_il = [] arcs_lj = [] for line in lines_edges: ids = line.rstrip().split('.') if num_copies > 10: id1 = ids[0][-6:] id2 = ids[1][:6] else: id1 = ids[0][-5:] id2 = ids[1][:5] if id1 in inputs_dict and id2 in outputs_dict: arcs_ij.append((inputs_dict[id1],outputs_dict[id2])) if id1 in inputs_dict and id2 in pools_dict: arcs_il.append((inputs_dict[id1],pools_dict[id2])) if id1 in pools_dict and id2 in outputs_dict: arcs_lj.append((pools_dict[id1],outputs_dict[id2])) # next, extract the nominal input qualities # ignore limits on output qualities specs_in_nominal = [[0.0 for k in range(num_specs)] for i in range(num_inputs)] for line in lines_specs: if num_specs > 1: attr = int(line.rstrip().split('.')[0][-1]) else: attr = 0 if (num_specs == 1) or (attr > 0): if num_copies > 10: id = line.rstrip().split('.')[1][:6] val = float(line[14:]) else: id = line.rstrip().split('.')[1][:5] val = float(line[13:]) else: if num_copies > 10: id = line.rstrip().split('.')[1][:6] val = float(line[16:]) else: id = line.rstrip().split('.')[1][:5] val = float(line[15:]) specs_in_nominal[inputs_dict[id]][attr] = val # define aliases for problem dimensions num_i = num_inputs num_l = num_pools num_j = num_outputs num_k = num_specs # generate auxiliary sets for the model inputs_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? inputs_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? outputs_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? outputs_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? pools_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? pools_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? inputs_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? arcs_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 outputs_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? inputs_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? # randomly generate target qualities at outputs specs_out_min = [[0.0 for k in range(num_specs)] for j in range(num_outputs)] specs_out_max = [[0.0 for k in range(num_specs)] for j in range(num_outputs)] for j in range(num_j): for k in range(num_k): spec_out_min = np.amin([specs_in_nominal[i][k] for i in inputs_reachable_from_output[j]]) spec_out_max = np.amax([specs_in_nominal[i][k] for i in inputs_reachable_from_output[j]]) start_frac = 0.2 + 0.2*random.random() stop_frac = 0.6 + 0.2*random.random() specs_out_min[j][k] = spec_out_min + start_frac*(spec_out_max - spec_out_min) specs_out_max[j][k] = spec_out_min + stop_frac*(spec_out_max - spec_out_min) for inst in range(numInstances): output_file = instances_path + "pooling_c15_e150_q1_" + str(inst+1) + ".jl" json_file = instances_path + "pooling_c15_e150_q1_" + str(inst+1) + ".json" theta_specs = np.random.rand(num_inputs, num_specs) specs_in = [[0.0 for k in range(num_specs)] for i in range(num_inputs)] for i in range(num_inputs): for k in range(num_specs): specs_in[i][k] = (1 - pert_frac + 2*pert_frac*theta_specs[i,k])*specs_in_nominal[i][k] # define auxiliary parameters for the quality constraints gamma_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)] gamma_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)] # Write to file. Convert to one indexing before creating Julia input f = open(output_file, "w") f.write("using SparseArrays \n\n") f.write("num_i = " + str(num_i) + "\n") f.write("num_l = " + str(num_l) + "\n") f.write("num_j = " + str(num_j) + "\n") f.write("num_k = " + str(num_k) + "\n\n") f.write("arcs_ij = " + str([(i+1,j+1) for (i,j) in arcs_ij]) + "\n") f.write("arcs_il = " + str([(i+1,l+1) for (i,l) in arcs_il]) + "\n") f.write("arcs_lj = " + str([(l+1,j+1) for (l,j) in arcs_lj]) + "\n") f.write("arcs_ilj = " + str([(i+1,l+1,j+1) for (i,l,j) in arcs_ilj]) + "\n\n") f.write("inputs_to_pool = [Int64[] for l=1:num_l] \n") for l in range(num_l): f.write("inputs_to_pool[" + str(l+1) + "] = " + str([i+1 for i in inputs_to_pool[l]]) + "\n") f.write("\n") f.write("inputs_to_output = [Int64[] for j=1:num_j] \n") for j in range(num_j): f.write("inputs_to_output[" + str(j+1) + "] = " + str([i+1 for i in inputs_to_output[j]]) + "\n") f.write("\n") f.write("pools_to_output = [Int64[] for j=1:num_j] \n") for j in range(num_j): f.write("pools_to_output[" + str(j+1) + "] = " + str([l+1 for l in pools_to_output[j]]) + "\n") f.write("\n") f.write("pools_from_input = [Int64[] for i=1:num_i] \n") for i in range(num_i): f.write("pools_from_input[" + str(i+1) + "] = " + str([l+1 for l in pools_from_input[i]]) + "\n") f.write("\n") f.write("outputs_from_pool = [Int64[] for l=1:num_l] \n") for l in range(num_l): f.write("outputs_from_pool[" + str(l+1) + "] = " + str([j+1 for j in outputs_from_pool[l]]) + "\n") f.write("\n") f.write("outputs_from_input = [Int64[] for i=1:num_i] \n") for i in range(num_i): f.write("outputs_from_input[" + str(i+1) + "] = " + str([j+1 for j in outputs_from_input[i]]) + "\n") f.write("\n") f.write("inputs_pools_to_output = [Tuple{Int64, Int64}[] for j=1:num_j] \n") for j in range(num_j): f.write("inputs_pools_to_output[" + str(j+1) + "] = " + str([(i+1,l+1) for (i,l) in inputs_pools_to_output[j]]) + "\n") f.write("\n") f.write("cap_i = " + str(cap_i) + "\n") f.write("cap_l = " + str(cap_l) + "\n") f.write("cap_j = " + str(cap_j) + "\n\n") f.write("cost_ij_rows = " + str([i+1 for i in cost_ij_rows]) + "\n") f.write("cost_ij_cols = " + str([j+1 for j in cost_ij_cols]) + "\n") f.write("cost_ij_vals = " + str(cost_ij_vals) + "\n") f.write("cost_ij = sparse(cost_ij_rows, cost_ij_cols, cost_ij_vals) \n\n") f.write("cost_il_rows = " + str([i+1 for i in cost_il_rows]) + "\n") f.write("cost_il_cols = " + str([l+1 for l in cost_il_cols]) + "\n") f.write("cost_il_vals = " + str(cost_il_vals) + "\n") f.write("cost_il = sparse(cost_il_rows, cost_il_cols, cost_il_vals) \n\n") f.write("cost_lj_rows = " + str([l+1 for l in cost_lj_rows]) + "\n") f.write("cost_lj_cols = " + str([j+1 for j in cost_lj_cols]) + "\n") f.write("cost_lj_vals = " + str(cost_lj_vals) + "\n") f.write("cost_lj = sparse(cost_lj_rows, cost_lj_cols, cost_lj_vals) \n\n") f.write("gamma_low = " + str(gamma_low) + "\n\n") f.write("gamma_up = " + str(gamma_up) + "\n\n\n\n") f.write("# ----- Variables ----- #\n") f.write("@variables(m, begin \n") f.write(" 0 <= w[(i,l,j) in arcs_ilj] <= min(cap_i[i],cap_l[l],cap_j[j]) \n") f.write(" 0 <= x_il[(i,l) in arcs_il] <= min(cap_i[i],cap_l[l]) \n") f.write(" 0 <= x_lj[(l,j) in arcs_lj] <= min(cap_l[l],cap_j[j]) \n") f.write(" 0 <= x_ij[(i,j) in arcs_ij] <= min(cap_i[i],cap_j[j]) \n") f.write(" 0 <= q[arcs_il] <= 1 \n") f.write("end) \n\n\n") f.write("# ----- Constraints ----- #\n") f.write("@constraints(m, begin \n") f.write(" capi[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") f.write(" capl[l=1:num_l], sum(x_lj[(l,j)] for j in outputs_from_pool[l]) <= cap_l[l] \n\n") f.write(" capj[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") f.write(" sumfrac[l=1:num_l], sum(q[(i,l)] for i in inputs_to_pool[l]) == 1 \n\n") f.write(" eq1[(i,l) in arcs_il], x_il[(i,l)] == sum(w[(i,l,j)] for j in outputs_from_pool[l]) \n\n") f.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") f.write(" specup[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") f.write(" rlt1[(l,j) in arcs_lj], sum(w[(i,l,j)] for i in inputs_to_pool[l]) == x_lj[(l,j)] \n\n") f.write(" rlt2[(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") f.write("end) \n\n\n") f.write("@NLconstraint(m, blin[(i,l,j) in arcs_ilj], w[(i,l,j)] == q[(i,l)]*x_lj[(l,j)]) \n\n\n") f.write("# ----- Objective ----- #\n") f.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") f.close() json_dict = {} json_dict["num_inputs"] = num_i json_dict["num_pools"] = num_l json_dict["num_outputs"] = num_j json_dict["num_qualities"] = num_k json_dict["num_copies"] = num_copies json_dict["num_added_edges"] = num_added_edges json_dict["pert_frac"] = pert_frac json_dict["capacities_scaling"] = capacities_scaling json_dict["costs_scaling"] = costs_scaling json_dict["arcs_inputs_outputs"] = [(i+1,j+1) for (i,j) in arcs_ij] json_dict["arcs_inputs_pools"] = [(i+1,l+1) for (i,l) in arcs_il] json_dict["arcs_pools_outputs"] = [(l+1,j+1) for (l,j) in arcs_lj] json_dict["arcs_inputs_pools_outputs"] = [(i+1,l+1,j+1) for (i,l,j) in arcs_ilj] json_dict["capacities_inputs"] = cap_i json_dict["capacities_pools"] = cap_l json_dict["capacities_outputs"] = cap_j json_dict["cost_ij_rows"] = [i+1 for i in cost_ij_rows] json_dict["cost_ij_cols"] = [i+1 for i in cost_ij_rows] json_dict["cost_ij_vals"] = cost_ij_vals json_dict["cost_il_rows"] = [i+1 for i in cost_il_rows] json_dict["cost_il_cols"] = [i+1 for i in cost_il_rows] json_dict["cost_il_vals"] = cost_il_vals json_dict["cost_lj_rows"] = [i+1 for i in cost_lj_rows] json_dict["cost_lj_cols"] = [i+1 for i in cost_lj_rows] json_dict["cost_lj_vals"] = cost_lj_vals json_dict["specs_inputs_nominal"] = specs_in_nominal json_dict["theta_specs_inputs"] = theta_specs.tolist() json_dict["specs_inputs"] = specs_in json_dict["specs_outputs_min"] = spec_out_min json_dict["specs_outputs_max"] = spec_out_max json_dict["gamma_low"] = gamma_low json_dict["gamma_up"] = gamma_up with open(json_file, 'w', encoding='utf-8') as outF: json.dump(json_dict, outF, ensure_ascii=False, indent=4) ================================================ FILE: examples/random_QCQPs/pooling/haverly_15_addedges_150_attr_0_1.json ================================================ { "out": "test_instances/haverly_15_addedges_150_attr_0_1", "seed": 0, "haverly": 15, "scalehaverlys": "random", "scalequalities": null, "density": null, "addedges": 150, "attributes": 0, "nodes": 90, "edges": 240, "inputs": 45, "pools": 15, "outputs": 30, "components": 1, "density_real": 0.09696969696969697, "input->pool": 71, "pool->output": 53, "input->output": 116, "min_cost": -15, "max_cost": 16, "graph": { "directed": true, "multigraph": false, "graph": { "name": "compose( , )", "attributes": [ "k1" ] }, "nodes": [ { "type": "output", "C": 200, "overbeta": { "k1": 0.8407370060109167 }, "id": "h14_j2" }, { "type": "input", "C": 800, "lambda": { "k1": 1.6814740120218334 }, "id": "h14_i1" }, { "type": "input", "C": 800, "lambda": { "k1": 0.5604913373406112 }, "id": "h14_i2" }, { "type": "input", "C": 800, "lambda": { "k1": 1.1209826746812224 }, "id": "h14_i3" }, { "type": "output", "C": 600, "overbeta": { "k1": 1.401228343351528 }, "id": "h14_j1" }, { "type": "pool", "C": 800, "id": "h14_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 1.1611932187032805 }, "id": "h13_j2" }, { "type": "input", "C": 300, "lambda": { "k1": 2.322386437406561 }, "id": "h13_i1" }, { "type": "input", "C": 300, "lambda": { "k1": 0.7741288124688537 }, "id": "h13_i2" }, { "type": "input", "C": 300, "lambda": { "k1": 1.5482576249377074 }, "id": "h13_i3" }, { "type": "output", "C": 100, "overbeta": { "k1": 1.9353220311721342 }, "id": "h13_j1" }, { "type": "pool", "C": 300, "id": "h13_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 2.635994117851846 }, "id": "h12_j2" }, { "type": "input", "C": 300, "lambda": { "k1": 5.271988235703692 }, "id": "h12_i1" }, { "type": "input", "C": 300, "lambda": { "k1": 1.7573294119012304 }, "id": "h12_i2" }, { "type": "input", "C": 300, "lambda": { "k1": 3.5146588238024608 }, "id": "h12_i3" }, { "type": "output", "C": 100, "overbeta": { "k1": 4.393323529753076 }, "id": "h12_j1" }, { "type": "pool", "C": 300, "id": "h12_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 0.8387038058667531 }, "id": "h11_j2" }, { "type": "input", "C": 300, "lambda": { "k1": 1.6774076117335062 }, "id": "h11_i1" }, { "type": "input", "C": 300, "lambda": { "k1": 0.5591358705778354 }, "id": "h11_i2" }, { "type": "input", "C": 300, "lambda": { "k1": 1.1182717411556709 }, "id": "h11_i3" }, { "type": "output", "C": 100, "overbeta": { "k1": 1.3978396764445886 }, "id": "h11_j1" }, { "type": "pool", "C": 300, "id": "h11_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 2.64747956602852 }, "id": "h10_j2" }, { "type": "input", "C": 800, "lambda": { "k1": 5.29495913205704 }, "id": "h10_i1" }, { "type": "input", "C": 800, "lambda": { "k1": 1.7649863773523469 }, "id": "h10_i2" }, { "type": "input", "C": 800, "lambda": { "k1": 3.5299727547046937 }, "id": "h10_i3" }, { "type": "output", "C": 600, "overbeta": { "k1": 4.412465943380867 }, "id": "h10_j1" }, { "type": "pool", "C": 800, "id": "h10_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 2.9358900448940743 }, "id": "h09_j2" }, { "type": "input", "C": 300, "lambda": { "k1": 5.871780089788149 }, "id": "h09_i1" }, { "type": "input", "C": 300, "lambda": { "k1": 1.957260029929383 }, "id": "h09_i2" }, { "type": "input", "C": 300, "lambda": { "k1": 3.914520059858766 }, "id": "h09_i3" }, { "type": "output", "C": 100, "overbeta": { "k1": 4.893150074823457 }, "id": "h09_j1" }, { "type": "pool", "C": 300, "id": "h09_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 2.9524654958112744 }, "id": "h08_j2" }, { "type": "input", "C": 300, "lambda": { "k1": 5.904930991622549 }, "id": "h08_i1" }, { "type": "input", "C": 300, "lambda": { "k1": 1.9683103305408496 }, "id": "h08_i2" }, { "type": "input", "C": 300, "lambda": { "k1": 3.936620661081699 }, "id": "h08_i3" }, { "type": "output", "C": 100, "overbeta": { "k1": 4.9207758263521235 }, "id": "h08_j1" }, { "type": "pool", "C": 300, "id": "h08_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 1.7873470715803832 }, "id": "h07_j2" }, { "type": "input", "C": 800, "lambda": { "k1": 3.5746941431607664 }, "id": "h07_i1" }, { "type": "input", "C": 800, "lambda": { "k1": 1.1915647143869221 }, "id": "h07_i2" }, { "type": "input", "C": 800, "lambda": { "k1": 2.3831294287738443 }, "id": "h07_i3" }, { "type": "output", "C": 600, "overbeta": { "k1": 2.9789117859673055 }, "id": "h07_j1" }, { "type": "pool", "C": 800, "id": "h07_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 0.8841026653489391 }, "id": "h06_j2" }, { "type": "input", "C": 300, "lambda": { "k1": 1.7682053306978782 }, "id": "h06_i1" }, { "type": "input", "C": 300, "lambda": { "k1": 0.5894017768992927 }, "id": "h06_i2" }, { "type": "input", "C": 300, "lambda": { "k1": 1.1788035537985855 }, "id": "h06_i3" }, { "type": "output", "C": 100, "overbeta": { "k1": 1.473504442248232 }, "id": "h06_j1" }, { "type": "pool", "C": 300, "id": "h06_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 1.5105783755153075 }, "id": "h05_j2" }, { "type": "input", "C": 800, "lambda": { "k1": 3.021156751030615 }, "id": "h05_i1" }, { "type": "input", "C": 800, "lambda": { "k1": 1.0070522503435384 }, "id": "h05_i2" }, { "type": "input", "C": 800, "lambda": { "k1": 2.014104500687077 }, "id": "h05_i3" }, { "type": "output", "C": 600, "overbeta": { "k1": 2.517630625858846 }, "id": "h05_j1" }, { "type": "pool", "C": 800, "id": "h05_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 1.6980384355293408 }, "id": "h04_j2" }, { "type": "input", "C": 300, "lambda": { "k1": 3.3960768710586815 }, "id": "h04_i1" }, { "type": "input", "C": 300, "lambda": { "k1": 1.1320256236862272 }, "id": "h04_i2" }, { "type": "input", "C": 300, "lambda": { "k1": 2.2640512473724543 }, "id": "h04_i3" }, { "type": "output", "C": 100, "overbeta": { "k1": 2.8300640592155677 }, "id": "h04_j1" }, { "type": "pool", "C": 300, "id": "h04_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 2.8808052414413545 }, "id": "h03_j2" }, { "type": "input", "C": 800, "lambda": { "k1": 5.761610482882709 }, "id": "h03_i1" }, { "type": "input", "C": 800, "lambda": { "k1": 1.9205368276275696 }, "id": "h03_i2" }, { "type": "input", "C": 800, "lambda": { "k1": 3.841073655255139 }, "id": "h03_i3" }, { "type": "output", "C": 600, "overbeta": { "k1": 4.801342069068924 }, "id": "h03_j1" }, { "type": "pool", "C": 800, "id": "h03_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 1.468634361852371 }, "id": "h02_j2" }, { "type": "input", "C": 800, "lambda": { "k1": 2.937268723704742 }, "id": "h02_i1" }, { "type": "input", "C": 800, "lambda": { "k1": 0.9790895745682473 }, "id": "h02_i2" }, { "type": "input", "C": 800, "lambda": { "k1": 1.9581791491364946 }, "id": "h02_i3" }, { "type": "output", "C": 600, "overbeta": { "k1": 2.4477239364206183 }, "id": "h02_j1" }, { "type": "pool", "C": 800, "id": "h02_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 0.7828217609506095 }, "id": "h01_j2" }, { "type": "input", "C": 300, "lambda": { "k1": 1.565643521901219 }, "id": "h01_i1" }, { "type": "input", "C": 300, "lambda": { "k1": 0.521881173967073 }, "id": "h01_i2" }, { "type": "input", "C": 300, "lambda": { "k1": 1.043762347934146 }, "id": "h01_i3" }, { "type": "output", "C": 100, "overbeta": { "k1": 1.3047029349176826 }, "id": "h01_j1" }, { "type": "pool", "C": 300, "id": "h01_l1" }, { "type": "output", "C": 200, "overbeta": { "k1": 2.452888783643272 }, "id": "h00_j2" }, { "type": "input", "C": 800, "lambda": { "k1": 4.905777567286544 }, "id": "h00_i1" }, { "type": "input", "C": 800, "lambda": { "k1": 1.6352591890955144 }, "id": "h00_i2" }, { "type": "input", "C": 800, "lambda": { "k1": 3.2705183781910288 }, "id": "h00_i3" }, { "type": "output", "C": 600, "overbeta": { "k1": 4.088147972738786 }, "id": "h00_j1" }, { "type": "pool", "C": 800, "id": "h00_l1" } ], "links": [ { "cost": 6, "source": 1, "target": 5 }, { "cost": 7.017856132762091, "source": 1, "target": 11 }, { "cost": 13.14923557194734, "source": 1, "target": 0 }, { "cost": -14.556969260893403, "source": 1, "target": 24 }, { "cost": -13.104159147075052, "source": 1, "target": 72 }, { "cost": 16, "source": 2, "target": 5 }, { "cost": 5.633780482555956, "source": 2, "target": 24 }, { "cost": -10.244204101125849, "source": 2, "target": 17 }, { "cost": -6.369295728292823, "source": 2, "target": 77 }, { "cost": -5, "source": 3, "target": 0 }, { "cost": 1, "source": 3, "target": 4 }, { "cost": -13.87184683404394, "source": 3, "target": 6 }, { "cost": 14.046043917982004, "source": 3, "target": 18 }, { "cost": 4.456812117410507, "source": 3, "target": 22 }, { "cost": -15, "source": 5, "target": 0 }, { "cost": -9, "source": 5, "target": 4 }, { "cost": 10.465483656440789, "source": 5, "target": 22 }, { "cost": -4.514064929172962, "source": 5, "target": 82 }, { "cost": 6, "source": 7, "target": 11 }, { "cost": 12.179881495506017, "source": 7, "target": 4 }, { "cost": -4.5865868113227215, "source": 7, "target": 72 }, { "cost": 8.937757257581296, "source": 7, "target": 83 }, { "cost": 14.341579179269875, "source": 7, "target": 52 }, { "cost": 13, "source": 8, "target": 11 }, { "cost": 14.96301599433868, "source": 8, "target": 82 }, { "cost": -5, "source": 9, "target": 6 }, { "cost": 1, "source": 9, "target": 10 }, { "cost": 6.812918931131126, "source": 9, "target": 28 }, { "cost": -4.6913793741906815, "source": 9, "target": 24 }, { "cost": -8.47212819351396, "source": 9, "target": 18 }, { "cost": -9.864075840965526, "source": 9, "target": 59 }, { "cost": -15, "source": 11, "target": 6 }, { "cost": -9, "source": 11, "target": 10 }, { "cost": 3.667285107808283, "source": 11, "target": 60 }, { "cost": 10.912982322704167, "source": 11, "target": 18 }, { "cost": 6, "source": 13, "target": 17 }, { "cost": -0.8034196869372892, "source": 13, "target": 40 }, { "cost": 8.20306231712518, "source": 13, "target": 58 }, { "cost": -9.171959884424332, "source": 13, "target": 88 }, { "cost": 13, "source": 14, "target": 17 }, { "cost": 13.395828891063424, "source": 14, "target": 42 }, { "cost": -0.22753924770919554, "source": 14, "target": 18 }, { "cost": 9.989673362757085, "source": 14, "target": 46 }, { "cost": -12.95912500440367, "source": 14, "target": 23 }, { "cost": -5, "source": 15, "target": 12 }, { "cost": 1, "source": 15, "target": 16 }, { "cost": 1.8712977557941066, "source": 15, "target": 46 }, { "cost": -13.779260080374536, "source": 15, "target": 42 }, { "cost": 9.478317926699262, "source": 15, "target": 6 }, { "cost": -15, "source": 17, "target": 12 }, { "cost": -9, "source": 17, "target": 16 }, { "cost": -5.724009351012334, "source": 17, "target": 84 }, { "cost": 6, "source": 19, "target": 23 }, { "cost": -12.44643736590393, "source": 19, "target": 4 }, { "cost": 3.796490950380786, "source": 19, "target": 47 }, { "cost": 10.849177348584057, "source": 19, "target": 16 }, { "cost": 1.4137009141691586, "source": 19, "target": 42 }, { "cost": 9.79456125618955, "source": 19, "target": 58 }, { "cost": -10.981130889835828, "source": 19, "target": 59 }, { "cost": -11.14593113324283, "source": 19, "target": 72 }, { "cost": 16, "source": 20, "target": 23 }, { "cost": 6.040442738575646, "source": 20, "target": 36 }, { "cost": 10.960900206060593, "source": 20, "target": 88 }, { "cost": -5, "source": 21, "target": 18 }, { "cost": 1, "source": 21, "target": 22 }, { "cost": -7.602906212928175, "source": 21, "target": 47 }, { "cost": 1.8739044271959209, "source": 21, "target": 28 }, { "cost": 5.875507243985211, "source": 21, "target": 4 }, { "cost": 11.70215701275432, "source": 21, "target": 36 }, { "cost": -15, "source": 23, "target": 18 }, { "cost": -9, "source": 23, "target": 22 }, { "cost": -11.881166873301018, "source": 23, "target": 4 }, { "cost": 6, "source": 25, "target": 29 }, { "cost": 9.448096990304105, "source": 25, "target": 70 }, { "cost": -6.963965373136094, "source": 25, "target": 84 }, { "cost": -11.431610278578262, "source": 25, "target": 72 }, { "cost": -14.724190456478556, "source": 25, "target": 47 }, { "cost": 16, "source": 26, "target": 29 }, { "cost": -3.4661340144867303, "source": 26, "target": 58 }, { "cost": 10.988123520995906, "source": 26, "target": 71 }, { "cost": 6.656063358235748, "source": 26, "target": 11 }, { "cost": -13.722708565307512, "source": 26, "target": 83 }, { "cost": 7.777280727777072, "source": 26, "target": 16 }, { "cost": -5, "source": 27, "target": 24 }, { "cost": 1, "source": 27, "target": 28 }, { "cost": -4.140887010707498, "source": 27, "target": 72 }, { "cost": -15, "source": 29, "target": 24 }, { "cost": -9, "source": 29, "target": 28 }, { "cost": -5.999785425514501, "source": 29, "target": 42 }, { "cost": -14.17239936547164, "source": 29, "target": 64 }, { "cost": -8.967680373847713, "source": 29, "target": 18 }, { "cost": 6.344740125044961, "source": 29, "target": 76 }, { "cost": 12.013732676772715, "source": 29, "target": 40 }, { "cost": 6, "source": 31, "target": 35 }, { "cost": -5.197902314830603, "source": 31, "target": 88 }, { "cost": -14.952749122441674, "source": 31, "target": 59 }, { "cost": 3.973920859629768, "source": 31, "target": 64 }, { "cost": 13, "source": 32, "target": 35 }, { "cost": 6.628609194247851, "source": 32, "target": 46 }, { "cost": -11.313979261672879, "source": 32, "target": 47 }, { "cost": -5, "source": 33, "target": 30 }, { "cost": 1, "source": 33, "target": 34 }, { "cost": -9.076920163425893, "source": 33, "target": 64 }, { "cost": -11.368836910535943, "source": 33, "target": 70 }, { "cost": 11.515001204816922, "source": 33, "target": 59 }, { "cost": -5.198508746138387, "source": 33, "target": 84 }, { "cost": -13.688774337913383, "source": 33, "target": 29 }, { "cost": -15, "source": 35, "target": 30 }, { "cost": -9, "source": 35, "target": 34 }, { "cost": 6, "source": 37, "target": 41 }, { "cost": -5.171547719499609, "source": 37, "target": 89 }, { "cost": -6.455342239324057, "source": 37, "target": 46 }, { "cost": -8.860751247063602, "source": 37, "target": 52 }, { "cost": 9.436951839413865, "source": 37, "target": 17 }, { "cost": 13, "source": 38, "target": 41 }, { "cost": 11.197404845816973, "source": 38, "target": 23 }, { "cost": -5, "source": 39, "target": 36 }, { "cost": 1, "source": 39, "target": 40 }, { "cost": 3.995968575926806, "source": 39, "target": 70 }, { "cost": -2.95209047222513, "source": 39, "target": 52 }, { "cost": -0.17999525631834956, "source": 39, "target": 18 }, { "cost": -15, "source": 41, "target": 36 }, { "cost": -9, "source": 41, "target": 40 }, { "cost": 6, "source": 43, "target": 47 }, { "cost": -14.497520173518616, "source": 43, "target": 28 }, { "cost": 16, "source": 44, "target": 47 }, { "cost": -5, "source": 45, "target": 42 }, { "cost": 1, "source": 45, "target": 46 }, { "cost": -4.081007593019269, "source": 45, "target": 52 }, { "cost": 12.083268540910613, "source": 45, "target": 10 }, { "cost": -15, "source": 47, "target": 42 }, { "cost": -9, "source": 47, "target": 46 }, { "cost": -8.154292589194162, "source": 47, "target": 70 }, { "cost": -8.556832785584433, "source": 47, "target": 60 }, { "cost": -10.36810286015767, "source": 47, "target": 52 }, { "cost": 6, "source": 49, "target": 53 }, { "cost": 16, "source": 50, "target": 53 }, { "cost": -7.438762816498909, "source": 50, "target": 40 }, { "cost": 6.110899873448542, "source": 50, "target": 89 }, { "cost": 13.946376461505494, "source": 50, "target": 52 }, { "cost": 7.58848318604193, "source": 50, "target": 5 }, { "cost": -5, "source": 51, "target": 48 }, { "cost": 1, "source": 51, "target": 52 }, { "cost": 3.9688096292384962, "source": 51, "target": 16 }, { "cost": 0.07977026104417106, "source": 51, "target": 65 }, { "cost": -15, "source": 53, "target": 48 }, { "cost": -9, "source": 53, "target": 52 }, { "cost": -2.5017564602021025, "source": 53, "target": 88 }, { "cost": 6, "source": 55, "target": 59 }, { "cost": 11.208162404750109, "source": 55, "target": 28 }, { "cost": -6.587423642459065, "source": 55, "target": 60 }, { "cost": -13.827444230325547, "source": 55, "target": 65 }, { "cost": 16, "source": 56, "target": 59 }, { "cost": 0.2723169808656465, "source": 56, "target": 10 }, { "cost": -8.819970495521048, "source": 56, "target": 66 }, { "cost": 13.442844805529905, "source": 56, "target": 71 }, { "cost": 5.260576696297758, "source": 56, "target": 35 }, { "cost": -0.3058558147438113, "source": 56, "target": 47 }, { "cost": -5, "source": 57, "target": 54 }, { "cost": 1, "source": 57, "target": 58 }, { "cost": -2.872508310992366, "source": 57, "target": 53 }, { "cost": -15, "source": 59, "target": 54 }, { "cost": -9, "source": 59, "target": 58 }, { "cost": -12.159405056499747, "source": 59, "target": 72 }, { "cost": 6, "source": 61, "target": 65 }, { "cost": 4.844377193589949, "source": 61, "target": 34 }, { "cost": -1.8858197212699022, "source": 61, "target": 47 }, { "cost": 16, "source": 62, "target": 65 }, { "cost": 7.310845278522578, "source": 62, "target": 4 }, { "cost": 6.679016877973748, "source": 62, "target": 22 }, { "cost": 7.184199859345146, "source": 62, "target": 29 }, { "cost": 13.510354177379913, "source": 62, "target": 11 }, { "cost": -5, "source": 63, "target": 60 }, { "cost": 1, "source": 63, "target": 64 }, { "cost": 15.591465886358971, "source": 63, "target": 77 }, { "cost": -11.89439863902502, "source": 63, "target": 42 }, { "cost": -15, "source": 65, "target": 60 }, { "cost": -9, "source": 65, "target": 64 }, { "cost": 11.33406492077738, "source": 65, "target": 42 }, { "cost": -0.3796121320150725, "source": 65, "target": 24 }, { "cost": 6, "source": 67, "target": 71 }, { "cost": -3.261909819984073, "source": 67, "target": 28 }, { "cost": -14.022090178204483, "source": 67, "target": 60 }, { "cost": -13.454433105286796, "source": 67, "target": 42 }, { "cost": 14.435973562553265, "source": 67, "target": 76 }, { "cost": 16, "source": 68, "target": 71 }, { "cost": 3.216128989438527, "source": 68, "target": 78 }, { "cost": -5, "source": 69, "target": 66 }, { "cost": 1, "source": 69, "target": 70 }, { "cost": 9.898563547675973, "source": 69, "target": 12 }, { "cost": 2.970545333113783, "source": 69, "target": 59 }, { "cost": 3.500533197551743, "source": 69, "target": 54 }, { "cost": 6.687454025669172, "source": 69, "target": 42 }, { "cost": -15, "source": 71, "target": 66 }, { "cost": -9, "source": 71, "target": 70 }, { "cost": -7.578105234235284, "source": 71, "target": 78 }, { "cost": 6, "source": 73, "target": 77 }, { "cost": -6.483870854002875, "source": 73, "target": 72 }, { "cost": 16, "source": 74, "target": 77 }, { "cost": 14.964797400893524, "source": 74, "target": 5 }, { "cost": -13.107684384191547, "source": 74, "target": 16 }, { "cost": 13.036357623931373, "source": 74, "target": 48 }, { "cost": -4.895738961742778, "source": 74, "target": 82 }, { "cost": 7.083087228003492, "source": 74, "target": 54 }, { "cost": -5, "source": 75, "target": 72 }, { "cost": 1, "source": 75, "target": 76 }, { "cost": 7.261513120239599, "source": 75, "target": 12 }, { "cost": -15, "source": 77, "target": 72 }, { "cost": -9, "source": 77, "target": 76 }, { "cost": -7.5559573573830265, "source": 77, "target": 4 }, { "cost": 6, "source": 79, "target": 83 }, { "cost": -1.1626939225586739, "source": 79, "target": 17 }, { "cost": 12.400129781709726, "source": 79, "target": 82 }, { "cost": -11.918589514600267, "source": 79, "target": 48 }, { "cost": 13, "source": 80, "target": 83 }, { "cost": -1.2765058664634257, "source": 80, "target": 53 }, { "cost": 12.90303962411355, "source": 80, "target": 70 }, { "cost": 11.237157569998345, "source": 80, "target": 41 }, { "cost": -6.0155549354488205, "source": 80, "target": 48 }, { "cost": -5, "source": 81, "target": 78 }, { "cost": 1, "source": 81, "target": 82 }, { "cost": 6.188449949996006, "source": 81, "target": 29 }, { "cost": -15, "source": 83, "target": 78 }, { "cost": -9, "source": 83, "target": 82 }, { "cost": -4.6847341042125805, "source": 83, "target": 88 }, { "cost": -13.597743896166017, "source": 83, "target": 76 }, { "cost": 6, "source": 85, "target": 89 }, { "cost": -6.924738377849259, "source": 85, "target": 48 }, { "cost": -12.172305431262998, "source": 85, "target": 59 }, { "cost": -8.700742573447567, "source": 85, "target": 60 }, { "cost": 11.116266917345655, "source": 85, "target": 22 }, { "cost": 15.387583922629606, "source": 85, "target": 77 }, { "cost": -11.959628178119313, "source": 85, "target": 88 }, { "cost": 16, "source": 86, "target": 89 }, { "cost": -9.432807679711775, "source": 86, "target": 5 }, { "cost": -5, "source": 87, "target": 84 }, { "cost": 1, "source": 87, "target": 88 }, { "cost": -15, "source": 89, "target": 84 }, { "cost": -9, "source": 89, "target": 88 }, { "cost": -3.8118950483310883, "source": 89, "target": 48 } ] } } ================================================ FILE: examples/random_QCQPs/qcqp/generate_qcqp_instances.py ================================================ """ // @brief Script to generate the nonconvex QCQP instances with both bilinear and univariate quadratics // Input arguments: numVariables, numInstances // Reference: "Learning to Accelerate the Global Optimization of Quadratically-Constrained Quadratic Programs" by R. Kannan, H. Nagarajan, and D. Deka (Link: https://arxiv.org/abs/2301.00306) // Contributor: @rohitkannan """ import random import json import numpy as np import argparse import os parser = argparse.ArgumentParser() parser.add_argument('--numVariables', type=int, required=True) parser.add_argument('--numInstances', type=int, required=True) args = parser.parse_args() numVariables = int(args.numVariables) numInstances = int(args.numInstances) instances_path = "./N_" + str(numVariables) + "/" os.makedirs(instances_path) # random seed for instances if numVariables == 10: random.seed(3090) elif numVariables == 20: random.seed(1168) elif numVariables == 50: random.seed(9119) np.random.seed(round(random.random()*10000)) start = 1 # starting instance number numQuadraticConstraints = numVariables # number of constraints with bilinear, quadratic and linear terms numLinearConstraints = round(numVariables/5) # number of linear equality constraints constraint_sparsity = 1.0 # (actually opposite of sparsity) fraction of possible bilinear, quadratic and linear terms occurring in each constraint maxNumBilinearTerms = round(numVariables*(numVariables-1)/2) numBilinearTerms = min(5*numVariables,maxNumBilinearTerms) # number of bilinear terms in the formulation frac_quad_terms = 0.25 # anticipated fraction of possible quadratic terms in the formulation numQuadraticTerms = round(frac_quad_terms*numVariables) frac_quad_con_pert = 0.2 # fraction of quadratic constraints perturbed numPertFactors = 3 # number of perturbation factors per perturbed quadratic constraint pert_frac = 0.5 # perturbation fraction around nominal instance # to sort list of lists def Sort(sub_li): return(sorted(sub_li, key = lambda x: (x[0],x[1]))) # GENERATE COMMON BILINEAR TERMS FOR ALL INSTANCES possible_bilinear_terms = [[i,j] for i in range(numVariables) for j in range(i+1,numVariables)] random.shuffle(possible_bilinear_terms) bilinear_terms = Sort(possible_bilinear_terms[:numBilinearTerms]) # GENERATE COMMON QUADRATIC TERMS FOR ALL INSTANCES possible_quadratic_terms = list(range(numVariables)) random.shuffle(possible_quadratic_terms) quadratic_terms = possible_quadratic_terms[:numQuadraticTerms] # GENERATE BASE COEFFICIENTS q_bilinear = [] # bilinear coefficients q_bilinear_ind = [] # bilinear coefficient indices q_quadratic = [] # quadratic coefficients q_quadratic_ind = [] # quadratic coefficient indices # OBJECTIVE COEFFICIENTS q_bilinear.append([2*random.random()-1 for j in range(numBilinearTerms)]) # all bilinear terms participate in the objective (sparsity not applied here) q_bilinear_ind.append(list(np.arange(numBilinearTerms))) q_quadratic.append([2*random.random()-1 for j in range(numQuadraticTerms)]) # all quadratic terms participate in the objective (sparsity not applied here) q_quadratic_ind.append(list(np.arange(numQuadraticTerms))) # CONSTRAINT COEFFICIENTS numQuadNonZero = round(numBilinearTerms*constraint_sparsity) for i in range(numQuadraticConstraints): q_bilinear.append([2*random.random()-1 for j in range(numQuadNonZero)]) tmp_ind = list(np.random.choice(numBilinearTerms, numQuadNonZero, replace=False)) tmp_ind.sort() q_bilinear_ind.append(tmp_ind) numQuadNonZero2 = round(numQuadraticTerms*constraint_sparsity) for i in range(numQuadraticConstraints): q_quadratic.append([2*random.random()-1 for j in range(numQuadNonZero2)]) tmp_ind = list(np.random.choice(numQuadraticTerms, numQuadNonZero2, replace=False)) tmp_ind.sort() q_quadratic_ind.append(tmp_ind) q_linear = [] # linear coefficients q_linear_ind = [] # linear coefficient indices # OBJECTIVE COEFFICIENTS q_linear.append([2*random.random()-1 for j in range(numVariables)]) # all linear terms participate in the objective (sparsity not applied here) q_linear_ind.append(list(np.arange(numVariables))) # CONSTRAINT COEFFICIENTS numLinNonZero = round(numVariables*constraint_sparsity) for i in range(numQuadraticConstraints+numLinearConstraints): if i < numQuadraticConstraints: # only a fraction of linear terms appear in quadratic constraints q_linear.append([2*random.random()-1 for j in range(numLinNonZero)]) tmp_ind = list(np.random.choice(numVariables, numLinNonZero, replace=False)) else: # all linear terms appear in linear equality constraints q_linear.append([2*random.random()-1 for j in range(numVariables)]) tmp_ind = list(np.arange(numVariables)) tmp_ind.sort() q_linear_ind.append(tmp_ind) # GENERATE BASE RHS COEFFICIENTS quadratic_scaling = 100 rhs_quadratic = [quadratic_scaling*random.random() for i in range(numQuadraticConstraints)] linear_scaling = 1 rhs_linear = [linear_scaling*(2*random.random()-1) for i in range(numLinearConstraints)] # RE-SCALE PROBLEM SO THAT CONSTRAINTS RHS ARE EQUAL TO ONE for i in range(numQuadraticConstraints): for j in range(numQuadNonZero): q_bilinear[i+1][j] /= rhs_quadratic[i] for j in range(numQuadNonZero2): q_quadratic[i+1][j] /= rhs_quadratic[i] for j in range(numLinNonZero): q_linear[i+1][j] /= rhs_quadratic[i] for i in range(numLinearConstraints): for j in range(numVariables): q_linear[i+1+numQuadraticConstraints][j] /= rhs_linear[i] # CONSTRUCT PERTURBATION FACTORS FOR THE OBJECTIVE AND QUADRATIC CONSTRAINT COEFFICIENTS q_bilinear_obj_factors = np.zeros((numPertFactors,numBilinearTerms)) q_quadratic_obj_factors = np.zeros((numPertFactors,numQuadraticTerms)) q_linear_obj_factors = np.zeros((numPertFactors,numVariables)) for j in range(numBilinearTerms): for k in range(numPertFactors): q_bilinear_obj_factors[k,j] = pert_frac*random.random()*q_bilinear[0][j] for j in range(numQuadraticTerms): for k in range(numPertFactors): q_quadratic_obj_factors[k,j] = pert_frac*random.random()*q_quadratic[0][j] for j in range(numVariables): for k in range(numPertFactors): q_linear_obj_factors[k,j] = pert_frac*random.random()*q_linear[0][j] numQuadConPert = round(numQuadraticConstraints*frac_quad_con_pert) q_bilinear_con_factors = np.zeros((numPertFactors,numQuadConPert,numQuadNonZero)) q_quadratic_con_factors = np.zeros((numPertFactors,numQuadConPert,numQuadNonZero2)) q_linear_con_factors = np.zeros((numPertFactors,numQuadConPert,numLinNonZero)) for i in range(numQuadConPert): for j in range(numQuadNonZero): for k in range(numPertFactors): q_bilinear_con_factors[k,i,j] = pert_frac*random.random()*q_bilinear[i+1][j] for j in range(numQuadNonZero2): for k in range(numPertFactors): q_quadratic_con_factors[k,i,j] = pert_frac*random.random()*q_quadratic[i+1][j] for j in range(numLinNonZero): for k in range(numPertFactors): q_linear_con_factors[k,i,j] = pert_frac*random.random()*q_linear[i+1][j] # GENERATE PERTURBED INSTANCES for inst in range(start,numInstances+start): output_file = instances_path + "qcqp_v" + str(numVariables) + "_b" + str(numBilinearTerms) + "_q" + str(numQuadraticTerms) + "_s" + str(round(constraint_sparsity*100)) + "_" + str(inst) + ".jl" json_file = instances_path + "qcqp_v" + str(numVariables) + "_b" + str(numBilinearTerms) + "_q" + str(numQuadraticTerms) + "_s" + str(round(constraint_sparsity*100)) + "_" + str(inst) + ".json" json_dict = {} json_dict["numVariables"] = numVariables json_dict["numQuadraticConstraints"] = numQuadraticConstraints json_dict["numLinearConstraints"] = numLinearConstraints json_dict["constraint_sparsity"] = constraint_sparsity json_dict["numBilinearTerms"] = numBilinearTerms json_dict["bilinear_terms"] = bilinear_terms json_dict["numQuadraticTerms"] = numQuadraticTerms json_dict["quadratic_terms"] = quadratic_terms json_dict["pert_frac"] = pert_frac json_dict["numPertFactors"] = numPertFactors json_dict["numQuadConPert"] = numQuadConPert json_dict["bilinear_obj_factors"] = q_bilinear_obj_factors.tolist() json_dict["quadratic_obj_factors"] = q_quadratic_obj_factors.tolist() json_dict["linear_obj_factors"] = q_linear_obj_factors.tolist() json_dict["bilinear_con_factors"] = q_bilinear_con_factors.tolist() json_dict["quadratic_con_factors"] = q_quadratic_con_factors.tolist() json_dict["linear_con_factors"] = q_linear_con_factors.tolist() # GENERATE PERTURBATION FACTORS theta = 2*(np.random.rand(numPertFactors,numQuadConPert+1) - 0.5) json_dict["theta"] = theta.tolist() # STORE SPARSITY PATTERN AND INITIALIZE DATA f = open(output_file, "w") f.write("# ----- Bilinear Terms ----- #\n") f.write("numBilinearTerms = " + str(numBilinearTerms) + "\n") f.write("bilinear_terms = [") count_bilinear = 0 for term in bilinear_terms: f.write("[" + str(term[0]+1) + "," + str(term[1]+1) + "]") count_bilinear += 1 if count_bilinear < numBilinearTerms: f.write(", ") else: f.write("] \n\n") f.write("# ----- Quadratic Terms ----- #\n") f.write("numQuadraticTerms = " + str(numQuadraticTerms) + "\n") f.write("quadratic_terms = " + str([term+1 for term in quadratic_terms]) + "\n\n") f.write("numQuadNonZero = " + str(numQuadNonZero) + "\n") f.write("numQuadNonZero2 = " + str(numQuadNonZero2) + "\n") f.write("numLinNonZero = " + str(numLinNonZero) + "\n\n") f.write("# ----- Data Matrices ----- #\n") f.write("bilinear_obj_coeffs = zeros(Float64," + str(numBilinearTerms) + ") \n") f.write("bilinear_con_coeffs = zeros(Float64," + str(numQuadraticConstraints) + "," + str(numQuadNonZero) + ") \n") f.write("bilinear_con_coeff_indices = zeros(Int64," + str(numQuadraticConstraints) + "," + str(numQuadNonZero) + ") \n") f.write("quadratic_obj_coeffs = zeros(Float64," + str(numQuadraticTerms) + ") \n") f.write("quadratic_con_coeffs = zeros(Float64," + str(numQuadraticConstraints) + "," + str(numQuadNonZero2) + ") \n") f.write("quadratic_con_coeff_indices = zeros(Int64," + str(numQuadraticConstraints) + "," + str(numQuadNonZero2) + ") \n") f.write("linear_obj_coeffs = zeros(Float64," + str(numVariables) + ") \n") f.write("linear_con_coeffs_1 = zeros(Float64," + str(numQuadraticConstraints) + "," + str(numLinNonZero) + ") \n") f.write("linear_con_coeff_indices_1 = zeros(Int64," + str(numQuadraticConstraints) + "," + str(numLinNonZero) + ") \n") f.write("linear_con_coeffs_2 = zeros(Float64," + str(numLinearConstraints) + "," + str(numVariables) + ") \n") f.write("linear_con_coeff_indices_2 = zeros(Int64," + str(numLinearConstraints) + "," + str(numVariables) + ") \n\n") f.write("# ----- Variables ----- #\n") f.write("@variable(m, 0 <= x[1:" + str(numVariables) + "] <= 1)\n") f.write("@variable(m, 0 <= w[1:" + str(numBilinearTerms) + "] <= 1)\n") f.write("@variable(m, 0 <= v[1:" + str(numQuadraticTerms) + "] <= 1)\n\n") f.write("# ----- Bilinear Equations ----- #\n") f.write("@NLconstraint(m, [i=1:" + str(numBilinearTerms) + "], w[i] == x[bilinear_terms[i][1]]*x[bilinear_terms[i][2]])\n\n\n") f.write("# ----- Quadratic Equations ----- #\n") f.write("@NLconstraint(m, [i=1:" + str(numQuadraticTerms) + "], v[i] == (x[quadratic_terms[i]])^2)\n\n\n") json_dict["x_lower"] = [0 for i in range(numVariables)] json_dict["x_upper"] = [1 for i in range(numVariables)] # OBJECTIVE # tmp variables for storing generated data Q = [0.]*numBilinearTerms R = [0.]*numQuadraticTerms q = [0.]*numVariables count_quad_con = 0 count_lin_con = 0 for i in range(numVariables): q[i] = q_linear[0][i] for k in range(numPertFactors): q[i] += q_linear_obj_factors[k,i]*theta[k,0] for i in range(numBilinearTerms): Q[i] = q_bilinear[0][i] for k in range(numPertFactors): Q[i] += q_bilinear_obj_factors[k,i]*theta[k,0] for i in range(numQuadraticTerms): R[i] = q_quadratic[0][i] for k in range(numPertFactors): R[i] += q_quadratic_obj_factors[k,i]*theta[k,0] json_dict["obj_bilinear_coeffs"] = Q json_dict["obj_quadratic_coeffs"] = R json_dict["obj_linear_coeffs"] = q f.write("# ----- Objective ----- #\n") f.write("bilinear_obj_coeffs = " + str(Q) + "\n") f.write("quadratic_obj_coeffs = " + str(R) + "\n") f.write("linear_obj_coeffs = " + str(q) + "\n") f.write("\n") f.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") bilinear_obj_matrix = np.zeros((numVariables, numVariables)) for i in range(numBilinearTerms): bilinear_obj_matrix[bilinear_terms[i][0]][bilinear_terms[i][1]] = Q[i]/2.0 bilinear_obj_matrix[bilinear_terms[i][1]][bilinear_terms[i][0]] = Q[i]/2.0 for i in range(numQuadraticTerms): bilinear_obj_matrix[quadratic_terms[i]][quadratic_terms[i]] = R[i] json_dict["obj_bilinear_eigvals"] = np.linalg.eigvals(bilinear_obj_matrix).tolist() # QUADRATIC CONSTRAINTS f.write("# ----- Constraints ----- #\n") json_dict["quadratic_con_rhs"] = [1.0 for i in range(numQuadraticConstraints)] bilinear_con_coeffs = [] bilinear_con_coeff_indices = [] quadratic_con_coeffs = [] quadratic_con_coeff_indices = [] linear_con_coeffs = [] linear_con_coeff_indices = [] con_bilinear_eigvals = np.empty([numQuadraticConstraints, numVariables], dtype=float) for k in range(numQuadraticConstraints): Q = [0.]*numQuadNonZero Q_ind = [i+1 for i in q_bilinear_ind[count_quad_con+1]] R = [0.]*numQuadNonZero2 R_ind = [i+1 for i in q_quadratic_ind[count_quad_con+1]] q = [0.]*numLinNonZero q_ind = [i+1 for i in q_linear_ind[count_lin_con+1]] count_quad_con += 1 count_lin_con += 1 for i in range(numLinNonZero): q[i] = q_linear[count_lin_con][i] if k < numQuadConPert: for j in range(numPertFactors): q[i] += q_linear_con_factors[j,count_lin_con-1,i]*theta[j,count_lin_con] for i in range(numQuadNonZero): Q[i] = q_bilinear[count_quad_con][i] if k < numQuadConPert: for j in range(numPertFactors): Q[i] += q_bilinear_con_factors[j,count_quad_con-1,i]*theta[j,count_quad_con] for i in range(numQuadNonZero2): R[i] = q_quadratic[count_quad_con][i] if k < numQuadConPert: for j in range(numPertFactors): R[i] += q_quadratic_con_factors[j,count_quad_con-1,i]*theta[j,count_quad_con] bilinear_con_coeffs.append(Q) bilinear_con_coeff_indices.append([float(i) for i in q_bilinear_ind[count_quad_con]]) quadratic_con_coeffs.append(R) quadratic_con_coeff_indices.append([float(i) for i in q_quadratic_ind[count_quad_con]]) linear_con_coeffs.append(q) linear_con_coeff_indices.append([float(i) for i in q_linear_ind[count_lin_con]]) f.write("bilinear_con_coeffs[" + str(count_quad_con) + ",:] = " + str(Q) + "\n") f.write("bilinear_con_coeff_indices[" + str(count_quad_con) + ",:] = " + str(Q_ind) + "\n") f.write("quadratic_con_coeffs[" + str(count_quad_con) + ",:] = " + str(R) + "\n") f.write("quadratic_con_coeff_indices[" + str(count_quad_con) + ",:] = " + str(R_ind) + "\n") f.write("linear_con_coeffs_1[" + str(count_lin_con) + ",:] = " + str(q) + "\n") f.write("linear_con_coeff_indices_1[" + str(count_lin_con) + ",:] = " + str(q_ind) + "\n") f.write("\n") f.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") bilinear_con_matrix = np.zeros((numVariables, numVariables)) for i in range(numQuadNonZero): ind = q_bilinear_ind[count_quad_con][i] ind1 = bilinear_terms[ind][0] ind2 = bilinear_terms[ind][1] bilinear_con_matrix[ind1][ind2] = Q[i]/2.0 bilinear_con_matrix[ind2][ind1] = Q[i]/2.0 for i in range(numQuadNonZero2): bilinear_con_matrix[quadratic_terms[i]][quadratic_terms[i]] = R[i] con_bilinear_eigvals[k] = np.linalg.eigvals(bilinear_con_matrix) json_dict["con_bilinear_eigvals"] = con_bilinear_eigvals.tolist() # LINEAR CONSTRAINTS json_dict["linear_con_rhs"] = [1.0 for i in range(numLinearConstraints)] for k in range(numLinearConstraints): q = [0.]*numVariables q_ind = [i+1 for i in q_linear_ind[count_lin_con+1]] count_lin_con += 1 for i in range(numVariables): q[i] = q_linear[count_lin_con][i] linear_con_coeffs.append(q) linear_con_coeff_indices.append([float(i) for i in q_linear_ind[count_lin_con]]) f.write("linear_con_coeffs_2[" + str(count_lin_con - numQuadraticConstraints) + ",:] = " + str(q) + "\n") f.write("linear_con_coeff_indices_2[" + str(count_lin_con - numQuadraticConstraints) + ",:] = " + str(q_ind) + "\n") f.write("\n") f.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") f.close() json_dict["con_bilinear_coeffs"] = bilinear_con_coeffs json_dict["con_bilinear_coeff_indices"] = bilinear_con_coeff_indices json_dict["con_quadratic_coeffs"] = quadratic_con_coeffs json_dict["con_quadratic_coeff_indices"] = quadratic_con_coeff_indices json_dict["con_linear_coeffs"] = linear_con_coeffs json_dict["con_linear_coeff_indices"] = linear_con_coeff_indices with open(json_file, 'w', encoding='utf-8') as outF: json.dump(json_dict, outF, ensure_ascii=False, indent=4) ================================================ FILE: examples/run_examples.jl ================================================ # - Necessary - # using Alpine using JuMP using Gurobi using Ipopt using Juniper # - Additional - # # using CPLEX # using HiGHS # using Pavito include("JuMP_models.jl") include("optimizers.jl") # Choose underlying solvers for Alpine nlp_solver = get_ipopt() # local continuous solver mip_solver = get_gurobi() # convex mip solver minlp_solver = get_juniper(mip_solver, nlp_solver) # local mixed-intger solver #= Global solver Hints: => Try different integer values (>=4) for `partition_scaling_factor` to potentially observe better Alpine run times (can be instance specific). => Choose `presolve_bt` to `false` if you prefer the bound tightening (OBBT) presolve to be turned off. => If you prefer to use Alpine for only OBBT presolve, without any paritioning applied to the nonlinear terms, include option "apply_partitioning" below and set it to false. =# const alpine = JuMP.optimizer_with_attributes( Alpine.Optimizer, # "minlp_solver" => minlp_solver, "nlp_solver" => nlp_solver, "mip_solver" => mip_solver, "presolve_bt" => true, "apply_partitioning" => true, "partition_scaling_factor" => 10, ) m = nlp3(solver = alpine) JuMP.optimize!(m) # Alpine.variable_values(m) ================================================ FILE: src/Alpine.jl ================================================ module Alpine using JuMP import Combinatorics import Statistics const ALPINE_DEBUG = false include("const.jl") # Engine for high-level algorithmic control and user-interface include("solver_options.jl") include("MOI_wrapper/MOI_wrapper.jl") include("MOI_wrapper/MOI_function2expr.jl") # Engine for expression handling include("nlexpr.jl") include("operators.jl") # Main algorithm include("main_algorithm.jl") include("presolve.jl") include("bounding_model.jl") include("embedding.jl") include("heuristics.jl") # Convexification include("relaxations.jl") include("multilinear.jl") # Model manipulation and utilities include("variable_bounds.jl") include("utility.jl") # Logging include("log.jl") end # module ================================================ FILE: src/MOI_wrapper/MOI_function2expr.jl ================================================ function _constraint_expr(expr, set::MOI.Interval) return Expr(:comparison, set.lower, :(<=), expr, :(<=), set.upper) end _sense(::MOI.EqualTo) = :(==) _sense(::MOI.LessThan) = :(<=) _sense(::MOI.GreaterThan) = :(>=) function _constraint_expr(expr, set) return Expr(:call, _sense(set), expr, MOI.constant(set)) end _moi_function_to_expr(f::Number) = f _moi_function_to_expr(v::MOI.VariableIndex) = Expr(:ref, :x, v.value) function _moi_function_to_expr(t::MOI.ScalarAffineTerm) return Expr(:call, :*, t.coefficient, _moi_function_to_expr(t.variable)) end function _moi_function_to_expr(t::MOI.ScalarQuadraticTerm) coef = t.coefficient if t.variable_1 == t.variable_2 coef /= 2 end return Expr( :call, :*, coef, _moi_function_to_expr(t.variable_1), _moi_function_to_expr(t.variable_2), ) end function _add_constant(expr::Expr, constant) if !iszero(constant) push!(expr.args, constant) end return end function _add_terms(expr::Expr, terms::Vector) for term in terms push!(expr.args, _moi_function_to_expr(term)) end return end function _moi_function_to_expr(f::MOI.ScalarAffineFunction) if iszero(f) return 0 # Similar to `JuMP.affToExpr` in JuMP v0.18 and earlier end expr = Expr(:call, :+) _add_terms(expr, f.terms) _add_constant(expr, f.constant) return expr end function _moi_function_to_expr(f::MOI.ScalarQuadraticFunction) if iszero(f) return 0 # Similar to `JuMP.quadToExpr` in JuMP v0.18 and earlier end expr = Expr(:call, :+) _add_terms(expr, f.quadratic_terms) _add_terms(expr, f.affine_terms) _add_constant(expr, f.constant) return expr end function _moi_function_to_expr(f::MOI.ScalarNonlinearFunction) return Expr(:call, f.head, _moi_function_to_expr.(f.args)...) end ================================================ FILE: src/MOI_wrapper/MOI_wrapper.jl ================================================ """ MOI_wrapper.jl defines the Alpine.Optimizer struct with all mandatory MOI functions overloaded """ """ Alpine.Optimizer struct """ mutable struct Optimizer <: MOI.AbstractOptimizer options::OptimizerOptions # Options set by user # Sub-solver identifier for customized solver option nlp_solver_id::String # NLP Solver identifier string minlp_solver_id::String # MINLP local solver identifier string mip_solver_id::String # MIP solver identifier string # User inputs num_var_orig::Int # Initial number of variables num_cont_var_orig::Int # Initial number of continuous variables num_int_var_orig::Int # Initial number of binary/integer variables num_constr_orig::Int # Initial number of constraints num_lconstr_orig::Int # Initial number of linear constraints num_nlconstr_orig::Int # Initial number of non-linear constraints var_type_orig::Vector{Symbol} # Variable type vector on original variables (only :Bin, :Cont, :Int) var_start_orig::Vector{Float64} # Variable warm start vector on original variables constr_type_orig::Vector{Symbol} # Constraint type vector on original variables (only :(==), :(>=), :(<=)) scalar_constraints::Vector{Any} # Constraint `func`-in-`set` values constr_expr_orig::Vector{Expr} # Constraint expressions obj_expr_orig::Union{Expr,Number} # Objective expression # Additional user inputs concerning local solves l_var_orig::Vector{Float64} # Variable lower bounds u_var_orig::Vector{Float64} # Variable upper bounds constraint_bounds_orig::Vector{MOI.NLPBoundsPair} # Constraint lower bounds nl_constraint_bounds_orig::Vector{MOI.NLPBoundsPair} # Constraint lower bounds sense_orig::MOI.OptimizationSense # Problem type (:Min, :Max) d_orig::Union{Nothing,MOI.AbstractNLPEvaluator} # Instance of AbstractNLPEvaluator for evaluating gradient, Hessian-vector products, and Hessians of the Lagrangian disable_hessian::Bool # Check if there are any user-defined operators, and disable hessians if necessary. has_nl_objective::Bool objective_function::Union{ Nothing, MOI.ScalarAffineFunction{Float64}, MOI.ScalarQuadraticFunction{Float64}, MOI.ScalarNonlinearFunction, } # Additional initial data is_obj_linear_orig::Bool # Boolean parameter for type of objective # Local solution model (extra data for each iteration) l_var::Vector{Float64} # Updated variable lower bounds for local solve u_var::Vector{Float64} # Updated variable upper bounds for local solve # MIP bounding model model_mip::JuMP.Model # JuMP's convex-MIP model for bounding num_var_linear_mip::Int # Number of linear lifted variables required num_var_nonlinear_mip::Int # Number of lifted variables num_var_disc_mip::Int # Number of variables which are discretized num_constr_convex::Int # Number of convex constraints # Expression-related and structural property placeholder linear_terms::Dict{Any,Any} # Dictionary containing details of lifted linear terms nonconvex_terms::Dict{Any,Any} # Dictionary containing details of lifted non-linear terms term_seq::Dict{Int,Any} # Vector-Dictionary for NL terms detection nonlinear_constrs::Dict{Any,Any} # Dictionary containing details of special constraints obj_structure::Symbol # A symbolic indicator of the expression type of objective function constr_structure::Vector{Symbol} # A vector indicating whether a constraint is with the special structure bounding_obj_expr_mip::Union{Expr,Number} # Lifted objective expression; if linear, same as obj_expr_orig bounding_constr_expr_mip::Vector{Expr} # Lifted constraints; if linear, same as corresponding constr_expr_orig bounding_obj_mip::Dict{Any,Any} # Lifted objective expression in affine form bounding_constr_mip::Vector{Dict{Any,Any}} # Lifted constraint expressions in affine form # Discretization Related options candidate_disc_vars::Vector{Int} # A vector of all original variable indices that is involved in the nonlinear terms discretization::Dict{Any,Any} # Discretization points with variable keys disc_vars::Vector{Int} # Variables chosen for discretization int_vars::Vector{Int} # Index vector of integer variables bin_vars::Vector{Int} # Index vector of binary variables # Reformulated problem options l_var_tight::Vector{Float64} # Post-presolve variable upper bounds u_var_tight::Vector{Float64} # Post-presolve variable lower bounds var_type::Vector{Symbol} # Updated variable type for local solve # Solution information presolve_infeasible::Bool # Presolve infeasibility detection flag best_bound::Float64 # Best bound from MIP best_obj::Float64 # Best feasible objective value warm_start_value::Vector{Float64} # Warmstart values set to Alpine best_sol::Vector{Float64} # Best feasible solution best_bound_sol::Vector{Float64} # Best bound solution (arg-min) presolve_best_rel_gap::Float64 # Post-OBBT relative optimality gap = |best_obj - best_bound|/|best_obj|*100 best_rel_gap::Float64 # Relative optimality gap = |best_obj - best_bound|/|best_obj|*100 best_abs_gap::Float64 # Absolute gap = |best_obj - best_bound| bound_sol_history::Vector{Vector{Float64}} # History of bounding solutions limited by "parameter disc_consecutive_forbid" bound_sol_pool::Dict{Any,Any} # A pool of solutions from solving model_mip # Linking constraints info for Multilinear terms linking_constraints_info::Union{Nothing,Dict{Any,Any}} # Stored multilinear linking constraints info # Logging information and status logs::Dict{Symbol,Any} # Logging information detected_incumbent::Bool detected_bound::Bool status::Dict{Symbol,MOI.TerminationStatusCode} # Detailed status of every iteration in the algorithm alpine_status::MOI.TerminationStatusCode # Current Alpine's status # Constructor for Alpine.Optimizer function Optimizer() m = new() m.options = get_default_options() MOI.empty!(m) return m end end struct NumberOfIterations <: MOI.AbstractModelAttribute end MOI.is_set_by_optimize(::NumberOfIterations) = true MOI.get(m::Optimizer, ::NumberOfIterations) = m.logs[:n_iter] struct NumberOfPresolveIterations <: MOI.AbstractModelAttribute end MOI.is_set_by_optimize(::NumberOfPresolveIterations) = true MOI.get(m::Optimizer, ::NumberOfPresolveIterations) = m.logs[:bt_iter] struct TightenedLowerBound <: MOI.AbstractVariableAttribute end MOI.is_set_by_optimize(::TightenedLowerBound) = true function MOI.get(m::Optimizer, ::TightenedLowerBound, vi::MOI.VariableIndex) return m.l_var_tight[vi.value] end struct TightenedUpperBound <: MOI.AbstractVariableAttribute end MOI.is_set_by_optimize(::TightenedUpperBound) = true function MOI.get(m::Optimizer, ::TightenedUpperBound, vi::MOI.VariableIndex) return m.u_var_tight[vi.value] end function MOI.get(m::Optimizer, ::MOI.RawStatusString) return "Alpine ended with status $(m.alpine_status)" end MOI.get(m::Optimizer, ::MOI.TerminationStatus) = m.alpine_status function MOI.get(m::Optimizer, attr::MOI.PrimalStatus) if attr.result_index != 1 return MOI.NO_SOLUTION end status = m.alpine_status if status == MOI.OPTIMAL return MOI.FEASIBLE_POINT elseif status == MOI.NEARLY_FEASIBLE_POINT return MOI.NEARLY_FEASIBLE_POINT elseif status == MOI.INFEASIBLE_POINT return MOI.INFEASIBLE_POINT elseif status == MOI.LOCALLY_SOLVED return MOI.FEASIBLE_POINT end return MOI.NO_SOLUTION end MOI.get(::Optimizer, ::MOI.DualStatus) = MOI.NO_SOLUTION MOI.get(m::Optimizer, ::MOI.ObjectiveValue) = m.best_obj MOI.get(m::Optimizer, ::MOI.ObjectiveBound) = m.best_bound MOI.get(m::Optimizer, ::MOI.SolveTimeSec) = m.logs[:total_time] function get_option(m::Optimizer, s::Symbol) return getproperty(m.options, s) end function set_option(m::Optimizer, s::Symbol, val) return setproperty!(m.options, s, val) end function MOI.is_empty(model::Optimizer) return iszero(model.num_var_orig) end function MOI.empty!(m::Optimizer) m.nlp_solver_id = "" m.minlp_solver_id = "" m.mip_solver_id = "" m.num_var_orig = 0 m.num_cont_var_orig = 0 m.num_int_var_orig = 0 m.num_constr_orig = 0 m.num_lconstr_orig = 0 m.num_nlconstr_orig = 0 m.var_type_orig = Symbol[] m.var_start_orig = Float64[] m.constr_type_orig = Symbol[] m.scalar_constraints = Any[] m.constr_expr_orig = Expr[] # m.num_lconstr_updated = 0 # m.num_nlconstr_updated = 0 # m.indices_lconstr_updated = Int[] m.l_var_orig = Float64[] m.u_var_orig = Float64[] m.constraint_bounds_orig = MOI.NLPBoundsPair[] m.nl_constraint_bounds_orig = MOI.NLPBoundsPair[] m.sense_orig = MOI.FEASIBILITY_SENSE m.d_orig = nothing m.has_nl_objective = false m.objective_function = nothing m.linear_terms = Dict() m.nonconvex_terms = Dict() m.term_seq = Dict() m.nonlinear_constrs = Dict() m.candidate_disc_vars = Int[] m.bounding_constr_expr_mip = [] m.bounding_constr_mip = [] m.disc_vars = [] m.int_vars = [] m.bin_vars = [] m.discretization = Dict() m.num_var_linear_mip = 0 m.num_var_nonlinear_mip = 0 m.num_var_disc_mip = 0 m.num_constr_convex = 0 m.constr_structure = Symbol[] m.best_bound_sol = [] m.bound_sol_history = [] m.presolve_infeasible = false m.bound_sol_history = Vector{Vector{Float64}}(undef, m.options.disc_consecutive_forbid) m.best_obj = Inf m.warm_start_value = Float64[] m.best_sol = Float64[] m.best_bound = -Inf m.presolve_best_rel_gap = Inf m.best_rel_gap = Inf m.best_abs_gap = Inf m.alpine_status = MOI.OPTIMIZE_NOT_CALLED m.linking_constraints_info = nothing create_status!(m) return create_logs!(m) end MOI.supports_incremental_interface(::Optimizer) = true function MOI.copy_to(model::Optimizer, src::MOI.ModelLike) return MOIU.default_copy_to(model, src) end MOI.get(::Optimizer, ::MOI.SolverName) = "Alpine" MOI.get(::Optimizer, ::MOI.SolverVersion) = _ALPINE_VERSION function MOI.set(model::Optimizer, param::MOI.RawOptimizerAttribute, value) return set_option(model, Symbol(param.name), value) end function MOI.get(model::Optimizer, param::MOI.RawOptimizerAttribute) return get_option(model, Symbol(param.name)) end function MOI.add_variables(model::Optimizer, n::Int) return [MOI.add_variable(model) for i in 1:n] end function MOI.add_variable(model::Optimizer) model.num_var_orig += 1 push!(model.l_var_orig, -Inf) push!(model.u_var_orig, Inf) push!(model.var_type_orig, :Cont) push!(model.warm_start_value, 0.0) push!(model.best_sol, 0.0) return MOI.VariableIndex(model.num_var_orig) end function MOI.supports(::Optimizer, ::MOI.VariablePrimalStart, ::Type{MOI.VariableIndex}) return true end function MOI.set( model::Optimizer, ::MOI.VariablePrimalStart, vi::MOI.VariableIndex, value::Union{Real,Nothing}, ) model.best_sol[vi.value] = model.warm_start_value[vi.value] = something(value, 0.0) return end const SCALAR_SET = Union{ MOI.EqualTo{Float64}, MOI.LessThan{Float64}, MOI.GreaterThan{Float64}, MOI.Interval{Float64}, } function MOI.supports_constraint( ::Optimizer, ::Type{MOI.VariableIndex}, ::Type{<:SCALAR_SET}, ) return true end _lower(set::MOI.EqualTo) = set.value _upper(set::MOI.EqualTo) = set.value _lower(set::MOI.LessThan) = nothing _upper(set::MOI.LessThan) = set.upper _lower(set::MOI.GreaterThan) = set.lower _upper(set::MOI.GreaterThan) = nothing _lower(set::MOI.Interval) = set.lower _upper(set::MOI.Interval) = set.upper function MOI.add_constraint(model::Optimizer, vi::MOI.VariableIndex, set::SCALAR_SET) l = _lower(set) if l !== nothing model.l_var_orig[vi.value] = l end u = _upper(set) if u !== nothing model.u_var_orig[vi.value] = u end return MOI.ConstraintIndex{typeof(vi),typeof(set)}(vi.value) end function MOI.supports_constraint( ::Optimizer, ::Type{MOI.VariableIndex}, ::Type{MOI.ZeroOne}, ) return true end function MOI.add_constraint(model::Optimizer, f::MOI.VariableIndex, set::MOI.ZeroOne) model.var_type_orig[f.value] = :Bin return MOI.ConstraintIndex{typeof(f),typeof(set)}(f.value) end function MOI.supports_constraint( model::Optimizer, ::Type{ <:Union{MOI.ScalarAffineFunction{Float64},MOI.ScalarQuadraticFunction{Float64}}, }, ::Type{<:SCALAR_SET}, ) return true end function MOI.add_constraint( model::Optimizer, f::Union{MOI.ScalarAffineFunction{Float64},MOI.ScalarQuadraticFunction{Float64}}, set::SCALAR_SET, ) model.num_constr_orig += 1 push!( model.constraint_bounds_orig, MOI.NLPBoundsPair(something(_lower(set), -Inf), something(_upper(set), Inf)), ) iszero(f.constant) || throw( MOI.ScalarFunctionConstantNotZero{Float64,typeof(f),typeof(set)}(f.constant), ) push!(model.scalar_constraints, (copy(f), copy(set))) push!(model.constr_expr_orig, _constraint_expr(_moi_function_to_expr(f), set)) if f isa MOI.ScalarAffineFunction model.num_lconstr_orig += 1 push!(model.constr_structure, :generic_linear) else model.num_nlconstr_orig += 1 push!(model.constr_structure, :generic_nonlinear) end return MOI.ConstraintIndex{typeof(f),typeof(set)}(model.num_constr_orig) end function MOI.supports_constraint( ::Optimizer, ::Type{<:MOI.ScalarNonlinearFunction}, ::Type{<:SCALAR_SET}, ) return true end function MOI.add_constraint( model::Optimizer, f::MOI.ScalarNonlinearFunction, set::SCALAR_SET, ) model.num_constr_orig += 1 push!( model.constraint_bounds_orig, MOI.NLPBoundsPair(something(_lower(set), -Inf), something(_upper(set), Inf)), ) push!(model.scalar_constraints, (copy(f), copy(set))) push!(model.constr_expr_orig, _constraint_expr(_moi_function_to_expr(f), set)) model.num_nlconstr_orig += 1 push!(model.constr_structure, :generic_nonlinear) return MOI.ConstraintIndex{typeof(f),typeof(set)}(model.num_constr_orig) end function MOI.supports( model::Optimizer, ::Union{MOI.ObjectiveSense,MOI.ObjectiveFunction{F}}, ) where { F<:Union{ MOI.ScalarAffineFunction{Float64}, MOI.ScalarQuadraticFunction{Float64}, MOI.ScalarNonlinearFunction, }, } return true end is_min_sense(model::Optimizer) = model.sense_orig == MOI.MIN_SENSE is_max_sense(model::Optimizer) = model.sense_orig == MOI.MAX_SENSE function MOI.set(model::Optimizer, ::MOI.ObjectiveSense, sense) model.sense_orig = sense if is_max_sense(model) model.best_obj = -Inf model.best_bound = Inf elseif is_min_sense(model) model.best_obj = Inf model.best_bound = -Inf else error("Feasibility sense is not supported by Alpine.") end end function MOI.set(model::Optimizer, ::MOI.ObjectiveFunction{F}, func::F) where {F} model.objective_function = func return end function MOI.set(m::Optimizer, ::MOI.NLPBlock, block) m.d_orig = block.evaluator m.disable_hessian = !( (:Hess in MOI.features_available(block.evaluator)) && (:HessVec in MOI.features_available(block.evaluator)) ) m.has_nl_objective = block.has_objective # We cache it to add it in `load!` as we cannot call `MOI.constraint_expr` yet # so we will add the nonlinear `constr_expr_orig` at the end so we need # to add the bounds at the end too. # So we can consider that the nonlinear constraints are the # `length(m.nl_constraint_bounds_orig)` last ones. m.nl_constraint_bounds_orig = block.constraint_bounds return end # In JuMP v0.18/MathProgBase, the 5th decision variable would be `:(x[5])`. # In JuMP v0.19/MathOptInterface, it is now `:(x[MOI.VariableIndex(5)])`. # To ease the transition, we simply transform it back to what it used to be. _variable_index_to_index(expr::Union{Number,Symbol}) = expr _variable_index_to_index(expr::MOI.VariableIndex) = expr.value function _variable_index_to_index(expr::Expr) for i in eachindex(expr.args) expr.args[i] = _variable_index_to_index(expr.args[i]) end return expr end function _index_to_variable_ref(m::JuMP.Model, idx::Int64) return JuMP.VariableRef(m, MOI.VariableIndex(idx)) end function MOI.get(model::Optimizer, attr::MOI.VariablePrimal, vi::MOI.VariableIndex) MOI.check_result_index_bounds(model, attr) MOI.throw_if_not_valid(model, vi) return model.best_sol[vi.value] end function MOI.get(model::Optimizer, ::MOI.ResultCount) return model.alpine_status == MOI.OPTIMIZE_NOT_CALLED ? 0 : 1 end function MOI.is_valid(model::Alpine.Optimizer, vi::MOI.VariableIndex) return 1 <= vi.value <= model.num_var_orig end function _get_bound_set(model::Alpine.Optimizer, vi::MOI.VariableIndex) if !MOI.is_valid(model, vi) throw(MOI.InvalidIndex(vi)) end return _bound_set(model.l_var_orig[vi.value], model.u_var_orig[vi.value]) end function MOI.is_valid( model::Alpine.Optimizer, ci::MOI.ConstraintIndex{MOI.VariableIndex,S}, ) where {S<:SCALAR_SET} set = _get_bound_set(model, MOI.VariableIndex(ci.value)) return set isa S end function MOI.get( model::Alpine.Optimizer, ::MOI.ConstraintSet, ci::MOI.ConstraintIndex{MOI.VariableIndex,S}, ) where {S<:SCALAR_SET} if !MOI.is_valid(model, ci) throw(MOI.InvalidIndex(ci)) end return _get_bound_set(model, MOI.VariableIndex(ci.value)) end # Taken from MatrixOptInterface.jl @enum ConstraintSense EQUAL_TO GREATER_THAN LESS_THAN INTERVAL _sense(::Type{<:MOI.EqualTo}) = EQUAL_TO _sense(::Type{<:MOI.LessThan}) = LESS_THAN _sense(::Type{<:MOI.GreaterThan}) = GREATER_THAN _sense(::Type{<:MOI.Interval}) = INTERVAL _no_upper(bound) = bound != typemax(bound) _no_lower(bound) = bound != typemin(bound) function _bound_set(lb::T, ub::T) where {T} if _no_upper(ub) if _no_lower(lb) if ub == lb return MOI.EqualTo(lb) else return MOI.Interval(lb, ub) end else return MOI.LessThan(ub) end else if _no_lower(lb) return MOI.GreaterThan(lb) else return end end end #= function _bound_sense(lb::T, ub::T) where T if _no_upper(ub) if _no_lower(lb) if lb == ub return EQUAL_TO else return INTERVAL end else return LESS_THAN end else if _no_lower(lb) return GREATER_THAN else return end end end =# ================================================ FILE: src/bounding_model.jl ================================================ """ create_bounding_mip(m::Optimizer; use_disc = nothing) Set up a MILP bounding model base on variable domain partitioning information stored in `use_disc`. By default, if `use_disc` is not provided, it will use `m.discretizations` store in the Alpine model. The basic idea of this MILP bounding model is to use piecewise polyhedral/convex relaxations to tighten the basic relaxations of the original non-convex region. Among all presented partitions, the bounding model will choose one specific partition as the lower bound solution. The more partitions there are, the better or finer bounding model relax the original MINLP while the more efforts required to solve this MILP is required. """ function create_bounding_mip(m::Optimizer; use_disc = nothing) if (use_disc === nothing) if (m.logs[:n_iter] == 1) && (m.status[:local_solve] in union(STATUS_OPT, STATUS_LIMIT, STATUS_WARM_START)) # Setting up an initial partition add_partition(m, use_solution = m.best_sol) elseif m.logs[:n_iter] >= 2 # Add subsequent iteration partitions add_partition(m) end discretization = m.discretization else discretization = use_disc end m.model_mip = JuMP.Model(get_option(m, :mip_solver)) # Construct JuMP Model start_build = time() # ------- Model Construction ------ # amp_post_vars(m) # Post original and lifted variables amp_post_lifted_constraints(m) # Post original and lifted constraints amp_post_lifted_objective(m) # Post original and/or objective amp_post_convexification(m, use_disc = discretization) # Post convexification constraints # --------------------------------- # cputime_build = time() - start_build m.logs[:total_time] += cputime_build m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time]) return end """ amp_post_convexification(m::Optimizer; use_disc = nothing) Wrapper function to apply piecewise convexification of the problem for the bounding MIP model. This function talks to nonconvex_terms and convexification methods to finish the last step required during the construction of bounding model. """ function amp_post_convexification(m::Optimizer; use_disc = nothing) use_disc === nothing ? discretization = m.discretization : discretization = use_disc amp_post_convhull(m, use_disc = discretization) # convex hull representation _is_fully_convexified(m) # Ensure if all the non-linear terms are convexified return end function amp_post_vars(m::Optimizer; kwargs...) options = Dict(kwargs) if haskey(options, :use_disc) l_var = [ options[:use_disc][i][1] for i in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip) ] u_var = [ options[:use_disc][i][end] for i in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip) ] else l_var = m.l_var_tight u_var = m.u_var_tight end JuMP.@variable( m.model_mip, x[i = 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip)] ) for i in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip) # Interestingly, not enforcing category of lifted variables is able to improve performance if i <= m.num_var_orig if m.var_type_orig[i] == :Bin set_binary(x[i]) elseif m.var_type_orig[i] == :Int set_integer(x[i]) end end # Changed to tight bound, if no bound tightening is performed, will be just .l_var_orig l_var[i] > -Inf && JuMP.set_lower_bound(x[i], l_var[i]) # Changed to tight bound, if no bound tightening is performed, will be just .u_var_orig u_var[i] < Inf && JuMP.set_upper_bound(x[i], u_var[i]) m.var_type[i] == :Int && error( "Alpine does not support MINLPs with generic integer (non-binary) variables yet! Try Juniper.jl for finding a local feasible solution", ) end return end function amp_post_lifted_constraints(m::Optimizer) for i in 1:m.num_constr_orig if m.constr_structure[i] == :affine amp_post_affine_constraint(m.model_mip, m.bounding_constr_mip[i]) elseif m.constr_structure[i] == :convex amp_post_convex_constraint(m.model_mip, m.bounding_constr_mip[i]) else error("Unknown constr_structure type $(m.constr_structure[i])") end end for i in keys(m.linear_terms) amp_post_linear_lift_constraints(m.model_mip, m.linear_terms[i]) end return end function amp_post_affine_constraint(model_mip::JuMP.Model, affine::Dict) if affine[:sense] == :(>=) JuMP.@constraint( model_mip, sum( affine[:coefs][j] * _index_to_variable_ref(model_mip, affine[:vars][j].args[2]) for j in 1:affine[:cnt] ) >= affine[:rhs] ) elseif affine[:sense] == :(<=) JuMP.@constraint( model_mip, sum( affine[:coefs][j] * _index_to_variable_ref(model_mip, affine[:vars][j].args[2]) for j in 1:affine[:cnt] ) <= affine[:rhs] ) elseif affine[:sense] == :(==) JuMP.@constraint( model_mip, sum( affine[:coefs][j] * _index_to_variable_ref(model_mip, affine[:vars][j].args[2]) for j in 1:affine[:cnt] ) == affine[:rhs] ) else error("Unkown sense.") end return end function amp_post_convex_constraint(model_mip::JuMP.Model, convex::Dict) !prod([i == 2 for i in convex[:powers]]) && error("No relaxation implementation for convex constraints $(convex[:expr])") if convex[:sense] == :(<=) JuMP.@constraint( model_mip, sum( convex[:coefs][j] * _index_to_variable_ref(model_mip, convex[:vars][j].args[2])^2 for j in 1:convex[:cnt] ) <= convex[:rhs] ) elseif convex[:sense] == :(>=) JuMP.@constraint( model_mip, sum( convex[:coefs][j] * _index_to_variable_ref(model_mip, convex[:vars][j].args[2])^2 for j in 1:convex[:cnt] ) >= convex[:rhs] ) else error( "No equality constraints should be recognized as supported convex constriants", ) end return end function amp_post_linear_lift_constraints(model_mip::JuMP.Model, l::Dict) @assert l[:ref][:sign] == :+ JuMP.@constraint( model_mip, _index_to_variable_ref(model_mip, l[:y_idx]) == sum(i[1] * _index_to_variable_ref(model_mip, i[2]) for i in l[:ref][:coef_var]) + l[:ref][:scalar] ) return end function amp_post_lifted_objective(m::Optimizer) #if isa(m.obj_expr_orig, Number) if m.obj_expr_orig == :(+()) JuMP.@objective(m.model_mip, m.sense_orig, 0.0) elseif expr_isconst(m.obj_expr_orig) # This eval is okay because expr_isconst is true JuMP.@objective(m.model_mip, m.sense_orig, eval(m.obj_expr_orig)) elseif m.obj_structure == :affine JuMP.@objective( m.model_mip, m.sense_orig, m.bounding_obj_mip[:rhs] + sum( m.bounding_obj_mip[:coefs][i] * _index_to_variable_ref(m.model_mip, m.bounding_obj_mip[:vars][i].args[2]) for i in 1:m.bounding_obj_mip[:cnt] ) ) elseif m.obj_structure == :convex # This works only when the original objective is convex quadratic. # Higher-order convex monomials need implementation of outer-approximation (check resolve_convex_constr in operators.jl) JuMP.@objective( m.model_mip, m.sense_orig, m.bounding_obj_mip[:rhs] + sum( m.bounding_obj_mip[:coefs][i] * _index_to_variable_ref( m.model_mip, m.bounding_obj_mip[:vars][i].args[2], )^2 for i in 1:m.bounding_obj_mip[:cnt] ) ) else error("Unknown structural obj type $(m.obj_structure)") end return end function add_partition(m::Optimizer; kwargs...) options = Dict(kwargs) haskey(options, :use_disc) ? discretization = options[:use_disc] : discretization = m.discretization haskey(options, :use_solution) ? point_vec = options[:use_solution] : point_vec = m.best_bound_sol if isa(get_option(m, :disc_add_partition_method), Function) m.discretization = get_option(m, :disc_add_partition_method)( m, use_disc = discretization, use_solution = point_vec, ) elseif get_option(m, :disc_add_partition_method) == "adaptive" m.discretization = add_adaptive_partition(m, use_disc = discretization, use_solution = point_vec) elseif get_option(m, :disc_add_partition_method) == "uniform" m.discretization = add_uniform_partition(m, use_disc = discretization) else error("Unknown input on how to add partitions.") end return end # TODO: also need to document the special diverted cases when new partition touches both corners """ add_adaptive_partition(m::Optimizer; use_disc::Dict, use_solution::Vector) A built-in method used to add a new partition on feasible domains of variables chosen for partitioning. This can be illustrated by the following example. Let the previous iteration's partition vector on variable "x" be given by [0, 3, 7, 9]. And say, the lower bounding solution has a value of 4 for variable "x". In 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] There are two options for this function, * `use_disc(default=m.discretization)`:: to regulate which is the base to add new partitions on * `use_solution(default=m.best_bound_sol)`:: to regulate which solution to use when adding new partitions on This function can be accordingly modified by the user to change the behavior of the solver, and thus the convergence. """ function add_adaptive_partition(m::Optimizer; kwargs...) options = Dict(kwargs) haskey(options, :use_disc) ? discretization = options[:use_disc] : discretization = m.discretization haskey(options, :use_solution) ? point_vec = copy(options[:use_solution]) : point_vec = copy(m.best_bound_sol) haskey(options, :use_ratio) ? ratio = options[:use_ratio] : ratio = get_option(m, :partition_scaling_factor) haskey(options, :branching) ? branching = options[:branching] : branching = false if length(point_vec) < m.num_var_orig + m.num_var_linear_mip + m.num_var_nonlinear_mip point_vec = resolve_lifted_var_value(m, point_vec) # Update the solution vector for lifted variable end if branching discretization = deepcopy(discretization) end processed = Set{Int}() # Perform discretization based on type of nonlinear terms # for i in m.disc_vars point = point_vec[i] # Original Variable λCnt = length(discretization[i]) # Built-in method based-on variable type if m.var_type[i] == :Cont i in processed && continue point = correct_point(m, discretization[i], point, i) for j in 1:λCnt if point >= discretization[i][j] && point <= discretization[i][j+1] # Locating the right location radius = calculate_radius(discretization[i], j, ratio) insert_partition_helper(m, i, j, point, radius, discretization[i]) push!(processed, i) break end end elseif m.var_type[i] == :Bin # This should never happen @warn " Warning: Binary variable in m.disc_vars. Check out what is wrong..." continue # No partition should be added to binary variable unless user specified elseif m.var_type[i] == :Int error( "Alpine does not support MINLPs with generic integer (non-binary) variables yet!", ) else error("Unexpected variable types while inserting partitions") end end return discretization end """ This function targets to address unexpected numerical issues when adding partitions in tight regions. """ function correct_point(m::Optimizer, partvec::Vector, point::Float64, var::Int) tol = get_option(m, :tol) if point < partvec[1] - tol || point > partvec[end] + tol @warn " Warning: VAR$(var) SOL=$(point) out of discretization [$(partvec[1]),$(partvec[end])]. Hence, taking the middle point." return 0.5 * (partvec[1] + partvec[end]) # Should choose the longest range end isapprox(point, partvec[1]; atol = tol) && return partvec[1] isapprox(point, partvec[end]; atol = tol) && return partvec[end] return point end function calculate_radius(partvec::Vector, part::Int, ratio::Any) lb_local = partvec[part] ub_local = partvec[part+1] distance = ub_local - lb_local if isa(ratio, Float64) || isa(ratio, Int) radius = distance / ratio elseif isa(ratio, Function) radius = distance / ratio(m) else error("Undetermined partition scaling factor") end return radius end function insert_partition_helper( m::Optimizer, var::Int, partidx::Int, point::Number, radius::Float64, partvec::Vector, ) abstol, reltol = get_option(m, :disc_abs_width_tol), get_option(m, :disc_rel_width_tol) lb_local, ub_local = partvec[partidx], partvec[partidx+1] ub_touch, lb_touch = true, true lb_new, ub_new = max(point - radius, lb_local), min(point + radius, ub_local) if ub_new < ub_local && !isapprox(ub_new, ub_local; atol = abstol) && abs(ub_new - ub_local) / (1e-8 + abs(ub_local)) > reltol # Insert new UB-based partition insert!(partvec, partidx + 1, ub_new) ub_touch = false end if lb_new > lb_local && !isapprox(lb_new, lb_local; atol = abstol) && abs(lb_new - lb_local) / (1e-8 + abs(lb_local)) > reltol # Insert new LB-based partition insert!(partvec, partidx + 1, lb_new) lb_touch = false end if (ub_touch && lb_touch) || check_solution_history(m, var) distvec = [(j, partvec[j+1] - partvec[j]) for j in 1:length(partvec)-1] sort!(distvec, by = x -> x[2]) point_orig = point pos = distvec[end][1] lb_local = partvec[pos] ub_local = partvec[pos+1] isapprox(lb_local, ub_local; atol = get_option(m, :tol)) && return chunk = (ub_local - lb_local) / get_option(m, :disc_divert_chunks) point = lb_local + (ub_local - lb_local) / get_option(m, :disc_divert_chunks) for i in 2:get_option(m, :disc_divert_chunks) insert!( partvec, pos + 1, lb_local + chunk * (get_option(m, :disc_divert_chunks) - (i - 1)), ) end (get_option(m, :log_level) > 199) && println( "[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))|", ) else (get_option(m, :log_level) > 199) && println( "[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))|", ) end return end function add_uniform_partition(m::Optimizer; kwargs...) options = Dict(kwargs) haskey(options, :use_disc) ? discretization = options[:use_disc] : discretization = m.discretization for i in m.disc_vars # Only construct when discretized lb_local = discretization[i][1] ub_local = discretization[i][end] distance = ub_local - lb_local # chunk = distance / ((m.logs[:n_iter] + 1) * get_option(m, :disc_uniform_rate)) chunk = distance / (m.logs[:n_iter] * get_option(m, :disc_uniform_rate)) discretization[i] = [ lb_local + chunk * (j - 1) for j in 1:(m.logs[:n_iter])*get_option(m, :disc_uniform_rate) ] push!(discretization[i], ub_local) # Safety Scheme end return discretization end function update_partition_scaling_factor(m::Optimizer, presolve = false) m.logs[:n_iter] > 2 && return get_option(m, :partition_scaling_factor) # Stop branching after the second iterations ratio_pool = [8:2:20;] # Built-in try range incumb_ratio = ratio_pool[1] is_min_sense(m) ? incumb_res = -Inf : incumb_res = Inf res_collector = Float64[] for r in ratio_pool st = time() if !isempty(m.best_sol) branch_disc = add_adaptive_partition( m, use_disc = m.discretization, branching = true, use_ratio = r, use_solution = m.best_sol, ) else branch_disc = add_adaptive_partition( m, use_disc = m.discretization, branching = true, use_ratio = r, ) end create_bounding_mip(m, use_disc = branch_disc) res = disc_branch_solve(m) push!(res_collector, res) if m.sense_orig == MOI.MAX_SENSE ? res < incumb_res : res > incumb_res incumb_res = res incumb_ratio = r end et = time() - st if et > 300 # 5 minutes limitation println("Expensive disc branching pass... Fixed at 8") return 8 end get_option(m, :log_level) > 0 && println("BRANCH RATIO = $(r), METRIC = $(res) || TIME = $(time()-st)") end if Statistics.std(res_collector) >= 1e-2 # Detect if all solutions are similar to each other get_option(m, :log_level) > 0 && println("RATIO BRANCHING OFF due to solution variance test passed.") set_option(m, :partition_scaling_factor_branch, false) # If an incumbent ratio is selected, then stop the branching scheme end if !isempty(m.best_sol) m.discretization = add_adaptive_partition( m, use_disc = m.discretization, branching = true, use_ratio = incumb_ratio, use_solution = m.best_sol, ) else m.discretization = add_adaptive_partition( m, use_disc = m.discretization, branching = true, use_ratio = incumb_ratio, ) end get_option(m, :log_level) > 0 && println("INCUMB_RATIO = $(incumb_ratio)") return incumb_ratio end function disc_branch_solve(m::Optimizer) # ================= Solve Start ================ # set_mip_time_limit(m) start_bounding_solve = time() JuMP.optimize!(m.model_mip) status = MOI.get(m.model_mip, MOI.TerminationStatus()) cputime_branch_bounding_solve = time() - start_bounding_solve m.logs[:total_time] += cputime_branch_bounding_solve m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time]) # ================= Solve End ================ # if status in STATUS_OPT || status in STATUS_LIMIT return MOI.get(m.model_mip, MOI.ObjectiveBound()) else @warn " Warning: Unexpected solving condition $(status) during disc branching." end # Safety scheme if is_min_sense(m) return -Inf elseif is_max_sense(m) return Inf end end ================================================ FILE: src/const.jl ================================================ const ALPINE_C_NLTERMS = [ :BILINEAR, :MONOMIAL, :MULTILINEAR, :BININT, :BINLIN, :INTLIN, :BINPROD, :INTPROD, :cos, :sin, ] const ALPINE_C_MONOMIAL = [:BILINEAR, :MONOMIAL, :MULTILINEAR] const ALPINE_C_TRIGONOMETRIC = [:sin, :cos] ================================================ FILE: src/embedding.jl ================================================ """ This function creates a mapping dictionary to link the right λ to the right bineary variables based on how many partitions are required and a given encoding method. """ function embedding_map(λCnt::Int, encoding::Any = ebd_gray, ibs::Bool = false) map = Dict() encoding = resolve_encoding_key(encoding) L = Int(ceil(log(2, λCnt - 1))) for i in 1:L*2 map[i] = Set() end H = [encoding(i, L) for i in 0:max(1, (2^L - 1))] map[:H_orig] = H map[:H] = [ebd_support_binary_vec(H[i]) for i in 1:length(H)] # Store the map map[:L] = L !is_compatible_encoding(H) && error("Encodign method is not SOS-2 compatible...") # Mapping SOS-2 :: Aλ <= x && A'λ <= 1-x # |x| = L : Flip 1 -> bCnt : bCnt + 1 -> bCnt + bCnt J = Set(collect(1:(2^L+1))) J_s = Set(collect(1:λCnt)) for l in 1:L if ibs L_constr = Set() R_constr = Set() for j in 0:2^L prod([(l in ebd_σ(H[i])) for i in ebd_I(j, 2^L + 1)]) && push!(L_constr, j + 1) prod([!(l in ebd_σ(H[i])) for i in ebd_I(j, 2^L + 1)]) && push!(R_constr, j + 1) end L_branch = intersect(J_s, setdiff(J, L_constr)) R_branch = intersect(J_s, setdiff(J, R_constr)) map[l] = setdiff(J_s, L_branch) map[l+L] = setdiff(J_s, R_branch) else for j in 0:(λCnt-1) prod([(l in ebd_σ(H[i])) for i in ebd_I(j, λCnt)]) && push!(map[l], j + 1) prod([!(l in ebd_σ(H[i])) for i in ebd_I(j, λCnt)]) && push!(map[l+L], j + 1) end end end return map end """ This function parse the encoding key string and return the built-in encoding function. """ function resolve_encoding_key(encoding::Any) isa(encoding, Function) && return encoding encoding == "default" && return ebd_gray return error("Must specify a encoding method when using convhull_ebd formulation") end """ This function is the same σ() function described in Vielma and Nemhauser 2011. """ function ebd_σ(b::String) sv = ebd_support_bool_vec(b) return [i for i in 1:length(sv) if sv[i]] end """ This function is the same I() function described in Vielma and Nemhauser 2011. """ function ebd_I(j, λCnt) return [i for i in collect(1:Int((λCnt - 1))) if j in [i - 1, i]] #Page 52 end """ This function is the same S() function described in Vielma and Nemhauser 2011. """ function ebd_S(i) (i <= 0) && error("Embedding utility S_[i] doesn't take i<=0") return [i, i - 1] end """ This function checks whether the encoding method is compatible or not to obtain a valid mapping. """ function is_compatible_encoding(code_seq::Vector) for i in 1:(length(code_seq)-1) sum( abs.(ebd_support_bool_vec(code_seq[i]) - ebd_support_bool_vec(code_seq[i+1])), ) != 1 && return false end return true end """ This is a utility function that convert the binary string into bool vector """ function ebd_support_bool_vec(s::String) v = Vector{Bool}(undef, length(s)) for i in 1:length(s) s[i] == '1' ? v[i] = true : v[i] = false end return v end """ This is a utility function that convert the binary string into 0/1 vector """ function ebd_support_binary_vec(s::String) v = Vector{Int}(undef, length(s)) for i in 1:length(s) s[i] == '1' ? v[i] = 1 : v[i] = 0 end return v end """ This is the function that translate the bounding constraints (α¹b⁰+α²b¹ <= x <= α¹b¹+α²b²) with log # of binary variables, i.e., generate these constraints using log # of binary variables. """ function ebd_link_xα( m::Optimizer, α::Vector, λCnt::Int, disc_vec::Vector, code_seq::Vector, var_idx::Int, ) lifters = Dict() exprs = Dict() L = Int(ceil(log(2, λCnt - 1))) P = length(disc_vec) - 1 # Expression expansion for i in 1:P code_vec = ebd_support_bool_vec(code_seq[i]) lifters, exprs = ebd_link_expression(code_vec, lifters, exprs, i) end # Construct Variable Vector α_A = JuMP.@variable( m.model_mip, [1:length(keys(lifters))], lower_bound = 0.0, upper_bound = 1.0, base_name = "αA$(var_idx)" ) for i in keys(lifters) # Build first-level evaluation relaxation_multilinear_binary(m.model_mip, α_A[lifters[i]-L], [α[j] for j in i]) end α_R = [α; α_A] # Initialize/re-arrgange the variable sequence for i in 1:P # Start populating sub-expressions exprs[i][:expr] = JuMP.@expression( m.model_mip, sum( exprs[i][:coefs][j] * α_R[exprs[i][:vars][j]] for j in 1:exprs[i][:length] if exprs[i][:vars][j] != 0 ) + exprs[i][:vals] ) end # Contructing final constraints JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, var_idx) >= sum(exprs[j][:expr] * disc_vec[j] for j in 1:P) ) JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, var_idx) <= sum(exprs[j-1][:expr] * disc_vec[j] for j in 2:(P+1)) ) return end """ This is a utility function used in ebd_link_xα() that constructing the mapping that links partitions with combinations of binary variables. """ function ebd_link_expression(code::Vector, lift_dict::Dict, link_dict::Dict, p_idx::Int) L = length(code) # Strickly mapping p_idx -> x code[1] ? coefs = Any[1] : coefs = Any[1, -1] code[1] ? vars = Any[1] : vars = Any[0, 1] prod(.!code) ? vals = 1.0 : vals = 0.0 # Marks the eventual expression is going have 1 or not for i in 2:L if code[i] for j in 1:length(coefs) (vars[j] == 0) ? vars[j] = i : vars[j] = [vars[j]; i] # Update vars @assert length(vars) == length(coefs) end else for j in 1:length(coefs) (vars[j] == 0) ? push!(vars, i) : push!(vars, [vars[j]; i]) # Update vars with variable multiplier (ADDING) (vars[j] == 0) ? push!(coefs, -1) : push!(coefs, coefs[j] * -1) # Update the coeffs with -1 (ADDING) end end end @assert length(coefs) == length(vars) # Maintaining the dictionary of lifted variables and swp for i in 1:length(vars) if isa(vars[i], Vector) !haskey(lift_dict, vars[i]) && (lift_dict[vars[i]] = L + length(keys(lift_dict)) + 1) vars[i] = lift_dict[vars[i]] end end # Maintain the expression dictionary link_dict[p_idx] = Dict( :p_idx => p_idx, :coefs => coefs, :vars => vars, :vals => vals, :length => length(coefs), ) return lift_dict, link_dict end """ Built-in Encoding methods: binary encoding This is a compatible encoding """ ebd_binary(n, idx) = string(n, base = 2, pad = idx) """ Built-in Encoding methods: gray encoding This is a compatible encoding """ function ebd_gray(n, idx) code_decimal = xor(n, n >> 1) return string(code_decimal, base = 2, pad = idx) end ================================================ FILE: src/heuristics.jl ================================================ """ Ranking of variables involved in nonlinear terms for piecewise adaptive partitioning: Ranked based on the absolute gap between each variable's solution from the lower-bounding MIP and the best feasible solution to the MINLP. Currently doesn't support recursive convexification """ function update_disc_cont_var(m::Optimizer) length(m.candidate_disc_vars) <= 15 && return # Algorithm Separation Point var_idxs = copy(m.candidate_disc_vars) var_diffs = Vector{Float64}( undef, m.num_var_orig + length(keys(m.linear_terms)) + length(keys(m.nonconvex_terms)), ) for i in 1:m.num_var_orig # Original Variables var_diffs[i] = abs(m.best_sol[i] - m.best_bound_sol[i]) end !isempty(m.linear_terms) && (var_diffs = _eval_var_diffs!(m.linear_terms, var_diffs)) !isempty(m.nonconvex_terms) && (var_diffs = _eval_var_diffs!(m.nonconvex_terms, var_diffs)) distance = Dict(zip(var_idxs, var_diffs)) weighted_min_vertex_cover(m, distance) (get_option(m, :log_level) > 100) && println("updated partition var selection => $(m.disc_vars)") return end # Helper function for sequential evaluation to avoid dependency issue function _eval_var_diffs!(terms::Dict{Any,Any}, var_diffs::Vector{Float64}) for i in 1:length(keys(terms)) for j in keys(terms) if terms[j][:id] == i var_diffs[terms[j][:lifted_var_ref].args[2]] = terms[j][:evaluator](terms[j], var_diffs) end end end return var_diffs end ================================================ FILE: src/log.jl ================================================ # Create dictionary of logs for timing and iteration counts function create_logs!(m) logs = Dict{Symbol,Any}() # Timers logs[:presolve_time] = 0.0 # Total presolve-time of the algorithm logs[:total_time] = 0.0 # Total run-time of the algorithm logs[:time_left] = get_option(m, :time_limit) # Total remaining time of the algorithm if time-out is specified # Values logs[:obj] = [] # Iteration-based objective logs[:bound] = [] # Iteration-based objective bound # Counters logs[:n_iter] = 0 # Number of iterations logs[:n_feas] = 0 # Number of times a new feasible solution is obtained logs[:ub_incumb_cnt] = 0 # Number of incumbents detected in the upper bound logs[:lb_incumb_cnt] = 0 # Number of incumebnts detected in the lower bound logs[:bt_iter] = 0 return m.logs = logs end function reset_timer(m::Optimizer) m.logs[:total_time] = 0.0 m.logs[:time_left] = get_option(m, :time_limit) return m end function logging_summary(m::Optimizer) if get_option(m, :log_level) > 0 printstyled("\nPROBLEM STATISTICS\n", color = :cyan, bold = true) is_min_sense(m) && (println(" Objective sense = Min")) is_max_sense(m) && (println(" Objective sense = Max")) println( " # Variables = ", length([i for i in 1:m.num_var_orig if m.var_type[i] == :Cont]) + 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]), ) println( " # Bin-Int Variables = ", 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]), ) println(" # Constraints = ", m.num_constr_orig) println(" # NL Constraints = ", m.num_nlconstr_orig) println(" # Linear Constraints = ", m.num_lconstr_orig) get_option(m, :recognize_convex) && println( " # Detected convex constraints = $(length([i for i in m.constr_structure if i == :convex]))", ) println(" # Detected nonlinear terms = ", length(m.nonconvex_terms)) println( " # Variables involved in nonlinear terms = ", length(m.candidate_disc_vars), ) println(" # Potential variables for partitioning = ", length(m.disc_vars)) printstyled("SUB-SOLVERS USED BY ALPINE\n", color = :cyan, bold = true) if get_option(m, :minlp_solver) === nothing println(" NLP local solver = ", m.nlp_solver_id) else println(" MINLP local solver = ", m.minlp_solver_id) end println(" MIP solver = ", m.mip_solver_id) printstyled("ALPINE CONFIGURATION\n", color = :cyan, bold = true) project = read(joinpath(dirname(@__DIR__), "Project.toml"), String) m_version = match(r"version \= \"(.+?)\"", project) println(" Alpine version = ", m_version[1]) if is_min_sense(m) println( " Maximum iterations (lower-bounding MIPs) = ", get_option(m, :max_iter), ) elseif is_max_sense(m) println( " Maximum iterations (upper-bounding MIPs) = ", get_option(m, :max_iter), ) else println(" Maximum iterations (bounding MIPs) = ", get_option(m, :max_iter)) end println(" Relative global optimality gap = ", get_option(m, :rel_gap) * 100, "%") if get_option(m, :disc_var_pick) == 0 println(" Potential variables chosen for partitioning = All") elseif get_option(m, :disc_var_pick) == 1 println( " Potential variables chosen for partitioning = Minimum vertex cover", ) end if get_option(m, :partition_scaling_factor_branch) println(" Partition scaling factor branch activated") else println( " Partition scaling factor = ", get_option(m, :partition_scaling_factor), ) end (get_option(m, :convhull_ebd)) && println(" Using convhull_ebd formulation") (get_option(m, :convhull_ebd)) && println(" Encoding method = $(get_option(m, :convhull_ebd_encode))") (get_option(m, :convhull_ebd)) && println( " Independent branching scheme = $(get_option(m, :convhull_ebd_ibs))", ) println(" Bound-tightening presolve = ", get_option(m, :presolve_bt)) get_option(m, :presolve_bt) && println( " Maximum iterations (OBBT) = ", get_option(m, :presolve_bt_max_iter), ) end end function logging_head(m::Optimizer) if !is_max_sense(m) printstyled("LOWER-BOUNDING ITERATIONS", color = :cyan, bold = true) UB_iter = "Incumbent" UB = "Best Incumbent" LB = "Lower Bound" else printstyled("UPPER-BOUNDING ITERATIONS", color = :cyan, bold = true) UB_iter = "Incumbent" UB = "Best Incumbent" LB = "Upper Bound" end println( "\n====================================================================================================", ) if m.logs[:time_left] < Inf printstyled( bold = true, "| Iter | $UB_iter | $UB | $LB | Gap (%) | Time \n", ) end end function logging_row_entry(m::Optimizer; kwargs...) options = Dict(kwargs) b_len = 16 if !isempty(m.logs[:obj]) && isa(m.logs[:obj][end], Float64) objstr = string(round(m.logs[:obj][end]; digits = 4)) spc = max(0, b_len - length(objstr)) else objstr = string("-") spc = max(0, b_len - length(objstr)) end UB_block = string(" ", objstr, " "^spc) if m.obj_expr_orig == :(+()) bdstr = 0.0 spc = b_len - 1 elseif expr_isconst(m.obj_expr_orig) # This eval is okay because expr_isconst is true bdstr = eval(m.obj_expr_orig) spc = b_len - length(bdstr) elseif isa(m.logs[:bound][end], Float64) bdstr = string(round(m.logs[:bound][end]; digits = 4)) spc = max(0, b_len - length(bdstr)) else bdstr = string(m.logs[:bound][end]) spc = b_len - length(bdstr) end LB_block = string(" ", bdstr, " "^spc) bobjstr = string(round(m.best_obj; digits = 4)) spc = max(0, b_len + 4 - length(bobjstr)) incumb_UB_block = string(" ", bobjstr, " "^spc) bbdstr = string(round(m.best_bound; digits = 4)) spc = max(0, b_len + 3 - length(bbdstr)) incumb_LB_block = string(" ", bbdstr, " "^spc) rel_gap = round(m.best_rel_gap * 100, digits = 3) rel_gap > 999 ? rel_gap = "LARGE" : rel_gap = string(rel_gap) GAP_block = string(" ", rel_gap, " "^(b_len - length(rel_gap))) UTIME_block = string( " ", round(m.logs[:total_time]; digits = 2), "s", " "^(b_len - 1 - length(string(round(m.logs[:total_time]; digits = 2)))), ) if m.logs[:time_left] < Inf LTIME_block = " " end haskey(options, :finish_entry) ? (ITER_block = string(" ", "finish ")) : (ITER_block = string(" ", m.logs[:n_iter], " "^(7 - length(string(m.logs[:n_iter]))))) println( "|", ITER_block, "|", UB_block, "|", incumb_UB_block, "|", incumb_LB_block, "|", GAP_block, "|", UTIME_block, LTIME_block, ) return end #Logging and printing functions # Create dictionary of statuses for Alpine algorithm function create_status!(m) status = Dict{Symbol,MOI.TerminationStatusCode}() status[:local_solve] = MOI.OPTIMIZE_NOT_CALLED # Status of local solve status[:bounding_solve] = MOI.OPTIMIZE_NOT_CALLED # Status of bounding solve m.detected_incumbent = false m.detected_bound = false return m.status = status end """ This function summarizes the eventual solver status based on all available information recorded in the solver. The output status is self-defined which requires users to read our documentation to understand the details behind every status symbols. """ function summary_status(m::Optimizer) # Alpine Solver Status Definition # :Optimal : normal termination with optimality gap closed within time limits # :UserLimits : any non-optimal termination related to user-defined parameters # :Infeasible : termination with relaxation proven infeasible or detection of # variable bound conflicts # :Heuristic : termination with feasible solution found but not bounds detected # happens when lower bound problem is extremely hard to solve # :Unknown : termination with no exception recorded if m.detected_bound && m.detected_incumbent m.alpine_status = m.best_rel_gap > get_option(m, :rel_gap) ? MOI.OTHER_LIMIT : MOI.OPTIMAL elseif m.status[:bounding_solve] == MOI.INFEASIBLE m.alpine_status = MOI.INFEASIBLE elseif m.detected_bound && !m.detected_incumbent m.alpine_status = MOI.OTHER_LIMIT elseif !m.detected_bound && m.detected_incumbent m.alpine_status = MOI.LOCALLY_SOLVED else @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." end raw = MOI.get(m, MOI.RawStatusString()) printstyled("\n*** $raw ***\n") return end # Some useful logging details: # for i in ALPINE_C_NLTERMS # cnt = length([1 for j in keys(m.nonconvex_terms) if m.nonconvex_terms[j][:nonlinear_type] == i]) # cnt > 0 && println("\tTerm $(i) Count = $(cnt) ") # end # println(" Maximum solution time = ", get_option(m, :time_limit)) # println(" Basic bound propagation = ", get_option(m, :presolve_bp)) # println(" Conseuctive solution rejection = after ", get_option(m, :disc_consecutive_forbid), " times") # get_option(m, :presolve_bt) && println("bound tightening presolve algorithm = ", get_option(m, :presolve_bt)_algo) # get_option(m, :presolve_bt) && println("bound tightening presolve width tolerance = ", get_option(m, :presolve_bt)_width_tol) # get_option(m, :presolve_bt) && println("bound tightening presolve output tolerance = ", get_option(m, :presolve_bt)_output_tol) # get_option(m, :presolve_bt) && println("bound tightening presolve relaxation = ", get_option(m, :presolve_bt)_relax) # get_option(m, :presolve_bt) && println("bound tightening presolve mip regulation time = ", get_option(m, :presolve_bt)_mip_time_limit) ================================================ FILE: src/main_algorithm.jl ================================================ const STATUS_LIMIT = [ MOI.ITERATION_LIMIT, MOI.TIME_LIMIT, MOI.NODE_LIMIT, MOI.SOLUTION_LIMIT, MOI.MEMORY_LIMIT, MOI.OBJECTIVE_LIMIT, MOI.NORM_LIMIT, MOI.OTHER_LIMIT, ] const STATUS_OPT = [MOI.OPTIMAL, MOI.LOCALLY_SOLVED, MOI.ALMOST_OPTIMAL, MOI.ALMOST_LOCALLY_SOLVED] const STATUS_WARM_START = [MOI.OPTIMIZE_NOT_CALLED] const STATUS_INF = [MOI.INFEASIBLE, MOI.LOCALLY_INFEASIBLE] function features_available(m::Optimizer) features = [:Grad, :Jac, :JacVec, :ExprGraph] if !m.disable_hessian push!(features, :Hess) push!(features, :HessVec) end return features end function load!(m::Optimizer) # Initialize NLP interface requested_features = features_available(m) if m.d_orig !== nothing MOI.initialize(m.d_orig, requested_features::Vector{Symbol}) end for feat in requested_features if !(feat in features_available(m)) error("Unsupported feature $feat") end end # Collect objective & constraint expressions if m.has_nl_objective m.obj_expr_orig = expr_isolate_const(_variable_index_to_index(MOI.objective_expr(m.d_orig))) # see in nlexpr.jl if this expr isolation has any issue elseif m.objective_function isa Nothing m.obj_expr_orig = Expr(:call, :+) else m.obj_expr_orig = _moi_function_to_expr(m.objective_function) end # Collect original variable type and build dynamic variable type space m.var_type = copy(m.var_type_orig) m.int_vars = [i for i in 1:m.num_var_orig if m.var_type[i] == :Int] m.bin_vars = [i for i in 1:m.num_var_orig if m.var_type[i] == :Bin] if !isempty(m.int_vars) || !isempty(m.bin_vars) (get_option(m, :minlp_solver) === nothing) && (error( "No MINLP local solver specified; use option 'minlp_solver' to specify a MINLP local solver", )) end m.num_constr_orig += length(m.nl_constraint_bounds_orig) m.num_nlconstr_orig += length(m.nl_constraint_bounds_orig) append!(m.constraint_bounds_orig, m.nl_constraint_bounds_orig) for i in eachindex(m.nl_constraint_bounds_orig) push!( m.constr_expr_orig, _variable_index_to_index(MOI.constraint_expr(m.d_orig, i)), ) push!(m.constr_structure, :generic_nonlinear) end # Summarize constraints information in original model m.constr_type_orig = Array{Symbol}(undef, m.num_constr_orig) for i in 1:m.num_constr_orig if m.constraint_bounds_orig[i].lower > -Inf && m.constraint_bounds_orig[i].upper < Inf m.constr_type_orig[i] = :(==) elseif m.constraint_bounds_orig[i].lower > -Inf m.constr_type_orig[i] = :(>=) else m.constr_type_orig[i] = :(<=) end end # Initialize recognizable structure properties with :none m.obj_structure = :none @assert m.num_constr_orig == m.num_nlconstr_orig + m.num_lconstr_orig m.is_obj_linear_orig = !m.has_nl_objective && m.objective_function isa MOI.ScalarAffineFunction{Float64} m.is_obj_linear_orig ? (m.obj_structure = :generic_linear) : (m.obj_structure = :generic_nonlinear) isa(m.obj_expr_orig, Number) && (m.obj_structure = :constant) # Populate data to create the bounding MIP model recategorize_var(m) # Initial round of variable re-categorization # Solver-dependent detection _fetch_mip_solver_identifier(m) _fetch_nlp_solver_identifier(m) _fetch_minlp_solver_identifier(m) # Main Algorithmic Initialization process_expr(m) # Compact process of every expression init_tight_bound(m) # Initialize bounds for algorithmic processes resolve_var_bounds(m) # resolve lifted var bounds pick_disc_vars(m) # Picking variables to be discretized init_disc(m) # Initialize discretization dictionaries # Turn-on bt presolve if variables are not discrete if isempty(m.int_vars) && length(m.bin_vars) <= 50 && m.num_var_orig <= 10000 && length(m.candidate_disc_vars) <= 300 && get_option(m, :presolve_bt) == nothing set_option(m, :presolve_bt, true) println("Automatically turning on bound-tightening presolve") elseif get_option(m, :presolve_bt) == nothing # If no use indication set_option(m, :presolve_bt, false) end if length(m.bin_vars) > 200 || m.num_var_orig > 2000 println( "Automatically turning OFF 'partition_scaling_factor_branch' due to the size of the problem", ) set_option(m, :partition_scaling_factor_branch, false) end # Initialize the solution pool m.bound_sol_pool = initialize_solution_pool(m, 0) # Initialize the solution pool # Check if any illegal term exist in the warm-solution any(isnan, m.best_sol) && (m.best_sol = zeros(length(m.best_sol))) # Initialize log logging_summary(m) return end """ High-level Function """ function MOI.optimize!(m::Optimizer) load!(m) if getproperty(m, :presolve_infeasible) summary_status(m) return end presolve(m) if !check_exit(m) && get_option(m, :apply_partitioning) global_solve(m) get_option(m, :log_level) > 0 && logging_row_entry(m, finish_entry = true) println( "====================================================================================================", ) end summary_status(m) return end """ global_solve(m::Optimizer) Perform global optimization algorithm that is based on the adaptive piecewise convexification. This 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. Each [`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`). Each [`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. """ function global_solve(m::Optimizer) get_option(m, :log_level) > 0 && logging_head(m) get_option(m, :presolve_track_time) || reset_timer(m) while !check_exit(m) m.logs[:n_iter] += 1 create_bounding_mip(m) # Build the relaxation model bounding_solve(m) # Solve the relaxation model update_opt_gap(m) # Update optimality gap check_exit(m) && break # Feasibility check get_option(m, :log_level) > 0 && logging_row_entry(m) # Logging local_solve(m) # Solve local model for feasible solution update_opt_gap(m) # Update optimality gap check_exit(m) && break # Detect optimality termination algorithm_automation(m) # Automated adjustments end return end """ presolve(m::Optimizer) """ function presolve(m::Optimizer) start_presolve = time() get_option(m, :log_level) > 0 && printstyled("PRESOLVE \n", color = :cyan, bold = true) get_option(m, :log_level) > 0 && println(" Doing local search") if get_option(m, :use_start_as_incumbent) # Check for bound feasibility of the warm start value if !(m.l_var_orig <= m.warm_start_value <= m.u_var_orig) error( "Provide a valid, feasible, warm starting point. Else, set use_start_as_incumbent to false", ) end obj_warmval = if m.has_nl_objective MOI.eval_objective(m.d_orig, m.warm_start_value) else MOI.Utilities.eval_variables( vi -> m.warm_start_value[vi.value], m.objective_function, ) end update_incumbent(m, obj_warmval, m.warm_start_value) m.status[:local_solve] = MOI.OPTIMIZE_NOT_CALLED get_option(m, :log_level) > 0 && println( " Using warm starting point as a local incumbent solution with value $(round(m.best_obj, digits=4))", ) else local_solve(m, presolve = true) end # Solver status if m.status[:local_solve] in union(STATUS_OPT, STATUS_LIMIT, STATUS_WARM_START) if !get_option(m, :use_start_as_incumbent) get_option(m, :log_level) > 0 && println( " Local solver returns a feasible point with value $(round(m.best_obj, digits=4))", ) end bound_tightening_wrapper(m, use_bound = true) # performs bound-tightening with the local solve objective value get_option(m, :presolve_bt) && init_disc(m) # Re-initialize discretization dictionary on tight bounds get_option(m, :partition_scaling_factor_branch) && (set_option( m, :partition_scaling_factor, update_partition_scaling_factor(m, true), )) elseif m.status[:local_solve] in STATUS_INF (get_option(m, :log_level) > 0) && println(" Bound tightening without objective bounds (OBBT)") bound_tightening_wrapper(m, use_bound = false) # do bound tightening without objective value (get_option(m, :partition_scaling_factor_branch)) && (set_option( m, :partition_scaling_factor, update_partition_scaling_factor(m, true), )) get_option(m, :presolve_bt) && init_disc(m) elseif m.status[:local_solve] == MOI.INVALID_MODEL @warn " Warning: Presolve ends with local solver yielding $(m.status[:local_solve]). \n This may come from Ipopt's `:Not_Enough_Degrees_Of_Freedom`." elseif !get_option(m, :use_start_as_incumbent) @warn " Warning: Presolve ends with local solver yielding $(m.status[:local_solve])." end cputime_presolve = time() - start_presolve m.logs[:presolve_time] += cputime_presolve m.logs[:total_time] = m.logs[:presolve_time] m.logs[:time_left] -= m.logs[:presolve_time] if get_option(m, :presolve_bt) (get_option(m, :log_level) > 0) && println( " Post-presolve optimality gap: $(round(m.presolve_best_rel_gap; digits = 3))%", ) end (get_option(m, :log_level) > 0) && println(" Completed presolve in $(round.(m.logs[:total_time]; digits = 2))s") return end """ A wrapper function that collects automated solver adjustments within the main while loop. """ function algorithm_automation(m::Optimizer) # Only if a feasible solution is detected if (get_option(m, :disc_var_pick) == 3) && m.detected_incumbent update_disc_cont_var(m) end if get_option(m, :partition_scaling_factor_branch) set_option(m, :partition_scaling_factor, update_partition_scaling_factor(m, true)) # Only perform for a maximum three times end return end """ Summarized function to determine whether to interrupt the main while loop. """ function check_exit(m::Optimizer) # constant objective with feasible local solve check if expr_isconst(m.obj_expr_orig) && (m.status[:local_solve] == MOI.OPTIMAL || m.status == MOI.LOCALLY_SOLVED) m.best_bound = m.obj_expr_orig m.best_rel_gap = 0.0 m.best_abs_gap = 0.0 m.status[:bounding_solve] = MOI.OPTIMAL m.alpine_status = :Optimal m.detected_bound = true return true end # Infeasibility check m.status[:bounding_solve] == MOI.INFEASIBLE && return true # Unbounded check m.status[:bounding_solve] == MOI.DUAL_INFEASIBLE && return true # Optimality check if m.best_rel_gap <= get_option(m, :rel_gap) m.detected_bound = true return true end m.logs[:n_iter] >= get_option(m, :max_iter) && return true m.best_abs_gap <= get_option(m, :abs_gap) && return true # User-limits check m.logs[:time_left] < get_option(m, :tol) && return true return false end function load_nonlinear_model(m::Optimizer, model::MOI.ModelLike, l_var, u_var) x = MOI.add_variables(model, m.num_var_orig) for i in eachindex(x) set = _bound_set(l_var[i], u_var[i]) if set !== nothing MOI.add_constraint(model, x[i], set) end end for (func, set) in m.scalar_constraints MOI.add_constraint(model, func, set) end MOI.set(model, MOI.ObjectiveSense(), m.sense_orig) if m.objective_function !== nothing MOI.set( model, MOI.ObjectiveFunction{typeof(m.objective_function)}(), m.objective_function, ) end if m.d_orig !== nothing block = MOI.NLPBlockData(m.nl_constraint_bounds_orig, m.d_orig, m.has_nl_objective) MOI.set(model, MOI.NLPBlock(), block) end return x end function set_variable_type(model::MOI.ModelLike, xs, variable_types) for (x, variable_type) in zip(xs, variable_types) if variable_type == :Int MOI.add_constraint(model, x, MOI.Integer()) elseif variable_type == :Bin MOI.add_constraint(model, x, MOI.ZeroOne()) else @assert variable_type == :Cont end end end """ local_solve(m::Optimizer, presolve::Bool=false) Perform a local NLP or MINLP solve to obtain a feasible solution. The `presolve` option is set to `true` when the function is invoked in [`presolve`](@ref). Otherwise, the function is invoked from [`bounding_solve`](@ref). """ function local_solve(m::Optimizer; presolve = false) local_nlp_status = :Unknown var_type_screener = [i for i in m.var_type_orig if i in [:Bin, :Int]] if presolve if !isempty(var_type_screener) && get_option(m, :minlp_solver) !== nothing local_solve_model = MOI.instantiate(get_option(m, :minlp_solver), with_bridge_type = Float64) elseif !isempty(var_type_screener) local_solve_model = MOI.instantiate(get_option(m, :nlp_solver), with_bridge_type = Float64) else local_solve_model = MOI.instantiate(get_option(m, :nlp_solver), with_bridge_type = Float64) end else local_solve_model = MOI.instantiate(get_option(m, :nlp_solver), with_bridge_type = Float64) end if presolve == false l_var, u_var = fix_domains(m) else l_var, u_var = m.l_var_tight[1:m.num_var_orig], m.u_var_tight[1:m.num_var_orig] end x = load_nonlinear_model(m, local_solve_model, l_var, u_var) if m.d_orig !== nothing MOI.initialize(m.d_orig, [:Grad, :Jac, :Hess, :HessVec, :ExprGraph]) # Safety scheme for sub-solvers re-initializing the NLPEvaluator end if !presolve warmval = m.best_sol[1:m.num_var_orig] else warmval = m.warm_start_value[1:m.num_var_orig] end MOI.set(local_solve_model, MOI.VariablePrimalStart(), x, warmval) # do_heuristic = false # The only case when MINLP solver is actually used if presolve && !isempty(var_type_screener) if get_option(m, :minlp_solver) === nothing error("Provide a valid MINLP solver") # do_heuristic = true else set_variable_type(local_solve_model, x, m.var_type_orig) end end start_local_solve = time() MOI.optimize!(local_solve_model) local_nlp_status = MOI.get(local_solve_model, MOI.TerminationStatus()) # if !do_heuristic # local_nlp_status = MOI.get(local_solve_model, MOI.TerminationStatus()) # end cputime_local_solve = time() - start_local_solve m.logs[:total_time] += cputime_local_solve m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time]) # if do_heuristic # m.status[:local_solve] = heu_basic_rounding(m, MOI.get(local_solve_model, MOI.VariablePrimal(), x)) # return if local_nlp_status in STATUS_OPT || local_nlp_status in STATUS_LIMIT candidate_obj = MOI.get(local_solve_model, MOI.ObjectiveValue()) sol_temp = MOI.get(local_solve_model, MOI.VariablePrimal(), x) candidate_sol = Vector{Float64}() feas_tol = 1E-5 for i in 1:length(sol_temp) if (sol_temp[i] >= m.l_var_orig[i] - feas_tol) && (sol_temp[i] <= m.l_var_orig[i] + feas_tol) push!(candidate_sol, m.l_var_orig[i]) elseif (sol_temp[i] >= m.u_var_orig[i] - feas_tol) && (sol_temp[i] <= m.u_var_orig[i] + feas_tol) push!(candidate_sol, m.u_var_orig[i]) else push!(candidate_sol, round(sol_temp[i], digits = 7)) end end @assert length(candidate_sol) == length(sol_temp) update_incumbent(m, candidate_obj, candidate_sol) m.status[:local_solve] = local_nlp_status return # elseif local_nlp_status in STATUS_INF # heu_pool_multistart(m) == MOI.LOCALLY_SOLVED && return # push!(m.logs[:obj], "INF") # m.status[:local_solve] = MOI.LOCALLY_INFEASIBLE # return elseif local_nlp_status == MOI.DUAL_INFEASIBLE push!(m.logs[:obj], "U") m.status[:local_solve] = MOI.DUAL_INFEASIBLE if presolve @warn " Warning: NLP local solve is unbounded." else @warn " Warning: NLP local solve is unbounded." end return else push!(m.logs[:obj], "E") m.status[:local_solve] = MOI.OTHER_ERROR # if presolve # @warn " Warning: NLP solve failure $(local_nlp_status)." # else # @warn " Warning: NLP local solve failure." # end return end return end """ bounding_solve(m::Optimizer; kwargs...) This step usually solves a convex MILP/MIQCP/MIQCQP problem for lower bounding the given minimization problem. It solves the problem built upon a piecewise convexification based on the discretization sictionary of some variables. See `create_bounding_mip` for more details of the problem solved here. """ function bounding_solve(m::Optimizer) convertor = Dict(MOI.MAX_SENSE => :<, MOI.MIN_SENSE => :>) # Updates time metric and the termination bounds set_mip_time_limit(m) # update_boundstop_options(m) # ================= Solve Start ================ # start_bounding_solve = time() JuMP.optimize!(m.model_mip) status = JuMP.termination_status(m.model_mip) m.logs[:total_time] += time() - start_bounding_solve m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time]) # ================= Solve End ================ # if status in STATUS_OPT || status in STATUS_LIMIT candidate_bound = (status == MOI.OPTIMAL) ? JuMP.objective_value(m.model_mip) : JuMP.objective_bound(m.model_mip) candidate_bound_sol = [ round.(JuMP.value(_index_to_variable_ref(m.model_mip, i)); digits = 7) for i in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip) ] # Experimental code measure_relaxed_deviation(m, sol = candidate_bound_sol) if get_option(m, :disc_consecutive_forbid) > 0 m.bound_sol_history[mod( m.logs[:n_iter] - 1, get_option(m, :disc_consecutive_forbid), )+1] = copy(candidate_bound_sol) # Requires proper offseting end push!(m.logs[:bound], candidate_bound) is_tighter = ifelse( m.sense_orig == MOI.MAX_SENSE, candidate_bound < m.best_bound, candidate_bound > m.best_bound, ) if is_tighter m.best_bound = candidate_bound m.best_bound_sol = copy(candidate_bound_sol) m.status[:bounding_solve] = status m.detected_bound = true end # collect_lb_pool(m) # Collect a pool of sub-optimal solutions - currently implemented for Gurobi only elseif status in STATUS_INF || status == MOI.INFEASIBLE_OR_UNBOUNDED push!(m.logs[:bound], "-") m.status[:bounding_solve] = MOI.INFEASIBLE @warn " Warning: Infeasibility detected in the MIP solver" if ALPINE_DEBUG @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" end elseif status == :Unbounded m.status[:bounding_solve] = MOI.DUAL_INFEASIBLE @warn " Warning: MIP solver returns unbounded" else error(" Warning: MIP solver failure $(status)") end return end """ pick_disc_vars(m::Optimizer) This function helps pick the variables for discretization. The method chosen depends on user-inputs. In case when `indices::Int` is provided, the method is chosen as built-in method. Currently, there are two built-in options for users as follows: * `max_cover (get_option(m, :disc_var_pick)=0, default)`: pick all variables involved in the non-linear term for discretization * `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 For advanced usage, `get_option(m, :disc_var_pick)` allows `::Function` inputs. User can provide his/her own function to choose the variables for discretization. """ function pick_disc_vars(m::Optimizer) disc_var_pick = get_option(m, :disc_var_pick) if isa(disc_var_pick, Function) disc_var_pick(m) length(m.disc_vars) == 0 && length(m.nonconvex_terms) > 0 && error( "[USER FUNCTION] must select at least one variable to perform discretization for convexificiation purpose", ) elseif isa(disc_var_pick, Int) if disc_var_pick == 0 get_candidate_disc_vars(m) elseif disc_var_pick == 1 min_vertex_cover(m) elseif disc_var_pick == 2 (length(m.candidate_disc_vars) > 15) ? min_vertex_cover(m) : get_candidate_disc_vars(m) elseif disc_var_pick == 3 # Initial (length(m.candidate_disc_vars) > 15) ? min_vertex_cover(m) : get_candidate_disc_vars(m) else error( "Unsupported default indicator for picking variables for discretization", ) end else error( "Input for parameter :disc_var_pick is illegal. Should be either a Int for default methods indexes or functional inputs.", ) end return end ================================================ FILE: src/multilinear.jl ================================================ function amp_post_convhull(m::Optimizer; kwargs...) options = Dict(kwargs) haskey(options, :use_disc) ? d = options[:use_disc] : d = m.discretization # Variable holders λ = Dict() # Extreme points and multipliers α = Dict() # Partitioning Variables β = Dict() # Lifted variables for exact formulation # Convexification for non-convex terms contains_multilinear = false for k in keys(m.nonconvex_terms) nl_type = m.nonconvex_terms[k][:nonlinear_type] if ((nl_type == :MULTILINEAR) || (nl_type == :BILINEAR)) && (m.nonconvex_terms[k][:convexified] == false) λ, α = amp_convexify_multilinear(m, k, λ, α, d) contains_multilinear = true elseif nl_type == :MONOMIAL && !m.nonconvex_terms[k][:convexified] λ, α = amp_convexify_quadratic_univariate(m, k, λ, α, d) elseif nl_type == :BINLIN && !m.nonconvex_terms[k][:convexified] β = amp_convexify_binlin(m, k, β) elseif nl_type == :BINPROD && !m.nonconvex_terms[k][:convexified] β = amp_convexify_multilinear_binary(m, k, β) end end # Add lambda linking constraints if m.options.linking_constraints && contains_multilinear _add_multilinear_linking_constraints(m, λ) end # Code for warm starting bounding MIP iterations get_option(m, :convhull_warmstart) && !isempty(m.best_bound_sol) && amp_warmstart_α(m, α) return end function amp_convexify_multilinear( m::Optimizer, k::Any, λ::Dict, α::Dict, discretization::Dict, ) m.nonconvex_terms[k][:convexified] = true # Bookeeping the convexified terms ml_indices, dim, extreme_point_cnt = amp_convhull_prepare(m, discretization, k) # convert key to easy read mode λ = amp_convhull_λ(m, k, ml_indices, λ, extreme_point_cnt, dim) λ = populate_convhull_extreme_values( m, discretization, ml_indices, λ, dim, ones(Int, length(dim)), ) α = amp_convhull_α(m, ml_indices, α, dim, discretization) amp_post_convhull_constrs(m, λ, α, ml_indices, dim, extreme_point_cnt, discretization) return λ, α end function amp_convexify_quadratic_univariate( m::Optimizer, k::Any, λ::Dict, α::Dict, discretization::Dict, ) m.nonconvex_terms[k][:convexified] = true # Bookeeping the convexified terms monomial_index, dim, extreme_point_cnt = amp_convhull_prepare(m, discretization, k, monomial = true) λ = amp_convhull_λ(m, k, monomial_index, λ, extreme_point_cnt, dim) λ = populate_convhull_extreme_values(m, discretization, monomial_index, λ, 2) α = amp_convhull_α(m, [monomial_index], α, dim, discretization) amp_post_convhull_constrs(m, λ, α, monomial_index, discretization) return λ, α end function amp_convexify_binlin(m::Optimizer, k::Any, β::Dict) m.nonconvex_terms[k][:convexified] = true # Bookeeping the convexified terms @assert length(m.nonconvex_terms[k][:var_idxs]) == 2 lift_idx = m.nonconvex_terms[k][:y_idx] if haskey(β, lift_idx) return β else β[lift_idx] = _index_to_variable_ref(m.model_mip, lift_idx) end bin_idx = [i for i in m.nonconvex_terms[k][:var_idxs] if m.var_type[i] == :Bin] cont_idx = [i for i in m.nonconvex_terms[k][:var_idxs] if m.var_type[i] != :Bin] @assert length(bin_idx) == length(cont_idx) == 1 bin_idx = bin_idx[1] cont_idx = cont_idx[1] relaxation_bilinear( m.model_mip, _index_to_variable_ref(m.model_mip, lift_idx), _index_to_variable_ref(m.model_mip, bin_idx), _index_to_variable_ref(m.model_mip, cont_idx), 0, 1, m.l_var_tight[cont_idx], m.u_var_tight[cont_idx], ) return β end function amp_convexify_multilinear_binary(m::Optimizer, k::Any, β::Dict) m.nonconvex_terms[k][:convexified] = true # Bookeeping the convexified terms lift_idx = m.nonconvex_terms[k][:y_idx] if haskey(β, lift_idx) return β # Already constructed else β[lift_idx] = _index_to_variable_ref(m.model_mip, lift_idx) end z = _index_to_variable_ref(m.model_mip, m.nonconvex_terms[k][:y_idx]) x = [_index_to_variable_ref(m.model_mip, i) for i in m.nonconvex_terms[k][:var_idxs]] if length(x) >= 1 relaxation_multilinear_binary(m.model_mip, z, x) end return β end """ Method for general nonlinear terms """ function amp_convhull_prepare(m::Optimizer, d::Dict, nonlinear_key::Any; monomial = false) counted_var = [] # Keep both vector and set for collection sake id = Set() # Coverting the nonlinear indices into a set if isa(nonlinear_key, Vector) for var in nonlinear_key # This output regulates the sequence of how composing variable should be arranged @assert isa(var, Expr) m.var_type[var.args[2]] in [:Cont, :Int] && push!(id, var.args[2]) m.var_type[var.args[2]] in [:Cont, :Int] && push!(counted_var, var.args[2]) end elseif isa(nonlinear_key, Dict) for var in nonlinear_key[:vars] @assert isa(var, Int) m.var_type[var] in [:Cont, :Int] && push!(id, var) m.var_type[var] in [:Cont, :Int] && push!(counted_var, var) end end if length(id) < length(counted_var) # Got repeating terms, now the sequence matters id = [] for var in nonlinear_key m.var_type[var.args[2]] in [:Cont, :Int] && push!(id, var.args[2]) end end dim = [length(d[i]) for i in id] monomial && return id[1], tuple(dim[1]), dim[1] # One less dimension is required return id, tuple([i for i in dim]...), prod(dim) end """ Method for integers """ function amp_convhull_prepare(m::Optimizer, d::Dict, idx::Int) return [idx], tuple(length(d[idx])), length(d[idx]) end """ Method for general nonlinear terms """ function amp_convhull_λ( m::Optimizer, nonlinear_key::Any, indices::Any, λ::Dict, ext_cnt::Int, dim::Tuple, ) y_idx = m.nonconvex_terms[nonlinear_key][:y_idx] @assert !(y_idx in keys(λ)) λ[indices] = Dict( :dim => dim, :lifted_var_idx => y_idx, :indices => reshape([1:ext_cnt;], dim), :vars => JuMP.@variable( m.model_mip, [1:ext_cnt], lower_bound = 0, base_name = "L$(y_idx)" ), :vals => ones(dim), ) return λ end """ Method for power terms """ function populate_convhull_extreme_values( m::Optimizer, d::Dict, mono_idx::Int, λ::Dict, p::Int, ) λ[mono_idx][:vals] = [d[mono_idx][i]^p for i in 1:length(d[mono_idx])] return λ end """ Method for regular multilinear terms """ function populate_convhull_extreme_values( m::Optimizer, discretization::Dict, indices::Any, λ::Dict, dim::Tuple, locator::Array, level::Int = 1, ) if level > length(dim) @assert length(indices) == length(dim) @assert length(indices) == length(locator) val = 1.0 k = 0 for i in indices k += 1 val *= discretization[i][locator[k]] # Calculate extreme point z-value end λ[indices][:vals][CartesianIndex(tuple([i for i in locator]...))] = val # Value assignment return λ # finished with last dimension else for i in 1:dim[level] locator[level] = i λ = populate_convhull_extreme_values( m, discretization, indices, λ, dim, locator, level + 1, ) end end return λ end """ General Method for all term """ function amp_convhull_α( m::Optimizer, indices::Any, α::Dict, dim::Tuple, discretization::Dict, ) for i in indices if !(i in keys(α)) lambda_cnt = length(discretization[i]) partition_cnt = length(discretization[i]) - 1 if get_option(m, :convhull_ebd) && partition_cnt > 2 αCnt = Int(ceil(log(2, partition_cnt))) α[i] = JuMP.@variable( m.model_mip, [1:αCnt], Bin, base_name = string("YL", i) ) else α[i] = JuMP.@variable( m.model_mip, [1:partition_cnt], Bin, base_name = "A$(i)" ) JuMP.@constraint(m.model_mip, sum(α[i]) == 1) JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, i) >= sum(α[i][j] * discretization[i][j] for j in 1:lambda_cnt-1) ) # Add x = f(α) for regulating the domains JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, i) <= sum(α[i][j-1] * discretization[i][j] for j in 2:lambda_cnt) ) end end end return α end function amp_convhull_α(m::Optimizer, idx::Int, α::Dict, dim, d::Dict) return amp_convhull_α(m, [idx], α, dim, d) end function amp_warmstart_α(m::Optimizer, α::Dict) d = m.discretization if m.bound_sol_pool[:cnt] >= 2 # can only warm-start the problem when pool is large enough ws_idx = -1 is_min_sense(m) ? ws_obj = Inf : ws_obj = -Inf comp_opr = Dict(MOI.MIN_SENSE => :<, MOI.MAX_SENSE => :>) # Search for the pool for incumbent warm starter for i in 1:m.bound_sol_pool[:cnt] m.bound_sol_pool[:stat][i] == :Warmstarter && (m.bound_sol_pool[:stat][i] = :Alive) # reset the status if not dead if m.bound_sol_pool[:stat][i] == :Dead continue end is_better = ifelse( m.sense_orig == MOI.MAX_SENSE, m.bound_sol_pool[:obj][i] > ws_obj, m.bound_sol_pool[:obj][i] < ws_obj, ) if is_better ws_idx = i ws_obj = m.bound_sol_pool[:obj][i] end end if ws_idx > 0 # If a warm starter is found for v in m.bound_sol_pool[:vars] partition_cnt = length(d[v]) - 1 active_j = get_active_partition_idx(d, m.bound_sol_pool[:sol][ws_idx][v], v) for j in 1:partition_cnt j == active_j ? JuMP.set_start_value(α[v][j], 1.0) : JuMP.set_start_value(α[v][j], 0.0) end end m.bound_sol_pool[:stat][ws_idx] = :Warmstarter get_option(m, :log_level) > 0 && println( "!! WARM START bounding MIP using POOL SOL $(ws_idx) OBJ=$(m.bound_sol_pool[:obj][ws_idx])", ) end end return end """ Method for general multilinear terms """ function amp_post_convhull_constrs( m::Optimizer, λ::Dict, α::Dict, indices::Any, dim::Tuple, ext_cnt::Int, d::Dict, ) # Adding λ constraints JuMP.@constraint(m.model_mip, sum(λ[indices][:vars]) == 1) JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, λ[indices][:lifted_var_idx]) == λ[indices][:vars]' * reshape(λ[indices][:vals], ext_cnt) ) # Add links on each dimension for (cnt, i) in enumerate(indices) l_cnt = length(d[i]) if m.var_type[i] == :Cont amp_post_inequalities_cont(m, d, λ, α, indices, dim, i, cnt) # Add links between λ and α else error("EXCEPTION: unexpected variable type during integer related realxation") end sliced_indices = [collect_indices(λ[indices][:indices], cnt, [k], dim) for k in 1:l_cnt] # Add x = f(λ) for convex representation of x value JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, i) == sum( (repeat([d[i][k]], length(k_indices))' * λ[indices][:vars][k_indices]) for (k, k_indices) in enumerate(sliced_indices) ) ) end return end """ Constraints for univariate quadratic terms """ function amp_post_convhull_constrs( m::Optimizer, λ::Dict, α::Dict, monomial_idx::Int, discretization::Dict, ) partition_cnt = length(discretization[monomial_idx]) - 1 lambda_cnt = length(discretization[monomial_idx]) # Adding λ constraints JuMP.@constraint(m.model_mip, sum(λ[monomial_idx][:vars]) == 1) JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, λ[monomial_idx][:lifted_var_idx]) <= λ[monomial_idx][:vars]' * λ[monomial_idx][:vals] ) JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, λ[monomial_idx][:lifted_var_idx]) >= _index_to_variable_ref(m.model_mip, monomial_idx)^2 ) # Add SOS-2 Constraints with basic encoding if get_option(m, :convhull_ebd) && partition_cnt > 2 ebd_map = embedding_map( lambda_cnt, get_option(m, :convhull_ebd_encode), get_option(m, :convhull_ebd_ibs), ) YCnt = Int(ebd_map[:L]) @assert YCnt == length(α[monomial_idx]) for i in 1:YCnt JuMP.@constraint( m.model_mip, sum(λ[monomial_idx][:vars][collect(ebd_map[i])]) <= α[monomial_idx][i] ) JuMP.@constraint( m.model_mip, sum(λ[monomial_idx][:vars][collect(ebd_map[i+YCnt])]) <= 1 - α[monomial_idx][i] ) end else for i in 1:lambda_cnt if i == 1 JuMP.@constraint( m.model_mip, λ[monomial_idx][:vars][i] <= α[monomial_idx][i] ) elseif i == lambda_cnt JuMP.@constraint( m.model_mip, λ[monomial_idx][:vars][i] <= α[monomial_idx][i-1] ) else JuMP.@constraint( m.model_mip, λ[monomial_idx][:vars][i] <= α[monomial_idx][i-1] + α[monomial_idx][i] ) end end # Add x = f(α) for regulating the domains JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, monomial_idx) >= sum( α[monomial_idx][j] * discretization[monomial_idx][j] for j in 1:lambda_cnt-1 ) ) JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, monomial_idx) <= sum( α[monomial_idx][j-1] * discretization[monomial_idx][j] for j in 2:lambda_cnt ) ) end # Add x = f(λ) for convex representation JuMP.@constraint( m.model_mip, _index_to_variable_ref(m.model_mip, monomial_idx) == λ[monomial_idx][:vars]' * discretization[monomial_idx] ) return end """ Method for multilinear terms with only continuous variables """ function amp_post_inequalities_cont( m::Optimizer, discretization::Dict, λ::Dict, α::Dict, ml_indices::Any, dim::Tuple, var_ind::Int, cnt::Int, ) lambda_cnt = length(discretization[var_ind]) partition_cnt = lambda_cnt - 1 # Embedding formulation if get_option(m, :convhull_formulation) == "sos2" && get_option(m, :convhull_ebd) && partition_cnt > 2 ebd_map = embedding_map( lambda_cnt, get_option(m, :convhull_ebd_encode), get_option(m, :convhull_ebd_ibs), ) YCnt = Int(ebd_map[:L]) @assert YCnt == length(α[var_ind]) for i in 1:YCnt p_sliced_indices = collect_indices(λ[ml_indices][:indices], cnt, collect(ebd_map[i]), dim) n_sliced_indices = collect_indices( λ[ml_indices][:indices], cnt, collect(ebd_map[i+YCnt]), dim, ) JuMP.@constraint( m.model_mip, sum(λ[ml_indices][:vars][p_sliced_indices]) <= α[var_ind][i] ) JuMP.@constraint( m.model_mip, sum(λ[ml_indices][:vars][n_sliced_indices]) <= 1 - α[var_ind][i] ) end get_option(m, :convhull_ebd_link) && ebd_link_xα( m, α[var_ind], lambda_cnt, discretization[var_ind], ebd_map[:H_orig], var_ind, ) return end # SOS-2 Formulation if get_option(m, :convhull_formulation) == "sos2" for j in 1:lambda_cnt sliced_indices = collect_indices(λ[ml_indices][:indices], cnt, [j], dim) if (j == 1) JuMP.@constraint( m.model_mip, sum(λ[ml_indices][:vars][sliced_indices]) <= α[var_ind][j] ) elseif (j == lambda_cnt) JuMP.@constraint( m.model_mip, sum(λ[ml_indices][:vars][sliced_indices]) <= α[var_ind][partition_cnt] ) else JuMP.@constraint( m.model_mip, sum(λ[ml_indices][:vars][sliced_indices]) <= sum(α[var_ind][(j-1):j]) ) end end return elseif get_option(m, :convhull_formulation) == "facet" for j in 1:(partition_cnt-1) # Constraint cluster of α >= f(λ) sliced_indices = collect_indices(λ[ml_indices][:indices], cnt, [1:j;], dim) JuMP.@constraint( m.model_mip, sum(α[var_ind][1:j]) >= sum(λ[ml_indices][:vars][sliced_indices]) ) end for j in 1:(partition_cnt-1) # Constraint cluster of α <= f(λ) sliced_indices = collect_indices(λ[ml_indices][:indices], cnt, [1:(j+1);], dim) JuMP.@constraint( m.model_mip, sum(α[var_ind][1:j]) <= sum(λ[ml_indices][:vars][sliced_indices]) ) end return else error("Must indicate a choice of convex hull formulation: sos2, facet") end return end function collect_indices(l::Array, fixed_dim::Int, fixed_partition::Array, dim::Tuple) k = 0 indices = Vector{Int}(undef, Int(prod(dim) / dim[fixed_dim] * length(fixed_partition))) for i in 1:prod(dim) ind = Tuple(CartesianIndices(l)[i]) if ind[fixed_dim] in fixed_partition k += 1 indices[k] = i end end return indices end """ _add_multilinear_linking_constraints(m::Optimizer, λ::Dict) This internal function adds linking constraints between λ multipliers corresponding to multilinear terms that share more than two variables and are partitioned. For example, suppose we have λ[i], λ[j], and λ[k] where i=(1,2,3), j=(1,2,4), and k=(1,2,5). λ[i] contains all multipliers for the extreme points in the space of (x1,x2,x3). λ[j] contains all multipliers for the extreme points in the space of (x1,x2,x4). λ[k] contains all multipliers for the extreme points in the space of (x1,x2,x5). Using λ[i], λ[j], or λ[k], we can express multilinear function x1*x2. We define a linking variable μ(1,2) that represents the value of x1*x2. Linking constraints are μ(1,2) == convex combination expr for x1*x2 using λ[i], μ(1,2) == convex combination expr for x1*x2 using λ[j], and μ(1,2) == convex combination expr for x1*x2 using λ[k]. Thus, these constraints link between λ[i], λ[j], and λ[k] variables. Reference: J. Kim, J.P. Richard, M. Tawarmalani, Piecewise Polyhedral Relaxations of Multilinear Optimization, http://www.optimization-online.org/DB_HTML/2022/07/8974.html """ function _add_multilinear_linking_constraints(m::Optimizer, λ::Dict) if isnothing(m.linking_constraints_info) m.linking_constraints_info = _get_shared_multilinear_terms_info( λ, m.options.linking_constraints_degree_limit, ) end if isnothing(m.linking_constraints_info) return end # Additional linking variables (μ) to the MIP model to keep the constraints sparse linking_variables = JuMP.@variable(m.model_mip, [i in keys(m.linking_constraints_info)]) # Add linking constraints to the MIP model for (shared_multilinear_idx, multilinear_terms_idx) in m.linking_constraints_info, (i, multilinear_idx) in enumerate(multilinear_terms_idx) var_location = [findfirst(multilinear_idx .== i) for i in shared_multilinear_idx] lambda_expr = JuMP.AffExpr() for idx in Iterators.product([1:d for d in λ[multilinear_idx][:dim]]...) var = λ[multilinear_idx][:vars][λ[multilinear_idx][:indices][idx...]] partitions_info = prod( m.discretization[i][idx[j]] for (i, j) in zip(shared_multilinear_idx, var_location) ) JuMP.add_to_expression!(lambda_expr, partitions_info, var) end JuMP.@constraint( m.model_mip, linking_variables[shared_multilinear_idx] == lambda_expr ) end end """ _get_shared_multilinear_terms_info(λ, linking_constraints_degree_limit) This function checks to see if linking constraints are necessary for a given vector of each multilinear terms and returns the approapriate linking constraints information. """ function _get_shared_multilinear_terms_info( λ::Dict, linking_constraints_degree_limit::Union{Nothing,T} where {T<:Int64} = nothing, ) # Compute maximum degree of multilinear terms and return if bilinear max_degree = maximum([length(k) for k in keys(λ)]) if max_degree <= 2 return (linking_constraints_info = nothing) end # Limit the linking constraints to a prescribed multilinear degree if !isnothing(linking_constraints_degree_limit) && (linking_constraints_degree_limit < max_degree) max_degree = linking_constraints_degree_limit end # Collect all variable indices appearing in multilinear terms all_variables_idx = collect(union((keys(λ) |> collect)...)) |> sort linking_constraints_info = Dict( shared_multilinear_idx => filter(r -> issubset(shared_multilinear_idx, r), keys(λ)) for deg in 2:(max_degree-1) for shared_multilinear_idx in Combinatorics.combinations(all_variables_idx, deg) ) filter!(r -> length(r.second) >= 2, linking_constraints_info) if isempty(linking_constraints_info) return (linking_constraints_info = nothing) end return (linking_constraints_info = linking_constraints_info) end ================================================ FILE: src/nlexpr.jl ================================================ """ process_expr(expr; kwargs...) High-level wrapper for processing expression with sub-tree operators """ function process_expr(m::Optimizer) expr_initialization(m) # S0 : initialize the space for parsing and analyzing expr_preprocess(m) # S1 : pre-process the negative sign in expressions expr_parsing(m) # S2 : parsing the expressions for nonlinear information expr_conversion(m) # S3 : convert lifted(linear) expressions into affine function expr_finalized(m) # S4 : finalize process by extracting some measurements return end """ STEP 1: initialize the expression/ space """ function expr_initialization(m::Optimizer) # 0 : deepcopy data into mip lifted expr place holders m.bounding_obj_expr_mip = deepcopy(m.obj_expr_orig) m.bounding_obj_mip = Dict() for i in 1:m.num_constr_orig push!(m.bounding_constr_expr_mip, deepcopy(m.constr_expr_orig[i])) push!(m.bounding_constr_mip, Dict()) end return end """ STEP 2: preprocess expression for trivial sub-trees and nasty pieces for easier later process """ function expr_preprocess(m::Optimizer) expr_resolve_const(m.bounding_obj_expr_mip) expr_resolve_sign(m.bounding_obj_expr_mip) expr_flatten(m.bounding_obj_expr_mip) for i in 1:m.num_constr_orig expr_resolve_const(m.bounding_constr_expr_mip[i]) expr_resolve_sign(m.bounding_constr_expr_mip[i]) expr_flatten(m.bounding_constr_expr_mip[i].args[2]) end return end """ STEP 3: parse expression for patterns on either the generic level or term level """ function expr_parsing(m::Optimizer) # Throw an error if the objective expression has fractional exponents expr_is_fractional_exponent(m.bounding_obj_expr_mip) is_structural = expr_constr_parsing(m.bounding_obj_expr_mip, m) if !is_structural m.bounding_obj_expr_mip = expr_term_parsing(m.bounding_obj_expr_mip, 0, m) m.obj_structure = :generic_linear end (get_option(m, :log_level) > 199) && println("[OBJ] $(m.obj_expr_orig)") for i in 1:m.num_constr_orig expr = m.bounding_constr_expr_mip[i] # Throw an error if the constraint expression has fractional exponents if expr.args[1] in [:(<=), :(>=), :(==)] expr_is_fractional_exponent(expr.args[2]) end is_structural = expr_constr_parsing(expr, m, i) if !is_structural m.bounding_constr_expr_mip[i] = expr_term_parsing(expr, i, m) m.constr_structure[i] = :generic_linear end (get_option(m, :log_level) > 199) && println("[CONSTR] $(m.constr_expr_orig[i])") end return end """ STEP 4: convert the parsed expressions into affine-based function that can be used for adding JuMP constraints """ function expr_conversion(m::Optimizer) if m.obj_structure == :generic_linear m.bounding_obj_mip = expr_linear_to_affine(m.bounding_obj_expr_mip) m.obj_structure = :affine end get_option(m, :log_level) > 199 && println("type :: ", m.obj_structure) get_option(m, :log_level) > 199 && println("lifted ::", m.bounding_obj_expr_mip) get_option(m, :log_level) > 199 && println("coeffs ::", m.bounding_obj_mip[:coefs]) get_option(m, :log_level) > 199 && println("vars ::", m.bounding_obj_mip[:vars]) get_option(m, :log_level) > 199 && println("sense ::", m.bounding_obj_mip[:sense]) get_option(m, :log_level) > 199 && println("rhs ::", m.bounding_obj_mip[:rhs]) get_option(m, :log_level) > 199 && println("----------------") for i in 1:m.num_constr_orig if m.constr_structure[i] == :generic_linear m.bounding_constr_mip[i] = expr_linear_to_affine(m.bounding_constr_expr_mip[i]) m.constr_structure[i] = :affine end get_option(m, :log_level) > 199 && println("type :: ", m.constr_structure[i]) get_option(m, :log_level) > 199 && println("lifted ::", m.bounding_constr_expr_mip[i]) get_option(m, :log_level) > 199 && println("coeffs ::", m.bounding_constr_mip[i][:coefs]) get_option(m, :log_level) > 199 && println("vars ::", m.bounding_constr_mip[i][:vars]) get_option(m, :log_level) > 199 && println("sense ::", m.bounding_constr_mip[i][:sense]) get_option(m, :log_level) > 199 && println("rhs ::", m.bounding_constr_mip[i][:rhs]) get_option(m, :log_level) > 199 && println("----------------") end return end """ STEP 5: collect information as needed for handy operations in the algorithm section """ function expr_finalized(m::Optimizer) collect_nonconvex_vars(m) m.candidate_disc_vars = sort(m.candidate_disc_vars) m.num_var_linear_mip = length(m.linear_terms) m.num_var_nonlinear_mip = length(m.nonconvex_terms) m.num_constr_convex = length([i for i in m.constr_structure if i == :convex]) return m end function collect_nonconvex_vars(m::Optimizer) # Walk through all nonconvex terms for i in keys(m.nonconvex_terms) m.nonconvex_terms[i][:discvar_collector](m, i) end # TODO : reconsider how to structure this # NOTE : Walk through all integer variables that didn't appear in any nonconvex terms for i in 1:m.num_var_orig if !(i in m.candidate_disc_vars) && m.var_type[i] == :Int push!(m.candidate_disc_vars, i) end end return end function isa_variable_index(expr::Expr) return length(expr.args == 2) && expr.args[2] == :(MathOptInterface.VariableIndex) end get_index(expr::Expr) = expr.args[2] function expr_strip_const(expr, subs = [], rhs = 0.0) exhaust_const = [ !(expr.args[1] in [:+, :-]) || !(isa(expr.args[i], Float64) || isa(expr.args[i], Int)) for i in 2:length(expr.args) ] if prod(exhaust_const) push!(subs, expr) return subs, rhs end for i in 2:length(expr.args) if ( isa(expr.args[i], Float64) || isa(expr.args[i], Int) || isa(expr.args[i], Symbol) ) (expr.args[1] == :+) && (rhs -= expr.args[i]) (expr.args[1] == :-) && ((i == 2) ? rhs -= expr.args[i] : rhs += expr.args[i]) elseif expr.args[i].head == :ref continue elseif expr.args[i].head == :call subs, rhs = expr_strip_const(expr.args[i], subs, rhs) end end return subs, rhs end """ This utility function builds a constraint reference by repeating one operator with a vector variable references. For example, input => y, x[1,2,3], :+ output => (y = x[1] + x[2] + x[3])::Expr """ function build_constr_block(y_idx::Int, var_idxs::Vector, operator::Symbol) expr_l_block = Expr(:call, :(==), Meta.parse("x[$(y_idx)]")) expr_r_block = Expr(:call, operator) for j in 1:length(var_idxs) push!(expr_r_block.args, Meta.parse("x[$(var_idxs[j])]")) end push!(expr_l_block.args, expr_r_block) return expr_l_block end """ expr_constr_parsing(expr, m::Optimizer) Recognize structural constraints. """ function expr_constr_parsing(expr::Expr, m::Optimizer, idx::Int = 0) # First process user-defined structures in-cases of over-ride # for i in 1:length(get_option(m, :constr_patterns)) # is_structural = get_option(m, :constr_patterns)[i](expr, m, idx) # return # end isa(expr, Number) && return false # Recognize built-in special structural pattern if get_option(m, :recognize_convex) is_convex = resolve_convex_constr(expr, m, idx) is_convex && return true end # More structural patterns go here return false end function expr_is_axn(expr, scalar = 1.0, var_idxs = [], power = []; N = nothing) expr.args[1] in [:*, :^] || return nothing, nothing, nothing # Limited Area if expr.args[1] == :* for i in 2:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) scalar *= expr.args[i] elseif (expr.args[i].head == :ref) @assert isa(expr.args[i].args[2], Int) push!(var_idxs, expr.args[i]) push!(power, 1) elseif (expr.args[i].head == :call) scalar, var_idxs, power = expr_is_axn(expr.args[i], scalar, var_idxs, power) scalar === nothing && return nothing, nothing, nothing end end elseif expr.args[1] == :^ for i in 2:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) push!(power, expr.args[i]) continue elseif (expr.args[i].head == :ref) push!(var_idxs, expr.args[i]) continue elseif (expr.args[i].head == :call) return nothing, nothing, nothing end end end # If the user wants a specific N !(N === nothing) && !(length(var_idxs) == N) && return nothing, nothing, nothing (var_idxs === nothing) && (scalar === nothing) && (power === nothing) && return nothing, nothing, nothing # Unrecognized sub-structure @assert length(var_idxs) == length(power) return scalar, var_idxs, power end """ This function takes a constraint/objective expression and converts it into a affine expression data structure Use the function to traverse linear expressions traverse_expr_linear_to_affine() """ function expr_linear_to_affine(expr) # The input should follow :(<=, LHS, RHS) affdict = Dict() isa(expr, Number) && return affdict if expr.args[1] in [:(==), :(>=), :(<=)] # For a constraint expression @assert isa(expr.args[3], Float64) || isa(expr.args[3], Int) @assert isa(expr.args[2], Expr) # non are buffer spaces, not used anywhere lhscoeff, lhsvars, rhs, non, non = traverse_expr_linear_to_affine(expr.args[2]) rhs = -rhs + expr.args[3] affdict[:sense] = expr.args[1] elseif expr.head == :ref # For single variable objective expression lhscoeff = [1.0] lhsvars = [expr] rhs = 0 affdict[:sense] = nothing else # For an objective expression lhscoeff, lhsvars, rhs, non, non = traverse_expr_linear_to_affine(expr) affdict[:sense] = nothing end affdict[:coefs] = lhscoeff affdict[:vars] = lhsvars affdict[:rhs] = rhs @assert length(affdict[:coefs]) == length(affdict[:vars]) affdict[:cnt] = length(affdict[:coefs]) return affdict end """ traverse_expr_linear_to_affine(expr, lhscoeffs=[], lhsvars=[], rhs=0.0, bufferVal=0.0, bufferVar=nothing, sign=1.0, level=0) This function traverses the left hand side tree to collect affine terms. Updated status : possible to handle (x-(x+y(t-z))) cases where signs are handled properly """ function traverse_expr_linear_to_affine( expr, lhscoeffs = [], lhsvars = [], rhs = 0.0, bufferVal = nothing, bufferVar = nothing, sign = 1.0, coef = 1.0, level = 0, ) # reversor = Dict(true => -1.0, false => 1.0) function sign_convertor(subexpr, pos) if length(subexpr.args) == 2 && subexpr.args[1] == :- return -1.0 elseif length(subexpr.args) > 2 && subexpr.args[1] == :- && pos > 2 return -1.0 end return 1.0 end if isa(expr, Number) # Capture any coefficients or right hand side (bufferVal !== nothing) ? bufferVal *= expr : bufferVal = expr * coef return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar elseif expr in [:+, :-] # TODO: what is this condition? if bufferVal !== nothing && bufferVar !== nothing push!(lhscoeffs, bufferVal) push!(lhsvars, bufferVar) bufferVal = 0.0 bufferVar = nothing end return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar elseif expr in [:*] return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar elseif expr in [:(<=), :(==), :(>=)] return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar elseif expr.head == :ref bufferVar = expr return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar end # PATCH : Special Structure Recognition start_pos = 1 if (expr.args[1] == :*) && (length(expr.args) == 3) if (isa(expr.args[2], Float64) || isa(expr.args[2], Int)) && (expr.args[3].head == :call) (coef != 0.0) ? coef = expr.args[2] * coef : coef = expr.args[2]# Patch # coef = expr.args[2] start_pos = 3 # @warn "Special expression structure detected [*, coef, :call, ...]. Currently using a beta fix..." end end for i in start_pos:length(expr.args) lhscoeff, lhsvars, rhs, bufferVal, bufferVar = traverse_expr_linear_to_affine( expr.args[i], lhscoeffs, lhsvars, rhs, bufferVal, bufferVar, sign * sign_convertor(expr, i), coef, level + 1, ) if expr.args[1] in [:+, :-] # Term segmentation [:-, :+], see this and wrap-up the current (linear) term if bufferVal !== nothing && bufferVar !== nothing # (sign) * (coef) * (var) => linear term push!(lhscoeffs, sign * sign_convertor(expr, i) * bufferVal) push!(lhsvars, bufferVar) bufferVal = nothing bufferVar = nothing end if bufferVal !== nothing && bufferVar === nothing # (sign) * (coef) => right-hand-side term rhs += sign * sign_convertor(expr, i) * bufferVal bufferVal = nothing end if bufferVal === nothing && bufferVar !== nothing && expr.args[1] == :+ push!(lhscoeffs, sign * 1.0 * coef) push!(lhsvars, bufferVar) bufferVar = nothing end if bufferVal === nothing && bufferVar !== nothing && expr.args[1] == :- push!(lhscoeffs, sign * sign_convertor(expr, i) * coef) push!(lhsvars, bufferVar) bufferVar = nothing end elseif expr.args[1] in [:(<=), :(==), :(>=)] rhs = expr.args[end] end end if level == 0 if bufferVal !== nothing && bufferVar !== nothing push!(lhscoeffs, bufferVal) push!(lhsvars, bufferVar) bufferVal = nothing bufferVar = nothing end end return lhscoeffs, lhsvars, rhs, bufferVal, bufferVar end """ This function is treats the sign in expression trees by cleaning the following structure: args ::+ || ::- ::Call || ::ref By separating the structure with some dummy treatments """ function expr_resolve_sign(expr::Expr, level = 0; kwargs...) for (i, arg) in enumerate(expr.args) if !(arg isa Expr) continue # Skip the coefficients elseif arg.head == :call && length(arg.args) == 2 if arg.args[1] == :- # Treatment for :(-x), replace with :(x*-1) if expr.args[1] == :* # Only perform the treatment when connected with * push!(expr.args, -1) expr.args[i] = arg.args[2] elseif !(expr.args[1] in (:+, :-, :(==), :(<=), :(>=))) error("Unexpected operator $(arg) during resolving sign") end elseif arg.args[1] == :+ # Treatment for :(+x) replace with :x expr.args[i] = arg.args[2] end elseif arg.head == :call expr_resolve_sign(arg, level + 1) end end return end expr_resolve_sign(expr, level = 0; kwargs...) = nothing """ Recursively pre-process the expression by treating the coefficients TODO: this function requires a lot of refining. Most issues can be caused by this function. """ function expr_flatten(expr::Expr, level = 0; kwargs...) if level > 0 # No trivial constraint is allowed "3>5" flat = expr_arrangeargs(expr.args) if isa(flat, Number) return flat else expr.args = flat end end for i in 2:length(expr.args) if isa(expr.args[i], Expr) && expr.args[i].head == :call expr.args[i] = expr_flatten(expr.args[i], level + 1) end end if level > 0 #Root level process, no additional processes expr.args = expr_arrangeargs(expr.args) end return expr end expr_flatten(expr, level = 0; kwargs...) = nothing """ Re-arrange children by their type. Only consider 3 types: coefficients(Int64, Float64), :ref, :calls Sequence arrangement is dependent on operator """ function expr_arrangeargs(args::Array; kwargs...) # A mapping used for operator treatments reverter = Dict(true => :-, false => :+) operator_coefficient_base = Dict{Symbol,Float64}(:+ => 0.0, :- => 0.0, :/ => 1.0, :* => 1.0, :^ => 1.0) # Treatment => Flatten pure number sub-tree allFloats = [i for i in 2:length(args) if isa(args[i], Float64)] if length(allFloats) == length(args) - 1 val = args[2] for i in 3:length(args) val = eval(args[1])(val, args[i]) end return val end if args[1] in [:^] return args elseif args[1] in [:/] # error("Alpine does not currently support `$(args[1])` operator") if (typeof(args[3]) == Float64) || (typeof(args[3]) == Int64) args = expr_resolve_const_denominator(args) else error( "Alpine does not currently support `$(args[1])` operator with a variable in the denominator", ) end elseif args[1] in [:*, :+, :-] # Such generic operators can be handled else error( "Alpine does not currently support `$(args[1])` operator acting on a variable", ) end if args[1] in [:*, :+, :-] val = operator_coefficient_base[args[1]] # initialize exprs = [] refs = [] valinit = false # what is first children : needs consideration with :(-) refinit = false callinit = false for i in 2:length(args) if isa(args[i], Float64) || isa(args[i], Int) valinit += (i == 2) val = eval(args[1])(val, eval(reverter[(i==2)&&(args[1]==:-)])(args[i])) # Revert the first sigh if (-) elseif typeof(args[i]) == Expr if args[i].head == :ref refinit += (i == 2) push!(refs, args[i]) elseif args[i].head == :call callinit += (i == 2) push!(exprs, args[i]) else error("Unkown expression head") end else error("Unkown argument type") end end # Treatment for 0.0 coefficients if val == operator_coefficient_base[args[1]] && val == 0.0 val = [] end # Re-arrange children :: without actually doing anything on them if args[1] in [:*] return [args[1]; val; refs; exprs] elseif args[1] in [:+, :-] if Bool(valinit) return [args[1]; val; refs; exprs] elseif Bool(refinit) return [args[1]; refs; val; exprs] elseif Bool(callinit) return [args[1]; exprs; refs; val] else error("Unexpected condition encountered...") end end else error("Unsupported expression arguments $args") end return end """ Check if it is a sample of `+()` """ expr_is_emptysum(expr) = expr == :(+()) """ Check if a sub-tree is a constant or not """ function expr_resolve_const(expr) isa(expr, Number) && return for i in 1:length(expr.args) if isa(expr.args[i], Number) || isa(expr.args[i], Symbol) continue elseif expr.args[i].head == :call if expr_is_emptysum(expr.args[i]) expr.args[i] = :(0) end (expr_isconst(expr.args[i])) && (expr.args[i] = eval(expr.args[i])) if isa(expr.args[i], Number) || isa(expr.args[i], Symbol) continue else expr_resolve_const(expr.args[i]) end end end return end """ If the expression's fraction has a constant denominator, then replace the expression as product of a constant and the expression """ function expr_resolve_const_denominator(args) @assert args[1] == :/ @assert length(args) == 3 resolvable = true for i in 3:length(args) resolvable *= expr_isconst(args[i]) end if resolvable for i in 3:length(args) args[i] = 1 / eval(args[i]) end args[1] = :* end return args end """ Check if a sub-tree(:call) is totally composed of constant values """ function expr_isconst(expr) (isa(expr, Number) || isa(expr, Symbol)) && return true (expr.head == :ref) && return false const_tree = true for i in 1:length(expr.args) if isa(expr.args[i], Number) || isa(expr.args[i], Symbol) continue elseif expr.args[i].head == :call const_tree *= expr_isconst(expr.args[i]) elseif expr.args[i].head == :ref return false end end return const_tree end """ Check if a sub-tree(:call) is contains any non-integer exponent values """ function expr_is_fractional_exponent(expr) if expr.head == :call if length(expr.args) == 3 && expr.args[1] == :^ if !(isinteger(expr.args[3])) || !(expr.args[3] >= 0) error( "Alpine currently supports `^` operator in constraints and/or objective with only positive integer exponents", ) end end for i in 1:length(expr.args) if typeof(expr.args[i]) == Expr expr_is_fractional_exponent(expr.args[i]) # Recursively search for fractional exponents end end end end # Returns true if the expression is a constant, linear or affine function expr_isaffine(expr) expr_isconst(expr) && return true expr.head == :ref && return true is_affine = false if expr.head == :call k = 0 for i in 1:length(expr.args) if isa(expr.args[i], Number) k += 1 continue end if isa(expr.args[i], Symbol) (expr.args[i] in [:+, :-]) && (k += 1) continue end if expr.args[i].head == :ref k += 1 elseif expr.args[i].head == :call status = expr_isaffine(expr.args[i]) status && (k += 1) end end (k == length(expr.args)) && (is_affine = true) end return is_affine end """ Converts ((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) Signs in the summation can be +/- Note: This function does not support terms of type (a*(x[1] + x[2]))^2 yet. """ function expr_isolate_const(expr) expr_isaffine(expr) && return expr # Check nonlinear expressions if (expr.head == :call && expr.args[1] in [:+, :-]) expr_array = Any[] for i in 2:length(expr.args) ind = 0 # Handle negative sign in the first term if (!isa(expr.args[i], Number)) && (expr.args[i].args[1] == :-) && (length(expr.args[i].args) == 2) expr_i = expr.args[i].args[2] ind = 1 else expr_i = expr.args[i] end # Handle constant and linear terms if (isa(expr_i, Number)) || (expr_i.head == :ref) if ((expr.args[1] == :-) && (i > 2)) || (ind == 1) push!(expr_array, :(-$(expr_i))) else push!(expr_array, :($(expr_i))) end # Handle nonlinear terms with coefficients within the exponent elseif ( expr.args[i].head == :call && expr_i.args[1] == :^ && expr_i.args[2].head == :call && isa(expr_i.args[2].args[2], Number) && isa(expr_i.args[3], Number) ) expr_tmp = Expr(:call, :^, expr_i.args[2].args[3], expr_i.args[3]) if ((expr.args[1] == :-) && (i > 2)) || (ind == 1) push!( expr_array, Expr(:call, :*, -expr_i.args[2].args[2]^expr_i.args[3], expr_tmp), ) else push!( expr_array, Expr(:call, :*, expr_i.args[2].args[2]^expr_i.args[3], expr_tmp), ) end # Handle no-coefficients case elseif expr_i.args[1] == :^ && expr_i.args[2].head == :ref if (expr.args[1] == :- && (i > 2)) || (ind == 1) push!(expr_array, Expr(:call, :*, -1, expr_i)) else push!(expr_array, expr_i) end # Handle coefficients which are not part of the exponent elseif expr_i.args[1] == :* && isa(expr_i.args[2], Number) if ((expr.args[1] == :-) && (i > 2)) || (ind == 1) #push!(expr_array, Expr(:call, :*, -expr_i.args[2], expr_i.args[3])) push!(expr_array, Expr(:call, :*, -1, expr_i)) else push!(expr_array, expr_i) end # Handle negative sign in the remaining terms elseif (expr_i.args[1] in [:+, :-]) && (length(expr.args[i].args) > 2) expr_rec = expr_isolate_const(expr_i) #recursion push!(expr_array, expr_rec) # For any other terms else if (expr.args[1] == :- && (i > 2)) || (ind == 1) push!(expr_array, Expr(:call, :*, -1, expr_i)) else push!(expr_array, expr_i) end end end # Construct the expression from the array if length(expr_array) == 1 return expr_array[1] else expr_n = Expr(:call, :+, expr_array[1], expr_array[2]) if length(expr_array) >= 3 for i in 3:length(expr_array) expr_n = Expr(:call, :+, expr_n, expr_array[i]) end end return (expr_n) end elseif ( expr.head == :call && expr.args[1] == :^ && expr.args[2].head == :call && isa(expr.args[2].args[2], Number) && isa(expr.args[3], Number) ) expr_tmp = Expr(:call, :^, expr.args[2].args[3], expr.args[3]) return (Expr(:call, :*, expr.args[2].args[2]^expr.args[3], expr_tmp)) else return expr end end ================================================ FILE: src/operators.jl ================================================ """ expr_term_parsing(expr, m::Optimizer, level=0) Recognize and process nonlinear terms in an expression """ function expr_term_parsing(expr::Any, constr_id::Int, m::Optimizer, level = 0; options...) isa(expr, Number) && return expr cnt = 0 for node in expr.args cnt += 1 if isa(node, Float64) || isa(node, Int64) || isa(node, Symbol) continue elseif node.head == :call expr.args[cnt] = expr_term_parsing(node, constr_id, m, level + 1) elseif node.head == :ref continue else error("Type issue during expression parsing. ") end end return detect_nonconvex_terms(expr, constr_id, m) end """ detect_nonconvex_terms(expr, m::Optimizer) This function recognizes, stores, and replaces a sub-tree `expr` with available user-defined/built-in structures patterns. The procedure creates the required number of lifted variables based on the patterns that it is trying to recognize. Then, it goes through all built-in structures and performs operatins to convexify the problem. Specific structure pattern information will be described formally. """ function detect_nonconvex_terms(expr::Any, constr_id::Int, m::Optimizer; kwargs...) # First process user-defined structures in-cases of over-ride # for i in 1:length(get_option(m, :term_patterns)) # skip, expr = get_option(m, :term_patterns)[i](expr, constr_id, m) # skip && return expr # end # NOTE :: Sequence of which term to detect matters here # More specific term should be detected first to reduce the size of relaxation # model. For example, power-2 or bilinear term should be detected before # general multilinear terms to apply better outter approxiamtion. # LEVEL 1 : : Recognize all built-in structural patterns skip, expr = detect_discretemulti_term(expr, constr_id, m) #L1 : General case : discrete variables * continous variables skip && return expr skip, expr = detect_binprod_term(expr, constr_id, m) #L1 : binprod = binary products skip && return expr # LEVEL 2 : : Recognize all built-in structural patterns skip, expr = detect_bilinear_term(expr, constr_id, m) #L2 skip && return expr skip, expr = detect_monomial_term(expr, constr_id, m) #L2 : must go before multilinear skip && return expr skip, expr = detect_multilinear_term(expr, constr_id, m) #L2 skip && return expr return expr # if no structure is detected, simply return the original tree end function store_nonconvex_term( m::Optimizer, nl_key::Any, var_idxs::Any, term_type::Symbol, operator::Symbol, evaluator::Function, bd_resolver::Function, discvar_collector::Function, ) l_cnt = length(keys(m.linear_terms)) nl_cnt = length(keys(m.nonconvex_terms)) y_idx = m.num_var_orig + nl_cnt + l_cnt + 1 # y is always lifted var lifted_var_ref = Expr(:ref, :x, y_idx) lifted_constr_ref = build_constr_block(y_idx, var_idxs, operator) m.nonconvex_terms[nl_key] = Dict( :lifted_var_ref => lifted_var_ref, :id => nl_cnt + 1, :y_idx => y_idx, :y_type => resolve_lifted_var_type([m.var_type[k] for k in var_idxs], operator), :var_idxs => var_idxs, :ref => nl_key, :evaluator => evaluator, :lifted_constr_ref => lifted_constr_ref, :constr_id => Set(), :nonlinear_type => term_type, :convexified => false, :bound_resolver => bd_resolver, :discvar_collector => discvar_collector, ) m.term_seq[nl_cnt+l_cnt+1] = nl_key # Assistive information # push!(m.var_type, :Cont) # TODO check if this replacement is good since additional constraints should be able to sufficiently constraint the type push!(m.var_type, m.nonconvex_terms[nl_key][:y_type]) # Keep track of the lifted var type get_option(m, :log_level) > 199 && println("found lifted $(term_type) term $(lifted_constr_ref)") return y_idx end function store_linear_term(m::Optimizer, term_key::Any, expr::Any)#, bound_resolver::Function) l_cnt = length(keys(m.linear_terms)) nl_cnt = length(keys(m.nonconvex_terms)) y_idx = m.num_var_orig + nl_cnt + l_cnt + 1 lifted_var_ref = Expr(:ref, :x, y_idx) lifted_constr_ref = Expr(:call, :(==), lifted_var_ref, expr) m.linear_terms[term_key] = Dict( :lifted_var_ref => lifted_var_ref, :id => length(keys(m.linear_terms)) + 1, :ref => term_key, :y_idx => y_idx, :y_type => resolve_lifted_var_type( [m.var_type[k[2]] for k in term_key[:coef_var]], :+, ), :evaluator => linear, :lifted_constr_ref => lifted_constr_ref, :constr_id => Set(), :bound_resolver => nothing, ) m.term_seq[l_cnt+nl_cnt+1] = term_key push!(m.var_type, m.linear_terms[term_key][:y_type]) # Keep track of the lifted var type get_option(m, :log_level) > 199 && println("found lifted linear term $(lifted_var_ref) = $expr") return y_idx end function lift_nonconvex_term(m::Optimizer, nl_key, constr_id::Int, scalar = 1.0) push!(m.nonconvex_terms[nl_key][:constr_id], constr_id) if scalar == 1.0 return m.nonconvex_terms[nl_key][:lifted_var_ref] else return Expr(:call, :*, m.nonconvex_terms[nl_key][:lifted_var_ref], scalar) end end function lift_linear_term(m::Optimizer, term_key, constr_id::Int) push!(m.linear_terms[term_key][:constr_id], constr_id) return m.linear_terms[term_key][:lifted_var_ref] return end function detect_linear_term(expr::Any, constr_id::Int, m::Optimizer) @assert (expr.head == :call || expr.head == :ref) coef_fetch = Dict(:+ => 1.0, :- => -1.0) # Re-process the expression sub-tree [REQUIRED] expr_resolve_const(expr) expr_resolve_sign(expr) expr_flatten(expr) if expr.args[1] in [:+, :-] scalar = 0.0 coef_var = Set() for i in 2:length(expr.args) # TODO: Consider recursive operation if isa(expr.args[i], Float64) || isa(expr.args[i], Int) (i == 2) ? scalar = expr.args[i] : scalar += coef_fetch[expr.args[1]] * expr.args[i] continue end (isa(expr.args[i], Symbol)) && continue #should never happen if (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) (i == 2) ? push!(coef_var, (1.0, expr.args[i].args[2])) : push!(coef_var, (coef_fetch[expr.args[1]], expr.args[i].args[2])) continue end # Specical Check if expr.args[i].head == :call && expr.args[i].args[1] == :* && length(expr.args[i].args) == 3 sub_coef = [j for j in expr.args[i].args if (isa(j, Int) || isa(j, Float64))] sub_vars = [ j.args[2] for j in expr.args[i].args if ((:head in fieldnames(typeof(j))) && j.head == :ref) ] (isempty(sub_coef) || isempty(sub_vars)) && return false, expr (length(sub_coef) != 1 || length(sub_vars) != 1) && return false, expr (i == 2) ? push!(coef_var, (1.0 * sub_coef[1], sub_vars[1])) : push!(coef_var, (coef_fetch[expr.args[1]] * sub_coef[1], sub_vars[1])) continue end # General Check if expr.args[i].head == :call && expr.args[i].args[1] in [:-, :+] && length(expr.args[i].args) == 2 # resolve -(2) or -(x) terms expr.args[i].args[1] == :+ ? sub_coef = [1.0] : sub_coef = [-1.0] sub_vars = [ j.args[2] for j in expr.args[i].args if ((:head in fieldnames(typeof(j))) && j.head == :ref) ] isempty(sub_vars) && return false, expr length(sub_vars) != 1 && return false, expr (i == 2) ? push!(coef_var, (1.0 * sub_coef[1], sub_vars[1])) : push!(coef_var, (coef_fetch[expr.args[1]] * sub_coef[1], sub_vars[1])) else down_check, linear_lift_var = detect_linear_term(expr.args[i], constr_id, m) # Recursive detection down_check ? expr.args[i] = linear_lift_var : return false, expr push!(coef_var, (1.0, expr.args[i].args[2])) end end # By reaching here, it is already certain that we have found the term, always treat with :+ term_key = Dict(:scalar => scalar, :coef_var => coef_var, :sign => :+) term_key in keys(m.linear_terms) || store_linear_term(m, term_key, expr) return true, lift_linear_term(m, term_key, constr_id) elseif expr.args[1] in [:*] && length(expr.args) == 3 # For terms like (3*x)*y scalar = 0.0 coef_var = Set() sub_coef = [i for i in expr.args if (isa(i, Int) || isa(i, Float64))] sub_vars = [ i.args[2] for i in expr.args if ((:head in fieldnames(typeof(i))) && i.head == :ref) ] (isempty(sub_coef) || isempty(sub_vars)) && return false, expr (length(sub_coef) != 1 || length(sub_vars) != 1) && return false, expr push!(coef_var, (1.0 * sub_coef[1], sub_vars[1])) # By reaching here, it is already certain that we have found the term, always treat with :+ term_key = Dict(:scalar => scalar, :coef_var => coef_var, :sign => :+) term_key in keys(m.linear_terms) || store_linear_term(m, term_key, expr) return true, lift_linear_term(m, term_key, constr_id) end return false, expr end function basic_linear_bounds(m::Optimizer, k::Any, linear_terms = nothing) linear_terms === nothing ? linear_terms = m.linear_terms : linear_term = linear_terms lifted_idx = linear_terms[k][:y_idx] ub = 0.0 lb = 0.0 for j in linear_terms[k][:ref][:coef_var] (j[1] > 0.0) ? ub += abs(j[1]) * m.u_var_tight[j[2]] : ub -= abs(j[1]) * m.l_var_tight[j[2]] (j[1] > 0.0) ? lb += abs(j[1]) * m.l_var_tight[j[2]] : lb -= abs(j[1]) * m.u_var_tight[j[2]] end lb += linear_terms[k][:ref][:scalar] ub += linear_terms[k][:ref][:scalar] if lb > m.l_var_tight[lifted_idx] + get_option(m, :tol) m.l_var_tight[lifted_idx] = lb end if ub < m.u_var_tight[lifted_idx] - get_option(m, :tol) m.u_var_tight[lifted_idx] = ub end return end function basic_linear_bounds(m::Optimizer, k::Any, d::Dict) lifted_idx = m.linear_terms[k][:y_idx] ub = 0.0 lb = 0.0 for j in m.linear_terms[k][:ref][:coef_var] (j[1] > 0.0) ? ub += abs(j[1]) * d[j[2]][end] : ub -= abs(j[1]) * d[j[2]][1] (j[1] > 0.0) ? lb += abs(j[1]) * d[j[2]][1] : lb -= abs(j[1]) * d[j[2]][end] end lb += m.linear_terms[k][:ref][:scalar] ub += m.linear_terms[k][:ref][:scalar] if lb > d[lifted_idx][1] + get_option(m, :tol) d[lifted_idx][1] = lb end if ub < d[lifted_idx][end] - get_option(m, :tol) d[lifted_idx][end] = ub end return d end ## Evaluators ## bpml(k, vec) = prod([vec[i] for i in k[:var_idxs]]) discretemulti(k, vec) = prod([vec[i] for i in k[:var_idxs]]) binprod(k, vec) = prod([vec[i] for i in k[:var_idxs]]) binlin(k, vec) = prod([vec[i] for i in k[:var_idxs]]) bilinear(k, vec) = prod([vec[i] for i in k[:var_idxs]]) multilinear(k, vec) = prod([vec[i] for i in k[:var_idxs]]) monomial(k, vec) = vec[k[:var_idxs][1]]^2 function linear(k, vec) return k[:ref][:scalar] .+ sum([i[1] * vec[i[2]] for i in k[:ref][:coef_var]]) end """ Recognize prodcuts of binary variables and multilinear products General Case : x1 * x2 .. * xN * y1 * y2 .. * yM where x are binary variables, y are continous variables Leads to BINLIN terms, with BINPROD, INTPROD, INTLIN if necessary """ function detect_discretemulti_term(expr::Any, constr_id::Int, m::Optimizer) # Always construct the binlin term after lifting if !(expr.head == :call || expr.head == :ref) return false, expr end if (expr.args[1] == :*) # Pattern: coefficients * x * y * z ..., where x, y, z are all binary variables var_idxs = [] var_types = [] scalar = 1.0 for i in 1:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) scalar *= expr.args[i] continue end (isa(expr.args[i], Symbol)) && continue (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) && push!(var_idxs, expr.args[i].args[2]) (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) && push!(var_types, m.var_type[expr.args[i].args[2]]) if (expr.args[i].head == :call) down_check, linear_lift_var = detect_linear_term(expr.args[i], constr_id, m) !down_check && return false, expr push!(var_idxs, linear_lift_var.args[2]) push!(var_types, m.var_type[linear_lift_var.args[2]]) continue end end # term_key = [Expr(:ref, :x, idx) for idx in var_idxs] cont_var_idxs = [idx for idx in var_idxs if m.var_type[idx] == :Cont] bin_var_idxs = [idx for idx in var_idxs if m.var_type[idx] == :Bin] int_var_idxs = [idx for idx in var_idxs if m.var_type[idx] == :Int] # Must carry at both discrete and continous variables isempty(int_var_idxs) && isempty(bin_var_idxs) && return false, expr isempty(cont_var_idxs) && return false, expr # Lift clusters of continous variables multiplication if necessary if length(cont_var_idxs) > 1 # ml_term_key = [Expr(:ref, :x, idx) for idx in cont_var_idxs] ml_term_expr = Expr(:call, :*) for idx in cont_var_idxs push!(ml_term_expr.args, Expr(:ref, :x, idx)) end ml_lift_term = detect_nonconvex_terms(ml_term_expr, constr_id, m) ml_idx = ml_lift_term.args[2] else ml_idx = cont_var_idxs[1] end # Lift clusters of binary vars multiplication if necessary if length(bin_var_idxs) > 1 bp_term_key = [Expr(:ref, :x, idx) for idx in bin_var_idxs] bp_term_expr = Expr(:call, :*) for idx in bin_var_idxs push!(bp_term_expr.args, Expr(:ref, :x, idx)) end bp_lift_term = detect_nonconvex_terms(bp_term_expr, constr_id, m) bp_idx = bp_lift_term.args[2] else isempty(bin_var_idxs) ? bp_idx = -1 : bp_idx = bin_var_idxs[1] end # lift clusters of integer variables multiplication if necessary if length(int_var_idxs) > 1 ip_term_key = [Expr(:ref, :x, idx) for idx in int_var_idxs] ip_term_expr = Expr(:call, :*) for idx in int_var_idxs push!(ip_term_expr.args, Expr(:ref, :x, idx)) end ip_lift_term = detect_nonconvex_terms(ip_term_expr, constr_id, m) ip_idx = ip_lift_term.args[2] else isempty(int_var_idxs) ? ip_idx = -1 : ip_idx = int_var_idxs[1] end if ip_idx < 0 # binlin term if no integer variable binlin_key = [Expr(:ref, :x, bp_idx), Expr(:ref, :x, ml_idx)] binlin_idxs = [bp_idx; ml_idx] binlin_key in keys(m.nonconvex_terms) || store_nonconvex_term( m, binlin_key, binlin_idxs, :BINLIN, :*, binlin, basic_binlin_bounds, collect_binlin_discvar, ) return true, lift_nonconvex_term(m, binlin_key, constr_id, scalar) end # binlin_key = [Expr(:ref, :x, bp_idx), Expr(:ref, :x, intlin_idx)] binlin_key = [Expr(:ref, :x, bp_idx)] # binlin_idxs = [bp_idx; intlin_idx] binlin_idxs = [bp_idx] binlin_key in keys(m.nonconvex_terms) || store_nonconvex_term( m, binlin_key, binlin_idxs, :BINLIN, :*, binlin, basic_binlin_bounds, collect_binlin_discvar, ) return true, lift_nonconvex_term(m, binlin_key, constr_id, scalar) end return false, expr end function basic_binlin_bounds(m::Optimizer, k::Any) lifted_idx = m.nonconvex_terms[k][:y_idx] prod_idxs = [i for i in m.nonconvex_terms[k][:var_idxs] if m.var_type[i] == :Cont] @assert length(prod_idxs) == 1 lin_idx = prod_idxs[1] if m.l_var_tight[lin_idx] > 0.0 m.l_var_tight[lifted_idx] = 0.0 m.u_var_tight[lifted_idx] = m.u_var_tight[lin_idx] elseif m.u_var_tight[lin_idx] < 0.0 m.u_var_tight[lifted_idx] = 0.0 m.l_var_tight[lifted_idx] = m.l_var_tight[lin_idx] else m.u_var_tight[lifted_idx] = m.u_var_tight[lin_idx] m.l_var_tight[lifted_idx] = m.l_var_tight[lin_idx] end return end function basic_binlin_bounds(m::Optimizer, k::Any, d::Dict) lifted_idx = m.nonconvex_terms[k][:y_idx] prod_idxs = [i for i in m.nonconvex_terms[k][:var_idxs] if m.var_type[i] == :Cont] @assert length(prod_idxs) == 1 lin_idx = prod_idxs[1] if d[lin_idx][1] > 0.0 d[lifted_idx][1] = 0.0 d[lifted_idx][end] = d[lin_idx][end] elseif d[lin_idx][end] < 0.0 d[lifted_idx][end] = 0.0 d[lifted_idx][1] = d[lin_idx][1] else d[lifted_idx][end] = d[lin_idx][end] d[lifted_idx][1] = d[lin_idx][1] end return d end function collect_binlin_discvar(m::Optimizer, k::Any; var_bowl = nothing) # Exact linearization exists return end """ Recognize products of binary variables : x1 * x2 * .. * xN """ function detect_binprod_term(expr::Any, constr_id::Int, m::Optimizer) @assert (expr.head == :call || expr.head == :ref) if (expr.args[1] == :*) # Pattern: coefficients * x * y * z ..., where x, y, z are all binary variables var_idxs = [] scalar = 1.0 for i in 1:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) scalar *= expr.args[i] continue end (isa(expr.args[i], Symbol)) && continue (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) && push!(var_idxs, expr.args[i].args[2]) !isempty(var_idxs) && m.var_type[var_idxs[end]] != :Bin && return false, expr if (expr.args[i].head == :call) down_check, linear_lift_var = detect_linear_term(expr.args[i], constr_id, m) !down_check && return false, expr m.var_type[linear_lift_var.args[2]] != :Bin && return false, expr push!(var_idxs, linear_lift_var.args[2]) continue end end if length(var_idxs) >= 2 term_key = [Expr(:ref, :x, idx) for idx in var_idxs] term_key in keys(m.nonconvex_terms) || store_nonconvex_term( m, term_key, var_idxs, :BINPROD, :*, binprod, basic_binprod_bounds, collect_binprod_discvar, ) return true, lift_nonconvex_term(m, term_key, constr_id, scalar) end elseif (expr.args[1] == :^) && length(expr.args) == 3 # Pattern: (x)^(>2), where x is binary variable var_idxs = [] power_scalar = 0 scalar = 1.0 for i in 2:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) power_scalar += expr.args[i] continue end (isa(expr.args[i], Symbol)) && continue (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) && push!(var_idxs, expr.args[i].args[2]) !isempty(var_idxs) && m.var_type[var_idxs[end]] != :Bin && return false, expr if (expr.args[i].head == :call) down_check, linear_lift_var = detect_linear_term(expr.args[i], constr_id, m) !down_check && return false, expr m.var_type[linear_lift_var.args[2]] != :Bin && return false, expr push!(var_idxs, linear_lift_var.args[2]) continue end end if length(var_idxs) == 1 && power_scalar > 2.0 && mod(power_scalar, 1.0) == 0.0 term_key = [Expr(:ref, :x, var_idxs[1]) for i in 1:power_scalar] term_key in keys(m.nonconvex_terms) || store_nonconvex_term( m, term_key, var_idxs, :BINPROD, :*, binprod, basic_binprod_bounds, collect_binprod_discvar, ) return true, lift_nonconvex_term(m, term_key, constr_id, scalar) end end return false, expr end function basic_binprod_bounds(m::Optimizer, k::Any) lifted_idx = m.nonconvex_terms[k][:lifted_var_ref].args[2] m.l_var_tight[lifted_idx] = 0 m.u_var_tight[lifted_idx] = 1 return end function basic_binprod_bounds(m::Optimizer, k::Any, d::Dict) lifted_idx = m.nonconvex_terms[k][:lifted_var_ref].args[2] d[lifted_idx][1] = 0 d[lifted_idx][end] = 1 return d end function collect_binprod_discvar(m::Optimizer, k::Any; var_bowl = nothing) # Exact linearization exists return end """ Future MONOMIAL Cluster Recognize bilinear terms: x * y, where x and y are continous variables Recognize multilinear terms: x1 * x2 * .. * xN, where all x_i ∀ i are continous variables Recognize monomial terms: x^2 or x * x, where x is continuous """ function detect_bilinear_term(expr::Any, constr_id::Int, m::Optimizer) @assert (expr.head == :call || expr.head == :ref) if (expr.args[1] == :*) # confirm head (:*) # ----- Pattern : coefficient * x * y ------ # # Collect children information for checking scalar = 1.0 var_idxs = [] for i in 2:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) scalar *= expr.args[i] continue end (isa(expr.args[i], Symbol)) && continue (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) && push!(var_idxs, expr.args[i].args[2]) !isempty(var_idxs) && m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr # Don't consider the discrete variable if (expr.args[i].head == :call) down_check, linear_lift_var = detect_linear_term(expr.args[i], constr_id, m) !down_check && return false, expr push!(var_idxs, linear_lift_var.args[2]) m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr # Don't consider the discrete variable continue end end # Confirm detection of patter A and perform store & lifting procedures if (length(var_idxs) == 2) && length(Set(var_idxs)) == 2 term_key = [Expr(:ref, :x, var_idxs[1]), Expr(:ref, :x, var_idxs[2])] if term_key in keys(m.nonconvex_terms) || reverse(term_key) in keys(m.nonconvex_terms) term_key in keys(m.nonconvex_terms) ? term_key = term_key : term_key = reverse(term_key) return true, lift_nonconvex_term(m, term_key, constr_id, scalar) else store_nonconvex_term( m, term_key, var_idxs, :BILINEAR, :*, bilinear, basic_monomial_bounds, collect_monomial_discvar, ) return true, lift_nonconvex_term(m, term_key, constr_id, scalar) end end end return false, expr end function detect_multilinear_term(expr::Any, constr_id::Int, m::Optimizer) @assert (expr.head == :call || expr.head == :ref) if (expr.args[1] == :*) # Pattern: coefficients * x * y * z ... var_idxs = [] scalar = 1.0 for i in 1:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) scalar *= expr.args[i] continue end (isa(expr.args[i], Symbol)) && continue (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) && push!(var_idxs, expr.args[i].args[2]) !isempty(var_idxs) && m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr if (expr.args[i].head == :call) down_check, linear_lift_var = detect_linear_term(expr.args[i], constr_id, m) !down_check && return false, expr push!(var_idxs, linear_lift_var.args[2]) m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr continue end end if length(var_idxs) > 2 term_key = [Expr(:ref, :x, idx) for idx in var_idxs] term_key in keys(m.nonconvex_terms) || store_nonconvex_term( m, term_key, var_idxs, :MULTILINEAR, :*, multilinear, basic_monomial_bounds, collect_monomial_discvar, ) return true, lift_nonconvex_term(m, term_key, constr_id, scalar) end elseif (expr.args[1] == :^) && length(expr.args) == 3 # Pattern: (x)^(>2) var_idxs = [] power_scalar = 0 scalar = 1.0 for i in 2:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) power_scalar += expr.args[i] continue end (isa(expr.args[i], Symbol)) && continue (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) && push!(var_idxs, expr.args[i].args[2]) !isempty(var_idxs) && m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr # Avoid fetching terms with discrete variables if (expr.args[i].head == :call) down_check, linear_lift_var = detect_linear_term(expr.args[i], constr_id, m) !down_check && return false, expr push!(var_idxs, linear_lift_var.args[2]) m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr continue end end if length(var_idxs) == 1 && power_scalar > 2.0 && mod(power_scalar, 1.0) == 0.0 term_key = [Expr(:ref, :x, var_idxs[1]) for i in 1:power_scalar] term_key in keys(m.nonconvex_terms) || store_nonconvex_term( m, term_key, var_idxs, :MULTILINEAR, :*, multilinear, basic_monomial_bounds, collect_monomial_discvar, ) return true, lift_nonconvex_term(m, term_key, constr_id, scalar) end end return false, expr end function detect_monomial_term(expr::Any, constr_id::Int, m::Optimizer) if (expr.args[1] == :^) && length(expr.args) == 3 # Pattern: (x)^(2) var_idxs = [] power_scalar = 0 scalar = 1.0 for i in 2:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) power_scalar += expr.args[i] continue end (isa(expr.args[i], Symbol)) && continue (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) && push!(var_idxs, expr.args[i].args[2]) !isempty(var_idxs) && m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr # Avoid fetching terms with discrete variables if (expr.args[i].head == :call) down_check, linear_lift_var = detect_linear_term(expr.args[i], constr_id, m) !down_check && return false, expr push!(var_idxs, linear_lift_var.args[2]) m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr # Avoid fetching terms with discrete variables continue end end # Detect 1.0 in the exponent and return only the variable if length(var_idxs) == 1 && power_scalar == 1.0 return false, Expr(:call, expr.args[2]) end if length(var_idxs) == 1 && power_scalar == 2.0 term_key = [Expr(:ref, :x, var_idxs[1]) for i in 1:2] term_key in keys(m.nonconvex_terms) || store_nonconvex_term( m, term_key, var_idxs, :MONOMIAL, :*, monomial, basic_monomial_bounds, collect_monomial_discvar, ) return true, lift_nonconvex_term(m, term_key, constr_id, scalar) end end # Type 2 monomial term : x * x if (expr.args[1] == :*) # confirm head (:*) # ----- Pattern : coefficient * x * y ------ # scalar = 1.0 var_idxs = [] for i in 2:length(expr.args) if isa(expr.args[i], Float64) || isa(expr.args[i], Int) scalar *= expr.args[i] continue end (isa(expr.args[i], Symbol)) && continue (expr.args[i].head == :ref) && isa(expr.args[i].args[2], Int) && push!(var_idxs, expr.args[i].args[2]) !isempty(var_idxs) && m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr # Avoid fetching terms with discrete variables if (expr.args[i].head == :call) down_check, linear_lift_var = detect_linear_term(expr.args[i], constr_id, m) !down_check && return false, expr push!(var_idxs, linear_lift_var.args[2]) m.var_type[var_idxs[end]] in [:Bin, :Int] && return false, expr # Avoid fetching terms with discrete variables continue end end # Confirm detection of pattern A and perform store & lifting procedures if (length(var_idxs) == 2) && (length(Set(var_idxs)) == 1) term_key = [Expr(:ref, :x, var_idxs[1]) for i in 1:2] term_key in keys(m.nonconvex_terms) || store_nonconvex_term( m, term_key, var_idxs, :MONOMIAL, :*, monomial, basic_monomial_bounds, collect_monomial_discvar, ) return true, lift_nonconvex_term(m, term_key, constr_id, scalar) end end return false, expr end function basic_monomial_bounds(m::Optimizer, k::Any) lifted_idx = m.nonconvex_terms[k][:lifted_var_ref].args[2] cnt = 0 bound = [] for var in k cnt += 1 var_idx = var.args[2] var_bounds = [m.l_var_tight[var_idx], m.u_var_tight[var_idx]] if cnt == 1 bound = copy(var_bounds) elseif cnt == 2 bound = bound * var_bounds' else bound = vec(bound) * var_bounds' end end if minimum(bound) > m.l_var_tight[lifted_idx] + get_option(m, :tol) m.l_var_tight[lifted_idx] = minimum(bound) if m.nonconvex_terms[k][:nonlinear_type] == :MONOMIAL m.l_var_tight[lifted_idx] = 0.0 end end if maximum(bound) < m.u_var_tight[lifted_idx] - get_option(m, :tol) m.u_var_tight[lifted_idx] = maximum(bound) end return end function basic_monomial_bounds(m::Optimizer, nlk::Any, d::Dict) lifted_idx = m.nonconvex_terms[nlk][:lifted_var_ref].args[2] cnt = 0 bound = [] for var in nlk cnt += 1 var_idx = var.args[2] var_bounds = [d[var_idx][1], d[var_idx][end]] if cnt == 1 bound = copy(var_bounds) elseif cnt == 2 bound = bound * var_bounds' else bound = vec(bound) * var_bounds' end end if minimum(bound) > d[lifted_idx][1] + get_option(m, :tol) d[lifted_idx][1] = minimum(bound) end if maximum(bound) < d[lifted_idx][end] - get_option(m, :tol) d[lifted_idx][end] = maximum(bound) end return d end function collect_monomial_discvar(m::Optimizer, k::Any; var_bowl = nothing) for var in k @assert isa(var.args[2], Int) if var_bowl === nothing var.args[2] in m.candidate_disc_vars || push!(m.candidate_disc_vars, var.args[2]) else var.args[2] in var_bowl || push!(var_bowl, var.args[2]) end end return end """ Recognize convex constraints A catch for type-A convex constraint expression """ function resolve_convex_constr( expr::Any, m::Optimizer = nothing, idx::Int = 0, scalar_bin = [], idxs_bin = [], power_bin = [], rhs = 0.0, ) expr_orig, subs = :empty, Any[] if expr.args[1] in [:(<=), :(>=)] && idx > 0 expr_orig = :constr sense = expr.args[1] rhs = expr.args[3] subs, rhs_strip = expr_strip_const(expr.args[2]) # Focus on the regularized subtree (stripped with constants) rhs += rhs_strip # TODO: check if sign is flipped elseif expr.args[1] == :(==) return false elseif idx == 0 expr_orig = :obj subs, rhs = expr_strip_const(expr) # Focus on the regularized subtree (stripped with constants) end for sub in subs (isa(sub, Float64) || isa(sub, Int) || isa(sub, Symbol)) && return false !(sub.args[1] in [:+, :-, :*]) && return false (sub.head == :ref) && return false (sub.head == :call) && (length(sub.args) < 3) && return false if sub.args[1] in [:-, :+] for i in 2:length(sub.args) if isa(sub.args[i], Float64) || isa(sub.args[i], Int) (sub.args[1] == [:-]) && ((i == 1) ? rhs += sub.args[i] : rhs -= sub.args[i]) (sub.args[1] == [:+]) && (rhs += sub.args[i]) elseif (sub.args[i].head == :ref) return false elseif (sub.args[i].head == :call) scalar, idxs, powers = expr_is_axn(sub.args[i]) (scalar === nothing) && return false if length(Set(idxs)) == 1 push!(idxs_bin, idxs[1]) push!(power_bin, sum(powers)) else return false end (sub.args[1] == :-) && ( (i == 2) ? push!(scalar_bin, scalar) : push!(scalar_bin, -scalar) ) (sub.args[1] == :+) && (push!(scalar_bin, scalar)) end end elseif sub.args[1] in [:*] scalar, idxs, powers = expr_is_axn(sub) (scalar === nothing) && return false if length(Set(idxs)) == 1 push!(idxs_bin, idxs[1]) push!(power_bin, sum(powers)) else return false end push!(scalar_bin, scalar) else return false # don't support other operators end scalar_sign = sign(scalar_bin[1]) if length(scalar_bin) > 1 for i in 2:length(scalar_bin) !(scalar_sign == sign(scalar_bin[i])) && return false end end !(length(Set(power_bin)) == 1) && return false (expr.args[1] == :(<=)) && !(scalar_sign >= 0.0 && rhs >= 0.0) && return false (expr.args[1] == :(>=)) && !(scalar_sign <= 0.0 && rhs <= 0.0) && return false (expr.args[1] == :(<=)) && (scalar_sign <= 0.0) && return false (expr.args[1] == :(>=)) && (scalar_sign >= 0.0) && return false end if expr_orig == :constr # For anything reaches this point, we've detected most common attributes of a convex expression # Now, we should use the differences to indicate different types of convex expression convex_type = :Unknown power_check = [(i > 1.0) && mod(i, 2) == 0 for i in power_bin] # Special case for linear constraints within @NLconstraint isempty(power_check) && return false # Convex constraint Type-A # sum_i (c_i*x_i^p) <= K (K > 0, p is an even positive integer and x_i \in R) => Convex power_check = [(i > 1.0) && mod(i, 2) == 0 for i in power_bin] (convex_type == :Unknown) && prod(power_check) && (convex_type = :convexA) # Type-B: Convex constraint # sum_i (c_i*x_i^p) <= K (K > 0, p >= 1 and x_i >= 0) => Convex lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin] power_check = [i > 1.0 for i in power_bin] (convex_type == :Unknown) && prod(lb_check) && prod(power_check) && (convex_type = :convexB) # Convex constraint Type-C # sum_i (c_i*x_i^p) >= K (K > 0, 0 < p < 1 and x_i >= 0) => Convex power_check = [i < 1 && i > 0.0 for i in power_bin] lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin] (convex_type == :Unknown) && prod(power_check) && prod(power_check) && (convex_type = :convexC) # Convex constraint Type-D # sum_i (c_i*x_i^p) <= K (K > 0, p <= 0 and x_i > 0) => Convex power_check = [i <= 0.0 for i in power_bin] lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin] (convex_type == :Unknown) && prod(power_check) && prod(power_check) && (convex_type = :convexD) # If we really cannot figure out what is going on... (convex_type == :Unknown) && return false # Recording the nonlinear info m.nonlinear_constrs[idx] = Dict( :expr_idx => idx, :convex_type => convex_type, :nonlinear_type => :convex, :expr_orig => :constraints, :expr_ref => deepcopy(expr), :convexified => false, ) # Recording the un-changed expression m.bounding_constr_expr_mip[idx] = expr # Recording structural identifier m.constr_structure[idx] = :convex # Recording the function for adding constraints m.bounding_constr_mip[idx] = Dict( :idx => idx, :expr => expr, :sense => sense, :coefs => scalar_bin, :vars => idxs_bin, :rhs => rhs, :cnt => length(idxs_bin), :powers => power_bin, ) get_option(m, :log_level) > 99 && println("CONVEX Constraint $(idx): $(expr)") return true elseif expr_orig == :obj minimum convex_type = :Unknown (expr_isconst(m.obj_expr_orig)) && return true # Follows the same mapping to convex constraints # Important: This is a fix to return obj is non-convex if the exponents have value greater than 2. # This is needs to be removed once outer-approximation for convex functions is implemented (maximum(power_bin) > 2) && return false # Type-A: Convex objective function # sum_i (c_i*x_i^p) (p is an even positive integer and x_i \in R) => Convex power_check = [i > 1.0 && mod(i, 2) == 0 for i in power_bin] (convex_type == :Unknown) && prod(power_check) && (convex_type = :convexA) # Type-B: Convex objective function # sum_i (c_i*x_i^p) (p >= 1 and x_i >= 0) => Convex lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin] power_check = [i > 1.0 for i in power_bin] (convex_type == :Unknown) && prod(lb_check) && prod(power_check) && (convex_type = :convexB) # Type-D: Convex objective function # sum_i (c_i*x_i^p) (p <= 0 and x_i > 0) => Convex power_check = [i <= 0.0 for i in power_bin] lb_check = [m.l_var_orig[i.args[2]] >= 0.0 for i in idxs_bin] (convex_type == :Unknown) && prod(power_check) && prod(power_check) && (convex_type = :convexD) convex_type == :Unknown && return false # Recording the nonlinear info m.nonlinear_constrs[idx] = Dict( :expr_orig => :objective, :expr_idx => idx, :convex_type => convex_type, :nonlinear_type => :convex, :expr_ref => deepcopy(expr), :convexified => false, ) # Recording the un-changed expression m.bounding_obj_expr_mip = expr # Recording structural identifier m.obj_structure = :convex # Record a function that can be used to add objective function m.bounding_obj_mip = Dict( :sense => nothing, :coefs => scalar_bin, :vars => idxs_bin, :rhs => -rhs, :cnt => length(idxs_bin), :powers => power_bin, ) get_option(m, :log_level) > 99 && println("CONVEX Objective: $(expr)") return true end return false end ================================================ FILE: src/presolve.jl ================================================ """ bound_tightening_wrapper(m::Optimizer) Entry point to the optimization-based bound-tightening (OBBT) algorithm. The aim of the OBBT algorithm is to sequentially tighten the variable bounds until a fixed point is reached. Currently, two OBBT methods are implemented in [`optimization_based_bound_tightening`](@ref). * Bound-tightening with polyhedral relaxations (McCormick, Lambda for convex-hull) * Bound-tightening with piecewise polyhedral relaxations: (with three partitions around the local feasible solution) If no local feasible solution is obtained, the algorithm defaults to OBBT without partitions """ function bound_tightening_wrapper(m::Optimizer; use_bound = true, kwargs...) get_option(m, :presolve_bt) || return if get_option(m, :presolve_bt_algo) == 1 optimization_based_bound_tightening(m, use_bound = use_bound) elseif get_option(m, :presolve_bt_algo) == 2 optimization_based_bound_tightening(m, use_bound = use_bound, use_tmc = true) elseif isa(get_option(m, :presolve_bt_algo), Function) get_option(m, :presolve_bt_algo)(m) else error("Unrecognized bound tightening algorithm") end return end """ optimization_based_bound_tightening(m:Optimizer; use_bound::Bool=true, use_tmc::Bool) This function implements the OBBT algorithm to tighten the variable bounds. It utilizes either the basic polyhedral relaxations or the piecewise polyhedral relaxations (TMC) to tighten the bounds. The TMC has additional binary variables while performing OBBT. The algorithm as two main parameters. The first is the `use_tmc`, which when set to `true` invokes the algorithm on the TMC relaxation. The second parameter `use_bound` takes in the objective value of the local solve solution stored in `best_sol` for performing OBBT. The `use_bound` option is set to `true` when the local solve is successful in obtaining a feasible solution, else this parameter is set to `false`. For details, refer to section 3.1.1 of Nagarajan, Lu, Wang, Bent, Sundar, "An adaptive, multivariate partitioning algorithm for global optimization of nonconvex programs" [link](https://doi.org/10.1007/s10898-018-00734-1). Several other user-input options can be used to tune the OBBT algorithm. For more details, see [Presolve Options](https://lanl-ansi.github.io/Alpine.jl/latest/parameters/#Presolve-Options). """ function optimization_based_bound_tightening( m::Optimizer; use_bound = true, time_limit = Inf, kwargs..., ) # Some functinal constants both_senses = [MOI.MIN_SENSE, MOI.MAX_SENSE] # Senses during bound tightening procedures tell_side = Dict(MOI.MIN_SENSE => 1, MOI.MAX_SENSE => 2) # Positional information tell_round = Dict(MOI.MIN_SENSE => floor, MOI.MAX_SENSE => ceil) options = Dict(kwargs) st = time() # Track start time if time_limit == Inf time_limit = get_option(m, :presolve_bt_time_limit) end # Regulating special input conditions: default use best feasible solution objective value (use_bound == true) ? bound = m.best_obj : bound = Inf l_var_orig = copy(m.l_var_tight) u_var_orig = copy(m.u_var_tight) discretization = _get_discretization_dict(m, m.l_var_tight, m.u_var_tight) if use_bound == false && haskey(options, :use_tmc) (get_option(m, :log_level) > 0) && @warn " Local solve infeasible; defaulting to doing bound-tightening without partitions." end if use_bound == true && haskey(options, :use_tmc) discretization = add_adaptive_partition( m, use_solution = m.best_sol, use_disc = discretization, ) end discretization = resolve_var_bounds(m, discretization) # recomputation of bounds for lifted_variables (get_option(m, :log_level) > 0) && println(" Starting bound-tightening") width_tol = get_option(m, :presolve_bt_width_tol) bound_tol = get_option(m, :presolve_bt_bound_tol) improv_tol = get_option(m, :presolve_bt_improv_tol) keep_tightening = true # start of the solve while keep_tightening && (m.logs[:time_left] > get_option(m, :tol)) && (m.logs[:bt_iter] < get_option(m, :presolve_bt_max_iter)) # Stopping criteria keep_tightening = false m.logs[:bt_iter] += 1 get_option(m, :log_level) > 199 && println(" Iteration - $(m.logs[:bt_iter])") temp_bounds = Dict() avg_reduction = 0.0 max_reduction = 0.0 total_reduction = 0.0 max_width = 0.0 current_rel_gap = Inf # Sequential optimization-based bound tightening (OBBT) for var_idx in m.candidate_disc_vars temp_bounds[var_idx] = [discretization[var_idx][1], discretization[var_idx][end]] if (discretization[var_idx][end] - discretization[var_idx][1]) > width_tol create_obbt_model(m, discretization, bound) for sense in both_senses JuMP.@objective( m.model_mip, sense, _index_to_variable_ref(m.model_mip, var_idx) ) stats = solve_obbt_model(m) if stats["status"] in STATUS_OPT temp_bounds[var_idx][tell_side[sense]] = tell_round[sense]( JuMP.objective_value(m.model_mip) / bound_tol, ) * bound_tol # Objective truncation for numerical issues elseif stats["status"] in STATUS_LIMIT temp_bounds[var_idx][tell_side[sense]] = tell_round[sense]( JuMP.objective_bound(m.model_mip) / bound_tol, ) * bound_tol elseif stats["status"] in STATUS_INF @warn( "Infeasible model detected within bound tightening - bounds not updated" ) else @warn("Unknown status within bound tightening models") end end end if ( temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] > temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] ) temp_bounds[var_idx] = [discretization[var_idx][1], discretization[var_idx][end]] end if ( temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] > discretization[var_idx][end] ) temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] = discretization[var_idx][1] end if ( temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] < discretization[var_idx][1] ) temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] = discretization[var_idx][end] end bound_reduction = 0.0 if ( temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] - temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] ) <= width_tol midpoint = (temp_bounds[var_idx][1] + temp_bounds[var_idx][end]) / 2 if (midpoint - discretization[var_idx][1] < width_tol / 2) temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] = discretization[var_idx][1] temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] = discretization[var_idx][1] + (width_tol) elseif (discretization[var_idx][end] - midpoint < width_tol / 2) temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] = discretization[var_idx][end] - (width_tol) temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] = discretization[var_idx][end] else temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]] = midpoint - (width_tol / 2) temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] = midpoint + (width_tol / 2) end end new_range = round( temp_bounds[var_idx][tell_side[MOI.MAX_SENSE]] - temp_bounds[var_idx][tell_side[MOI.MIN_SENSE]], digits = 4, ) old_range = discretization[var_idx][end] - discretization[var_idx][1] bound_reduction = old_range - new_range total_reduction += bound_reduction max_reduction = max(bound_reduction, max_reduction) max_width = max(new_range, max_width) (get_option(m, :log_level) > 99) && print("+") (get_option(m, :log_level) > 99) && println( " VAR $(var_idx) LB contracted $(discretization[var_idx][1])=>$(temp_bounds[var_idx][1])", ) (get_option(m, :log_level) > 99) && print("+") (get_option(m, :log_level) > 99) && println( " VAR $(var_idx) UB contracted $(discretization[var_idx][end])=>$(temp_bounds[var_idx][end])", ) discretization[var_idx][1] = temp_bounds[var_idx][1] discretization[var_idx][end] = temp_bounds[var_idx][end] end avg_reduction = total_reduction / length(keys(temp_bounds)) bound_avg_reduction = (avg_reduction > improv_tol) bound_max_reduction = (max_reduction > improv_tol) bound_max_width = (max_width > width_tol) # Deactivate this termination criterion if it slows down the OBBT convergence stats = relaxation_model_obbt(m, discretization, bound) if is_min_sense(m) current_rel_gap = eval_opt_gap(m, stats["relaxed_obj"], bound) elseif is_max_sense(m) current_rel_gap = eval_opt_gap(m, bound, stats["relaxed_obj"]) end keep_tightening = (bound_avg_reduction) && (bound_max_reduction) && (bound_max_width) && (current_rel_gap > get_option(m, :rel_gap)) if !isinf(current_rel_gap) m.presolve_best_rel_gap = current_rel_gap * 100 end discretization = resolve_var_bounds(m, discretization) if haskey(options, :use_tmc) discretization = add_adaptive_partition( m, use_solution = m.best_sol, use_disc = flatten_discretization(discretization), ) end time() - st > time_limit && break end (get_option(m, :log_level) > 1) && println(" Variables whose bounds were tightened:") (get_option(m, :log_level) > 0) && println(" Actual iterations (OBBT): ", (m.logs[:bt_iter])) m.l_var_tight, m.u_var_tight = update_var_bounds(discretization) if haskey(options, :use_tmc) m.discretization = add_adaptive_partition(m, use_solution = m.best_sol) end for i in m.disc_vars contract_ratio = round( 1 - abs(m.l_var_tight[i] - m.u_var_tight[i]) / abs(l_var_orig[i] - u_var_orig[i]); digits = 2, ) * 100 if get_option(m, :log_level) > 0 && contract_ratio > 0.0001 (get_option(m, :log_level) > 1) && (println( " 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)) |", )) end end return end """ create_obbt_model(m::Optimizer, discretization::Dict, bound::Float64) This function takes in the initial discretization information and builds the OBBT model. It is an algorithm specific function called by [`optimization_based_bound_tightening`](@ref). """ function create_obbt_model(m::Optimizer, discretization, bound::Number; kwargs...) # options = Dict(kwargs) start_build = time() m.model_mip = Model(get_option(m, :mip_solver)) # Construct JuMP model amp_post_vars(m, use_disc = discretization) amp_post_lifted_constraints(m) amp_post_convexification(m, use_disc = discretization) # Convexify problem if !(isinf(bound)) post_objective_bound(m, bound) else @warn "Dropping the objective bound constraint in presolve bound tightening" end cputime_build = time() - start_build m.logs[:total_time] += cputime_build m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time]) return end function relaxation_model_obbt(m::Optimizer, discretization, bound::Number) create_obbt_model(m, discretization, bound) obj_expr = JuMP.@expression( m.model_mip, sum( m.bounding_obj_mip[:coefs][j] * _index_to_variable_ref(m.model_mip, m.bounding_obj_mip[:vars][j].args[2]) for j in 1:m.bounding_obj_mip[:cnt] ), ) if is_min_sense(m) JuMP.@objective(m.model_mip, Min, obj_expr) elseif is_max_sense(m) JuMP.@objective(m.model_mip, Max, obj_expr) end return solve_obbt_model(m) end """ solve_obbt_model(m::Optimizer) A function that solves the min and max OBBT model. """ function solve_obbt_model(m::Optimizer; kwargs...) stats = Dict() # ========= MILP Solve ========= # time_limit = max( 0.0, if get_option(m, :presolve_bt_mip_time_limit) < Inf min( get_option(m, :presolve_bt_mip_time_limit), get_option(m, :time_limit) - m.logs[:total_time], ) else get_option(m, :time_limit) - m.logs[:total_time] end, ) MOI.set(m.model_mip, MOI.TimeLimitSec(), time_limit) start_solve = time() if get_option(m, :presolve_bt_relax_integrality) JuMP.relax_integrality(m.model_mip) end JuMP.optimize!(m.model_mip) status = MOI.get(m.model_mip, MOI.TerminationStatus()) stats["status"] = status stats["relaxed_obj"] = JuMP.objective_value(m.model_mip) cputime_solve = time() - start_solve m.logs[:total_time] += cputime_solve m.logs[:time_left] = max(0.0, get_option(m, :time_limit) - m.logs[:total_time]) # ========= MILP Solve ========= # return stats end """ post_objective_bound(m::Optimizer, bound::Float64; kwargs...) This function adds the upper/lower bounding constraint on the objective function for the optimization models solved within the OBBT algorithm. """ function post_objective_bound(m::Optimizer, bound::Number; kwargs...) obj_expr = JuMP.@expression( m.model_mip, sum( m.bounding_obj_mip[:coefs][j] * _index_to_variable_ref(m.model_mip, m.bounding_obj_mip[:vars][j].args[2]) for j in 1:m.bounding_obj_mip[:cnt] ), ) obj_bound_tol = get_option(m, :presolve_bt_obj_bound_tol) if is_max_sense(m) JuMP.@constraint( m.model_mip, obj_expr >= floor(bound / obj_bound_tol) * obj_bound_tol ) elseif is_min_sense(m) JuMP.@constraint( m.model_mip, obj_expr <= ceil(bound / obj_bound_tol) * obj_bound_tol ) end return end ================================================ FILE: src/relaxations.jl ================================================ """ relaxation_bilinear( m::JuMP.Model, z::JuMP.VariableRef, x::JuMP.VariableRef, y::JuMP.VariableRef, lb_x::Number, ub_x::Number, lb_y::Number, ub_y::Number) General relaxation of a binlinear term (McCormick relaxation). ``` z >= JuMP.lower_bound(x)*y + JuMP.lower_bound(y)*x - JuMP.lower_bound(x)*JuMP.lower_bound(y) z >= JuMP.upper_bound(x)*y + JuMP.upper_bound(y)*x - JuMP.upper_bound(x)*JuMP.upper_bound(y) z <= JuMP.lower_bound(x)*y + JuMP.upper_bound(y)*x - JuMP.lower_bound(x)*JuMP.upper_bound(y) z <= JuMP.upper_bound(x)*y + JuMP.lower_bound(y)*x - JuMP.upper_bound(x)*JuMP.lower_bound(y) ``` """ function relaxation_bilinear( m::JuMP.Model, z::JuMP.VariableRef, x::JuMP.VariableRef, y::JuMP.VariableRef, lb_x::Number, ub_x::Number, lb_y::Number, ub_y::Number, ) JuMP.@constraint(m, z >= lb_x * y + lb_y * x - lb_x * lb_y) JuMP.@constraint(m, z >= ub_x * y + ub_y * x - ub_x * ub_y) JuMP.@constraint(m, z <= lb_x * y + ub_y * x - lb_x * ub_y) JuMP.@constraint(m, z <= ub_x * y + lb_y * x - ub_x * lb_y) return end """ relaxation_multilinear_binary( m::JuMP.Model, z::JuMP.VariableRef, x::Vector{VariableRef}) Applies Fortet linearization (see https://doi.org/10.1007/s10288-006-0015-3) for z = prod(x), where x is a vector of binary variables. """ function relaxation_multilinear_binary( m::JuMP.Model, z::JuMP.VariableRef, x::Vector{VariableRef}, ) for i in x JuMP.@constraint(m, z <= i) end JuMP.@constraint(m, z >= sum(x) - (length(x) - 1)) return end #= """ relaxation_quadratic_univariate( m::JuMP.Model, z::JuMP.VariableRef, x::JuMP.VariableRef, lb_x::Number, ub_x::Number, ) Applies convex hull relaxation for z = x^2, where x is a variable. """ function relaxation_quadratic_univariate( m::JuMP.Model, z::JuMP.VariableRef, x::JuMP.VariableRef, lb_x::Number, ub_x::Number, ) JuMP.@constraint(m, z >= x^2) JuMP.@constraint(m, z <= (lb_x + ub_x) * x - (lb_x * ub_x)) return end =# ================================================ FILE: src/solver_options.jl ================================================ # Optimizer struct and user-defined options (with default settings) to tune Alpine solver mutable struct OptimizerOptions # Parameters for tuning Alpine # Basic solver parameters log_level::Int # Verbosity flag: 0 for quiet, 1 for basic solve info, 2 for iteration info time_limit::Float64 # Time limit for algorithm (in seconds) max_iter::Int # Maximum bound on number of iterations for the partitioning algorithm rel_gap::Float64 # Relative optimality gap for termination condition abs_gap::Float64 # Absolute optimality gap for termination condition tol::Float64 # Numerical tol used in algorithms large_bound::Float64 # Large bounds for problems with unbounded variables # All the solver options nlp_solver::Union{MOI.OptimizerWithAttributes,Nothing} # Local continuous NLP solver for solving NLPs at each iteration minlp_solver::Union{MOI.OptimizerWithAttributes,Nothing} # Local MINLP solver for solving MINLPs at each iteration mip_solver::Union{MOI.OptimizerWithAttributes,Nothing} # MIP solver for successive lower bound solves # Convexification methods recognize_convex::Bool # Recognize convex expressions in parsing objective functions and constraints # Expression-based user-inputs # method_convexification :: Array{Function} # Array of functions that user can choose to convexify specific non-linear terms : no over-ride privilege # Parameters used in Alpine's MIP-based partitioning algorithm apply_partitioning::Bool # Apply the partitioning algorithm only if thhis true, else terminate after presolve 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 partition_scaling_factor::Int # Partition scaling parameter, which is critical for convergence (using a fixed value for now, later switch to a function) disc_uniform_rate::Int # Discretization rate parameter when using uniform partitions disc_add_partition_method::Any # Additional methods to add discretization disc_divert_chunks::Int # How many uniform partitions to construct disc_abs_width_tol::Float64 # Absolute tolerance used when setting up a partition disc_rel_width_tol::Float64 # Relative width tolerance when setting up a partition disc_consecutive_forbid::Int # Prevent bounding model to add partitions consecutively in the same region when bounds do not improve partition_scaling_factor_branch::Bool # Branching tests for picking fixed discretization ratio # MIP formulation parameters convhull_formulation::String # MIP Formulation for the relaxation convhull_ebd::Bool # Enable embedding formulation convhull_ebd_encode::Any # Encoding method used for convhull_ebd convhull_ebd_ibs::Bool # Enable independent branching scheme convhull_ebd_link::Bool # Linking constraints between x and α, type 1 uses hierarchical and type 2 uses big-m convhull_warmstart::Bool # Warm start the bounding MIP linking_constraints::Bool # Multilinear linking constraint feature linking_constraints_degree_limit::Int64 # Degree of shared multilinear terms up to which the linking constraints are built and added # Presolve and bound-tightening parameters presolve_track_time::Bool # Account presolve time for total time usage presolve_bt::Bool # Perform bound tightening procedure before the main algorithm (default: true) presolve_bt_time_limit::Float64 # Time limit for presolving (seconds) presolve_bt_max_iter::Int # Maximum iterations allowed to perform presolve presolve_bt_width_tol::Float64 # Width tolerance for bound-tightening presolve_bt_improv_tol::Float64 # Improvement tolerance for average reduction of variable ranges presolve_bt_bound_tol::Float64 # Variable bounds truncation precicision tol presolve_bt_obj_bound_tol::Float64 # Objective upper bound truncation tol presolve_bt_algo::Any # Method used for bound tightening procedures, can either be an index of default methods or functional inputs presolve_bt_relax_integrality::Bool # Relax the MIP solved in built-in relaxation scheme for time performance presolve_bt_mip_time_limit::Float64 # Time limit for a single MIP solved in the built-in bound tightening algorithm (with partitions) use_start_as_incumbent::Bool # Use starting value as a local incumbent solution for presolve without invoking a local solver # Domain Reduction presolve_bp::Bool # Conduct basic bound propagation end function get_default_options() log_level = 1 time_limit = 1E6 max_iter = 99 rel_gap = 1e-4 abs_gap = 1e-6 tol = 1e-6 large_bound = 1E6 nlp_solver = nothing minlp_solver = nothing mip_solver = nothing recognize_convex = true apply_partitioning = true disc_var_pick = 2 # By default, uses the 15-variable selective rule partition_scaling_factor = 10 disc_uniform_rate = 2 disc_add_partition_method = "adaptive" disc_divert_chunks = 5 disc_abs_width_tol = 1e-4 disc_rel_width_tol = 1e-6 disc_consecutive_forbid = false partition_scaling_factor_branch = false convhull_formulation = "sos2" convhull_ebd = false convhull_ebd_encode = "default" convhull_ebd_ibs = false convhull_ebd_link = false convhull_warmstart = true linking_constraints = true linking_constraints_degree_limit = 4 # check up to quadrilinear sharing across terms presolve_track_time = true presolve_bt = true presolve_bt_time_limit = 900 presolve_bt_max_iter = 25 presolve_bt_width_tol = 1e-2 presolve_bt_improv_tol = 1e-3 presolve_bt_bound_tol = 1e-4 presolve_bt_obj_bound_tol = 1e-2 presolve_bt_algo = 1 presolve_bt_relax_integrality = false presolve_bt_mip_time_limit = Inf use_start_as_incumbent = false presolve_bp = false return OptimizerOptions( log_level, time_limit, max_iter, rel_gap, abs_gap, tol, large_bound, nlp_solver, minlp_solver, mip_solver, recognize_convex, apply_partitioning, disc_var_pick, partition_scaling_factor, disc_uniform_rate, disc_add_partition_method, disc_divert_chunks, disc_abs_width_tol, disc_rel_width_tol, disc_consecutive_forbid, partition_scaling_factor_branch, convhull_formulation, convhull_ebd, convhull_ebd_encode, convhull_ebd_ibs, convhull_ebd_link, convhull_warmstart, linking_constraints, linking_constraints_degree_limit, presolve_track_time, presolve_bt, presolve_bt_time_limit, presolve_bt_max_iter, presolve_bt_width_tol, presolve_bt_improv_tol, presolve_bt_bound_tol, presolve_bt_obj_bound_tol, presolve_bt_algo, presolve_bt_relax_integrality, presolve_bt_mip_time_limit, use_start_as_incumbent, presolve_bp, ) end ================================================ FILE: src/utility.jl ================================================ """ update_opt_gap(m::Optimizer) Updates Alpine model's relative & absolute optimality gaps. The relative gap calculation is ```math \\textbf{Gap} = \\frac{|UB-LB|}{ϵ+|UB|} ``` The absolute gap calculation is ``` |UB-LB| ``` """ function update_opt_gap(m::Optimizer) tol = get_option(m, :tol) if m.best_obj in [Inf, -Inf] m.best_rel_gap = Inf return else p = convert(Int, round(abs(log(10, get_option(m, :rel_gap))))) n = round(abs(m.best_obj - m.best_bound); digits = p) # dn = round(abs(1e-12+abs(m.best_obj)); digits=p) if isapprox(n, 0.0; atol = tol) && isapprox(m.best_obj, 0.0; atol = tol) m.best_rel_gap = 0.0 return end if is_min_sense(m) m.best_rel_gap = eval_opt_gap(m, m.best_bound, m.best_obj) elseif is_max_sense(m) m.best_rel_gap = eval_opt_gap(m, m.best_obj, m.best_bound) end end m.best_abs_gap = abs(m.best_obj - m.best_bound) return end function eval_opt_gap(m::Optimizer, lower_bound::Number, upper_bound::Number) tol = get_option(m, :tol) if isinf(lower_bound) || isinf(upper_bound) error("Infinite bounds detected in optimality gap evalutation") else m.best_rel_gap = _eval_best_rel_gap(lower_bound, upper_bound, tol) # If LB > UB if (m.best_rel_gap > get_option(m, :rel_gap)) && ((lower_bound - upper_bound) > 1E-1) error( "Lower bound cannot exceed the upper bound in optimality gap evaluation", ) end end return m.best_rel_gap end function _eval_best_rel_gap(lower_bound::Number, upper_bound::Number, tol::Number) if isapprox(lower_bound, upper_bound, atol = tol) return 0.0 elseif isapprox(upper_bound, 0.0; atol = tol) # zero upper bound case eps = 1 # shift factor return abs((upper_bound + eps) - (lower_bound + eps)) / (tol + abs(upper_bound) + eps) else return abs(upper_bound - lower_bound) / (tol + abs(upper_bound)) end end function measure_relaxed_deviation(m::Optimizer; sol = nothing) sol = something(sol, m.best_bound_sol) isempty(sol) && return dev = [] for k in keys(m.nonconvex_terms) y_idx = m.nonconvex_terms[k][:y_idx] y_hat = sol[y_idx] y_val = m.nonconvex_terms[k][:evaluator](m.nonconvex_terms[k], sol) push!( dev, (y_idx, abs(y_hat - y_val), y_hat, y_val, m.nonconvex_terms[k][:var_idxs]), ) end sort!(dev, by = x -> x[1]) for i in dev get_option(m, :log_level) > 199 && println( "Y-VAR$(i[1]): DIST=$(i[2]) || Y-hat = $(i[3]), Y-val = $(i[4]) || COMP $(i[5])", ) end return end """ discretization_to_bounds(d::Dict, l::Int) Same as [`update_var_bounds`](@ref) """ discretization_to_bounds(d::Dict, l::Int) = update_var_bounds(d, len = l) """ Update the data structure with feasible solution and its associated objective (if better) """ function update_incumbent(m::Optimizer, objval::Float64, sol::Vector) push!(m.logs[:obj], objval) if m.sense_orig == MOI.MAX_SENSE ? objval > m.best_obj : objval < m.best_obj m.best_obj = objval m.best_sol = sol m.detected_incumbent = true end return end """ variable_values(m::JuMP.Model) Prints values of all the variables after optimizing the original JuMP model. """ function variable_values(m::JuMP.Model) for var in all_variables(m) if isapprox(abs(JuMP.value(var)), 0, atol = 1E-6) println("$var = 0.0") else println("$var = $(round(JuMP.value(var), digits = 5))") end end return end """ Mention the variable type of the lifted term. This function is with limited functionality """ function resolve_lifted_var_type(var_types::Vector{Symbol}, operator::Symbol) if operator == :+ detector = [i in [:Bin, :Int] ? true : false for i in var_types] if length(detector) == 1 && detector[1] # Special case if :Bin in var_types return :Bin else return :Int end end prod(detector) && return :Int # o/w continous variables elseif operator == :* detector = [i == :Bin ? true : false for i in var_types] prod(detector) && return :Bin detector = [i in [:Bin, :Int] ? true : false for i in var_types] prod(detector) && return :Int # o/w continous variables end return :Cont end """ check_solution_history(m::Optimizer, ind::Int) Check if the solution is always the same within the last disc_consecutive_forbid iterations. Return `true` if solution has stalled. """ function check_solution_history(m::Optimizer, ind::Int) get_option(m, :disc_consecutive_forbid) == 0 && return false ((m.logs[:n_iter] - 1) < get_option(m, :disc_consecutive_forbid)) && return false sol_val = m.bound_sol_history[mod( m.logs[:n_iter] - 2, get_option(m, :disc_consecutive_forbid), )+1][ind] for i in 1:(get_option(m, :disc_consecutive_forbid)-1) search_pos = mod(m.logs[:n_iter] - 2 - i, get_option(m, :disc_consecutive_forbid)) + 1 !isapprox( sol_val, m.bound_sol_history[search_pos][ind]; atol = get_option(m, :disc_rel_width_tol), ) && return false end get_option(m, :log_level) > 99 && println("Consecutive bounding solution on VAR$(ind) obtained. Diverting...") return true end """ fix_domains(m::Optimizer) This function is used to fix variables to certain domains during the local solve process in the [`global_solve`](@ref). More specifically, it is used in [`local_solve`](@ref) to fix binary and integer variables to lower bound solutions and discretizing variables to the active domain according to lower bound solution. """ function fix_domains(m::Optimizer; discrete_sol = nothing, use_orig = false) discrete_sol !== nothing && @assert length(discrete_sol) >= m.num_var_orig l_var = [m.l_var_tight[i] for i in 1:m.num_var_orig] u_var = [m.u_var_tight[i] for i in 1:m.num_var_orig] for i in 1:m.num_var_orig if i in m.disc_vars && m.var_type[i] == :Cont point = if discrete_sol === nothing m.best_bound_sol[i] else discrete_sol[i] end PCnt = length(m.discretization[i]) - 1 for j in 1:PCnt if point >= (m.discretization[i][j] - get_option(m, :tol)) && (point <= m.discretization[i][j+1] + get_option(m, :tol)) @assert j < length(m.discretization[i]) use_orig ? l_var[i] = m.discretization[i][1] : l_var[i] = m.discretization[i][j] use_orig ? u_var[i] = m.discretization[i][end] : u_var[i] = m.discretization[i][j+1] break end end elseif m.var_type[i] == :Bin || m.var_type[i] == :Int if discrete_sol === nothing l_var[i] = round(m.best_bound_sol[i]) u_var[i] = round(m.best_bound_sol[i]) else l_var[i] = round(discrete_sol[i]) u_var[i] = round(discrete_sol[i]) end end end return l_var, u_var end """ _is_fully_convexified(m::Optimizer) """ function _is_fully_convexified(m::Optimizer) # Other more advanced convexification check goes here for term in keys(m.nonconvex_terms) if !m.nonconvex_terms[term][:convexified] @warn " Warning: Detected terms that is not convexified $(term[:lifted_constr_ref]), bounding model solver may report a error due to this" return else m.nonconvex_terms[term][:convexified] = false # Reset status for next iteration end end return end """ Collect active partition idx Need to be careful with the diverted point """ function get_active_partition_idx( discretization::Dict, val::Float64, idx::Int; tol = 1e-6, ) for j in 1:length(discretization[idx])-1 if val > discretization[idx][j] - tol && val < discretization[idx][j+1] + tol return j end end @warn " Warning: Activate parition not found [VAR$(idx)]. Returning default partition 1." return 1 end """ get_candidate_disc_vars(m:Optimizer) A built-in method for selecting variables for discretization. This function selects all candidate variables in the nonlinear terms for discretization, if under a threshold value of the number of nonlinear terms. """ function get_candidate_disc_vars(m::Optimizer; getoutput = false) # Pick variables that is bound width more than tolerance length if getoutput return [i for i in m.candidate_disc_vars] else m.disc_vars = [i for i in m.candidate_disc_vars] m.num_var_disc_mip = length(m.disc_vars) end return end function initialize_solution_pool(m::Optimizer, cnt::Int) s = Dict() s[:cnt] = cnt # Column dimension changing variable s[:len] = m.num_var_orig + m.num_var_linear_mip + m.num_var_nonlinear_mip # !! Be careful with the :vars when utilizing the dynamic discretization variable selection !! s[:vars] = [i for i in m.candidate_disc_vars if length(m.discretization[i]) > 2] s[:sol] = Vector{Vector}(undef, cnt) # Solution value s[:obj] = Vector{Float64}(undef, cnt) # Objecitve value s[:disc] = Vector{Dict}(undef, cnt) # Discretization s[:stat] = [:Alive for i in 1:cnt] # Solution status s[:iter] = [m.logs[:n_iter] for i in 1:cnt] # Iteration collected s[:ubstart] = [false for i in 1:cnt] # Solution used for ub multistart return s end """ Reconsideration required """ function ncvar_collect_arcs(m::Optimizer, nodes::Vector) arcs = Set() for k in keys(m.nonconvex_terms) if m.nonconvex_terms[k][:nonlinear_type] == :BILINEAR arc = [i.args[2] for i in k] length(arc) == 2 && push!(arcs, sort(arc)) elseif m.nonconvex_terms[k][:nonlinear_type] == :MONOMIAL @assert isa(m.nonconvex_terms[k][:var_idxs][1], Int) varidx = m.nonconvex_terms[k][:var_idxs][1] push!(arcs, [varidx; varidx]) elseif m.nonconvex_terms[k][:nonlinear_type] == :MULTILINEAR varidxs = m.nonconvex_terms[k][:var_idxs] for i in 1:length(varidxs) for j in 1:length(varidxs) if i != j push!(arcs, sort([varidxs[i]; varidxs[j]])) end end end if length(varidxs) == 1 push!(arcs, sort([varidxs[1]; varidxs[1]])) end # elseif m.nonconvex_terms[k][:nonlinear_type] in [:cos, :sin] # @assert length(m.nonconvex_terms[k][:var_idxs]) == 1 # var_idx = m.nonconvex_terms[k][:var_idxs][1] # push!(arcs, [var_idx; var_idx]) elseif m.nonconvex_terms[k][:nonlinear_type] in [:BININT, :BINLIN, :BINPROD] continue else error( "[EXCEPTION] Unexpected nonlinear term when building interaction graphs for min. vertex cover.", ) end end return arcs end """ """ function build_discvar_graph(m::Optimizer) # Collect the information of nonlinear terms in terms of arcs and nodes nodes = get_candidate_disc_vars(m, getoutput = true) arcs = ncvar_collect_arcs(m, nodes) # Collect integer variables for i in 1:m.num_var_orig if !(i in nodes) && m.var_type[i] == :Int push!(nodes, i) push!(arcs, [i; i]) end end nodes = collect(nodes) arcs = collect(arcs) return nodes, arcs end """ min_vertex_cover(m::Optimizer) `min_vertex_cover` chooses the variables based on the minimum vertex cover algorithm for the interaction graph of nonlinear terms which are adaptively partitioned for global optimization. This option can be activated by setting `disc_var_pick = 1`. """ function min_vertex_cover(m::Optimizer) nodes, arcs = build_discvar_graph(m) # Set up minimum vertex cover problem minvertex = Model(get_option(m, :mip_solver)) MOI.set(minvertex, MOI.TimeLimitSec(), 60.0) # Time limit for min vertex cover formulation JuMP.@variable(minvertex, 0 <= x[nodes] <= 1, Bin) JuMP.@constraint(minvertex, [a in arcs], x[a[1]] + x[a[2]] >= 1) JuMP.@objective(minvertex, Min, sum(x)) JuMP.optimize!(minvertex) # status = MOI.get(minvertex, MOI.TerminationStatus()) xVal = JuMP.value.(x) # Collecting required information m.num_var_disc_mip = Int(sum(xVal)) m.disc_vars = [ i for i in nodes if xVal[i] > get_option(m, :tol) && abs(m.u_var_tight[i] - m.l_var_tight[i]) >= get_option(m, :tol) ] return end function weighted_min_vertex_cover(m::Optimizer, distance::Dict) # Collect the graph information nodes, arcs = build_discvar_graph(m) # A little bit redundancy before disvec = [distance[i] for i in keys(distance) if i in m.candidate_disc_vars] disvec = abs.(disvec[disvec.>0.0]) isempty(disvec) ? heavy = 1.0 : heavy = 1 / minimum(disvec) weights = Dict() for i in m.candidate_disc_vars isapprox(distance[i], 0.0; atol = 1e-6) ? weights[i] = heavy : (weights[i] = (1 / distance[i])) (get_option(m, :log_level) > 100) && println("VAR$(i) WEIGHT -> $(weights[i]) ||| DISTANCE -> $(distance[i])") end # Set up minimum vertex cover problem minvertex = Model(get_option(m, :mip_solver)) MOI.set(minvertex, MOI.TimeLimitSec(), 60.0) # Set a timer to avoid waste of time in proving optimality JuMP.@variable(minvertex, 0 <= x[nodes] <= 1, Bin) for arc in arcs JuMP.@constraint(minvertex, x[arc[1]] + x[arc[2]] >= 1) end JuMP.@objective(minvertex, Min, sum(weights[i] * x[i] for i in nodes)) # Solve the minimum vertex cover JuMP.optimize!(minvertex) xVal = JuMP.value.(x) m.num_var_disc_mip = Int(sum(xVal)) m.disc_vars = [ i for i in nodes if xVal[i] > 0 && abs(m.u_var_tight[i] - m.l_var_tight[i]) >= get_option(m, :tol) ] get_option(m, :log_level) >= 99 && println("UPDATED DISC-VAR COUNT = $(length(m.disc_vars)) : $(m.disc_vars)") return end function _fetch_mip_solver_identifier(m::Optimizer; override = "") (get_option(m, :mip_solver) === nothing) && return m.mip_solver_id = _get_solver_name(m, :mip_solver, override) return end function _fetch_nlp_solver_identifier(m::Optimizer; override = "") (get_option(m, :nlp_solver) === nothing) && return m.nlp_solver_id = _get_solver_name(m, :nlp_solver, override) return end function _fetch_minlp_solver_identifier(m::Optimizer; override = "") (get_option(m, :minlp_solver) === nothing) && return m.minlp_solver_id = _get_solver_name(m, :minlp_solver, override) return end function _get_solver_name(m::Optimizer, key::Symbol, override::String) solver_string = override if isempty(override) solver = MOI.instantiate(get_option(m, key)) solver_string = try MOI.get(solver, MOI.SolverName()) catch "$(typeof(solver))" end end for name in ("Ipopt", "Gurobi", "CPLEX", "Juniper") if occursin(name, solver_string) return name end end return solver_string end """ set_mip_time_limit(m::Optimizer) An utility function used to dynamically regulate MILP solver time limits to fit Alpine solver's time limits. """ function set_mip_time_limit(m::Optimizer) time_limit = max(0.0, get_option(m, :time_limit) - m.logs[:total_time]) return MOI.set(m.model_mip, MOI.TimeLimitSec(), time_limit) end """ Follow the definition of terms to calculate the value of lifted terms """ function resolve_lifted_var_value(m::Optimizer, sol_vec::Array) @assert length(sol_vec) == m.num_var_orig sol_vec = [sol_vec; fill(NaN, m.num_var_linear_mip + m.num_var_nonlinear_mip)] for i in 1:length(m.term_seq) k = m.term_seq[i] if haskey(m.nonconvex_terms, k) lvar_idx = m.nonconvex_terms[k][:y_idx] sol_vec[lvar_idx] = m.nonconvex_terms[k][:evaluator](m.nonconvex_terms[k], sol_vec) elseif haskey(m.linear_terms, k) lvar_idx = m.linear_terms[k][:y_idx] sol_vec[lvar_idx] = m.linear_terms[k][:evaluator](m.linear_terms[k], sol_vec) else error("[RARE] Found homeless term key $(k) during bound resolution.") end end return sol_vec end # Unused functions # function amp_post_λ_upperbound( # m::Optimizer, # λ::Dict, # indices::Any, # dim::Tuple, # d::Dict, # tregions::Vector, # reg = [], # level = 0, # ) # if level == length(indices) # isempty(tregions[level]) && return # sliced_indices = # Set(collect_indices(λ[indices][:indices], 1, [reg[1]; reg[1] + 1], dim)) # for i in 2:length(reg) # sliced_indices = intersect( # sliced_indices, # Set(collect_indices(λ[indices][:indices], i, [reg[i], reg[i] + 1], dim)), # ) # end # for i in sliced_indices # JuMP.set_upper_bound(λ[indices][:vars][i], (1 / 2)^level) # end # return # end # for i in 1:length(tregions[level+1]) # push!(reg, tregions[level+1][i]) # amp_post_λ_upperbound(m, λ, indices, dim, d, tregions, reg, level + 1) # length(reg) < level && error("Something is wrong") # length(reg) > level && pop!(reg) # end # return # end # function amp_post_λ_upperbound(m::Optimizer, λ::Dict, indices::Any, ub::Float64) # for i in λ[indices][:vars] # JuMP.set_upper_bound(i, ub) # end # return # end # function amp_no_good_cut_α(m::Optimizer, α::Dict) # println("Global Incumbent solution objective = $(m.best_obj)") # for i in 1:m.bound_sol_pool[:cnt] # (m.bound_sol_pool[:stat][i] == :Cutoff) && (m.bound_sol_pool[:stat][i] = :Alive) # if m.best_obj < m.bound_sol_pool[:obj][i] && m.bound_sol_pool[:stat][i] == :Alive # no_good_idxs = keys(m.bound_sol_pool[:disc][i]) # no_good_size = length(no_good_idxs) - 1 # JuMP.@constraint( # m.model_mip, # sum(α[v][m.bound_sol_pool[:disc][i][v]] for v in no_good_idxs) <= # no_good_size # ) # get_option(m, :log_level) > 0 && println( # "!! GLOBAL cuts off POOL_SOL-$(i) POOL_OBJ=$(m.bound_sol_pool[:obj][i])!", # ) # m.bound_sol_pool[:stat][i] = :Cutoff # end # end # return # end ================================================ FILE: src/variable_bounds.jl ================================================ """ init_tight_bound(m::Optimizer) Initialize internal bound vectors (placeholders) to be used in other places. In this case, we don't have to mess with the original bound information. """ function init_tight_bound(m::Optimizer) m.l_var_tight = [ m.l_var_orig fill(-Inf, m.num_var_linear_mip + m.num_var_nonlinear_mip) ] m.u_var_tight = [ m.u_var_orig fill(Inf, m.num_var_linear_mip + m.num_var_nonlinear_mip) ] for i in 1:m.num_var_orig if m.var_type_orig[i] == :Bin m.l_var_tight[i] = 0.0 m.u_var_tight[i] = 1.0 # elseif m.var_type_orig[i] == :Int # m.l_var_tight[i] = floor(m.l_var_tight[i]) # m.u_var_tight[i] = ceil(m.u_var_tight[i]) end end return end """ init_disc(m::Optimizer) This 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. The output is a dictionary with MathProgBase variable indices keys attached to the :Optimizer.discretization. """ function init_disc(m::Optimizer) for var in 1:(m.num_var_orig+m.num_var_linear_mip+m.num_var_nonlinear_mip) if m.var_type[var] in [:Bin, :Cont] lb = m.l_var_tight[var] ub = m.u_var_tight[var] m.discretization[var] = [lb, ub] else error( "[EXCEPTION] Unexpected variable type when initializing discretization dictionary.", ) end end return end """ _get_discretization_dict(m::Optimizer, lbs::Vector{Float64}, ubs::Vector{Float64}) Utility functions to convert bounds vectors to Dictionary based structures that are more suitable for partition operations. """ function _get_discretization_dict( m::Optimizer, lbs::Vector{Float64}, ubs::Vector{Float64}, ) @assert length(lbs) == length(ubs) var_discretization = Dict() total_var_cnt = m.num_var_orig + m.num_var_linear_mip + m.num_var_nonlinear_mip for var in 1:total_var_cnt if length(lbs) == total_var_cnt lb = lbs[var] ub = ubs[var] else lb = -Inf ub = Inf end var_discretization[var] = [lb, ub] end return var_discretization end """ flatten_discretization(discretization::Dict) Utility functions to eliminate all partition on discretizing variable and keep the loose bounds. """ function flatten_discretization(discretization::Dict; kwargs...) flatten_discretization = Dict() for var in keys(discretization) flatten_discretization[var] = [discretization[var][1], discretization[var][end]] end return flatten_discretization end """ detect_bound_from_aff(m::Optimizer) Detect bounds from parse affine constraint. This function examines the one variable constraints such as x >= 5, x <= 5 or x == 5 and fetch the information to m.l_var_tight and m.u_var_tight. """ function bound_propagation(m::Optimizer) exhausted = false infeasible = false tol = get_option(m, :tol) while !exhausted exhausted = true for aff in m.bounding_constr_mip for i in 1:length(aff[:vars]) var_idx = aff[:vars][i].args[2] var_coef = aff[:coefs][i] @assert (isa(var_idx, Float64) || isa(var_idx, Int)) if aff[:sense] == :(==) && var_coef > 0.0 eval_l_bound = aff[:rhs] / var_coef eval_u_bound = aff[:rhs] / var_coef for j in 1:length(aff[:vars]) if j != i && aff[:coefs][j] * var_coef > 0.0 # same sign (eval_l_bound != -Inf) && ( eval_l_bound -= abs(aff[:coefs][j] / var_coef) * m.u_var_tight[aff[:vars][j].args[2]] ) (eval_u_bound != Inf) && ( eval_u_bound -= abs(aff[:coefs][j] / var_coef) * m.l_var_tight[aff[:vars][j].args[2]] ) elseif j != i && aff[:coefs][j] * var_coef < 0.0 # different sign (eval_l_bound != -Inf) && ( eval_l_bound += abs(aff[:coefs][j] / var_coef) * m.l_var_tight[aff[:vars][j].args[2]] ) (eval_u_bound != Inf) && ( eval_u_bound += abs(aff[:coefs][j] / var_coef) * m.u_var_tight[aff[:vars][j].args[2]] ) end end if eval_l_bound > m.l_var_tight[var_idx] + tol exhausted = false m.l_var_tight[var_idx] = eval_l_bound (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] LB $(m.l_var_tight[var_idx]) evaluated from constraint", ) elseif eval_l_bound > m.u_var_tight[var_idx] + tol (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] Infeasibility detection during bound propagation", ) infeasible = true break end if eval_u_bound < m.u_var_tight[var_idx] - tol exhausted = false m.u_var_tight[var_idx] = eval_u_bound (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] UB $(m.u_var_tight[var_idx]) evaluated from constraints", ) elseif eval_u_bound < m.l_var_tight[var_idx] - tol (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] Infeasibility detection during bound propagation", ) infeasible = true break end elseif aff[:sense] == :(>=) && var_coef > 0.0 # a($) - by + cz >= 100, y∈[1,10], z∈[2,50], a,b,c > 0 eval_bound = aff[:rhs] / var_coef for j in 1:length(aff[:vars]) if j != i && aff[:coefs][j] > 0.0 eval_bound -= abs(aff[:coefs][j] / var_coef) * m.u_var_tight[aff[:vars][j].args[2]] elseif j != i aff[:coefs][j] < 0.0 eval_bound += abs(aff[:coefs][j] / var_coef) * m.l_var_tight[aff[:vars][j].args[2]] end (eval_bound == -Inf) && break end if eval_bound > m.l_var_tight[var_idx] + tol exhausted = false m.l_var_tight[var_idx] = eval_bound (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] LB $(m.l_var_tight[var_idx]) evaluated from constraints", ) elseif eval_bound > m.u_var_tight[var_idx] + tol (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] Infeasibility detection during bound propagation", ) infeasible = true break end elseif aff[:sense] == :(>=) && var_coef < 0.0 # -a($) - by + cz >= 100, y∈[1,10], z∈[2,50], a,b,c > 0 eval_bound = aff[:rhs] / var_coef for j in 1:length(aff[:vars]) if j != i && aff[:coefs][j] > 0.0 eval_bound += abs(aff[:coefs][j] / var_coef) * m.u_var_tight[aff[:vars][j].args[2]] elseif j != i && aff[:coefs][j] < 0.0 eval_bound -= abs(aff[:coefs][j] / var_coef) * m.l_var_tight[aff[:vars][j].args[2]] end (eval_bound == Inf) && break end if eval_bound < m.u_var_tight[var_idx] - tol exhausted = false m.u_var_tight[var_idx] = eval_bound (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] UB $(m.u_var_tight[var_idx]) evaluated from constraints", ) elseif eval_bound < m.l_var_tight[var_idx] - tol (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] Infeasibility detection during bound propagation", ) infeasible = true break end elseif (aff[:sense] == :(<=) && aff[:coefs][i] > 0.0) # a($) - by + cz <= 100, y∈[1,10], z∈[2,50], a,b,c > 0 eval_bound = aff[:rhs] / var_coef for j in 1:length(aff[:vars]) if j != i && aff[:coefs][j] > 0.0 eval_bound -= abs(aff[:coefs][j] / var_coef) * m.l_var_tight[aff[:vars][j].args[2]] elseif j != i && aff[:coefs][j] < 0.0 eval_bound += abs(aff[:coefs][j] / var_coef) * m.u_var_tight[aff[:vars][j].args[2]] end (eval_bound == Inf) && break end if eval_bound < m.u_var_tight[var_idx] - tol exhausted = false m.u_var_tight[var_idx] = eval_bound (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] UB $(m.u_var_tight[var_idx]) evaluated from constraints", ) elseif eval_bound < m.l_var_tight[var_idx] - tol (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] Infeasibility detection during bound propagation", ) infeasible = true break end elseif (aff[:sense] == :(<=) && aff[:coefs][i] < 0.0) # -a($) - by + cz <= 100, y∈[1,10], z∈[2,50], a,b,c > 0 eval_bound = aff[:rhs] / var_coef for j in 1:length(aff[:vars]) if j != i && aff[:coefs][j] > 0.0 eval_bound += abs(aff[:coefs][j] / var_coef) * m.l_var_tight[aff[:vars][j].args[2]] elseif j != i && aff[:coefs][j] < 0.0 eval_bound -= abs(aff[:coefs][j] / var_coef) * m.u_var_tight[aff[:vars][j].args[2]] end (eval_bound == -Inf) && break end if eval_bound > m.l_var_tight[var_idx] + tol exhausted = false m.l_var_tight[var_idx] = eval_bound (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] LB $(m.l_var_tight[var_idx]) evaluated from constraints", ) elseif eval_bound > m.u_var_tight[var_idx] + tol (get_option(m, :log_level) > 199) && println( "[VAR$(var_idx)] Infeasibility detection during bound propagation", ) infeasible = true break end end end end (exhausted == true && get_option(m, :log_level) > 99) && println("Initial constraint-based bound evaluation exhausted...") end if infeasible m.status[:bounding_solve] = MOI.INFEASIBLE @warn "[INFEASIBLE] Infeasibility detected via bound propagation" end return infeasible end """ Recategorize :Int variables to :Bin variables if variable bounds are [0,1] """ function recategorize_var(m::Optimizer) for i in 1:m.num_var_orig if m.var_type_orig[i] == :Int && m.l_var_orig[i] == 0.0 && m.u_var_orig[i] == 1.0 m.var_type_orig[i] = :Bin m.var_type[i] = :Bin end end return end """ resolve_var_bounds(m::Optimizer) Resolve the bounds of the lifted variable using the information in l_var_tight and u_var_tight. This method only takes in known or trivial bounds information to deduce lifted variable bounds and to potentially avoid the cases of infinity bounds. """ function resolve_var_bounds(m::Optimizer) # Basic Bound propagation if get_option(m, :presolve_bp) setproperty!(m, :presolve_infeasible, bound_propagation(m)) # Fetch bounds from constraints end # Resolve unbounded variables in the original formulation resolve_inf_bounds(m) # Added sequential bound resolving process base on DFS process, which ensures all bounds are secured. # Increased complexity from linear to square but a reasonable amount # Potentially, additional mapping can be applied to reduce the complexity for i in 1:length(m.term_seq) k = m.term_seq[i] if haskey(m.nonconvex_terms, k) m.nonconvex_terms[k][:bound_resolver](m, k) elseif haskey(m.linear_terms, k) basic_linear_bounds(m, k) else error("Found homeless term key $(k) during bound resolution.") end end return end """ Resolving Inf variable bounds since Alpine relies on finite bounds to construct relaxations """ function resolve_inf_bounds(m::Optimizer) warnuser = false infcount_l = 0 infcount_u = 0 # Only specify necessary bounds for i in 1:length(m.l_var_orig) if m.l_var_tight[i] == -Inf warnuser = true m.l_var_tight[i] = -get_option(m, :large_bound) infcount_l += 1 end if m.u_var_tight[i] == Inf warnuser = true m.u_var_tight[i] = get_option(m, :large_bound) infcount_u += 1 end end infcount = min(infcount_l, infcount_u) if infcount == 1 warnuser && println( "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.", ) elseif infcount > 1 warnuser && println( "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.", ) end return end """ resolve_var_bounds(nonconvex_terms::Dict, discretization::Dict) For discretization to be performed, we do not allow a variable being discretized to have infinite bounds. The lifted/auxiliary variables may have infinite bounds and the function infers bounds on these variables. This process can help speed up the subsequent solve times. Only used in presolve bound tightening """ function resolve_var_bounds(m::Optimizer, d::Dict; kwargs...) # Added sequential bound resolving process base on DFS process, which ensures all bounds are accurate. # Potentially, additional mapping can be applied to reduce the complexity for i in 1:length(m.term_seq) k = m.term_seq[i] if haskey(m.nonconvex_terms, k) nlk = k if m.nonconvex_terms[nlk][:nonlinear_type] in ALPINE_C_MONOMIAL d = basic_monomial_bounds(m, nlk, d) elseif m.nonconvex_terms[nlk][:nonlinear_type] in [:BINPROD] d = basic_binprod_bounds(m, nlk, d) elseif m.nonconvex_terms[nlk][:nonlinear_type] in [:BINLIN] d = basic_binlin_bounds(m, nlk, d) else error("EXPECTED ERROR : NEED IMPLEMENTATION") end elseif haskey(m.linear_terms, k) d = basic_linear_bounds(m, k, d) else error( "Found a homeless term key $(k) during bound resolution im resolve_var_bounds.", ) end end return d end """ update_var_bounds(m::Optimizer, discretization::Dict; len::Float64=length(keys(discretization))) This 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. Output:: l_var::Vector{Float64}, u_var::Vector{Float64} """ function update_var_bounds(discretization::Dict{Any,Any}; kwargs...) options = Dict(kwargs) haskey(options, :len) ? len = options[:len] : len = length(keys(discretization)) l_var = fill(-Inf, len) u_var = fill(Inf, len) for var_idx in keys(discretization) l_var[var_idx] = discretization[var_idx][1] u_var[var_idx] = discretization[var_idx][end] end return l_var, u_var end # ================================================================= unused, but needs testing # """ # resolve_closed_var_bounds(m::Optimizer) # This function seeks variable with tight bounds (by presolve_bt_width_tol) by checking .l_var_tight and .u_var_tight. # If a variable is found to be within a sufficiently small interval then no discretization will be performed on this variable # and the .discretization will be cleared with the tight bounds for basic McCormick operation if necessary. # """ # function resolve_closed_var_bounds(m::Optimizer; kwargs...) # for var in m.candidate_disc_vars # if abs(m.l_var_tight[var] - m.u_var_tight[var]) < # get_option(m, :presolve_bt_width_tol) # Closed Bound Criteria # deleteat!(m.disc_vars, findfirst(m.disc_vars, var)) # Clean nonconvex_terms by deleting the info # m.discretization[var] = [m.l_var_tight[var], m.u_var_tight[var]] # Clean up the discretization for basic McCormick if necessary # end # end # return # end ================================================ FILE: test/runtests.jl ================================================ using JuMP using Test import Alpine import HiGHS import Ipopt import Juniper import Pavito import Random const _EXAMPLES_DIR = joinpath(@__DIR__, "..", "examples", "MINLPs") for file in readdir(_EXAMPLES_DIR) include(joinpath(_EXAMPLES_DIR, file)) end const IPOPT = MOI.OptimizerWithAttributes( Ipopt.Optimizer, MOI.Silent() => true, "sb" => "yes", "max_iter" => 9999, ) const HIGHS = MOI.OptimizerWithAttributes( HiGHS.Optimizer, "presolve" => "on", "log_to_console" => false, # "small_matrix_value" => 1e-12, # "allow_unbounded_or_infeasible" => true, ) const JUNIPER = MOI.OptimizerWithAttributes( Juniper.Optimizer, MOI.Silent() => true, "mip_solver" => HIGHS, "nl_solver" => IPOPT, ) const PAVITO = MOI.OptimizerWithAttributes( Pavito.Optimizer, MOI.Silent() => true, "mip_solver" => HIGHS, "cont_solver" => IPOPT, "mip_solver_drives" => false, ) function _build(model::JuMP.Model) JuMP.set_optimize_hook(model, MOI.Utilities.attach_optimizer) JuMP.optimize!(model) JuMP.JuMP.set_optimize_hook(model, nothing) alpine = JuMP.backend(model).optimizer.model Alpine.load!(alpine) return alpine end # Perform Tests @testset "Alpine tests" begin include(joinpath(@__DIR__, "test_solver.jl")) include(joinpath(@__DIR__, "test_expression.jl")) include(joinpath(@__DIR__, "test_algorithm.jl")) include(joinpath(@__DIR__, "test_utility.jl")) end ================================================ FILE: test/test_algorithm.jl ================================================ @testset " Validation Test || AMP-TMC || basic solve || examples/nlp3.jl (2 iterations)" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => false, # "monomial_convexhull" => false, "presolve_bp" => true, "max_iter" => 2, "presolve_bt_width_tol" => 1e-3, "presolve_bt" => false, "partition_scaling_factor" => 10, "disc_var_pick" => 0, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 7049.247897696512; atol = 1e-4) @test MOI.get(m, Alpine.NumberOfIterations()) == 2 end @testset " Validation Test || AMP-TMC || minimum-vertex solving || examples/nlp3.jl (3 iterations)" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => false, # "monomial_convexhull" => false, "presolve_bp" => true, "disc_var_pick" => 1, "max_iter" => 2, "partition_scaling_factor" => 10, "presolve_bt_width_tol" => 1e-3, "presolve_bt" => false, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 7049.247897696512; atol = 1e-4) @test MOI.get(m, Alpine.NumberOfIterations()) == 2 end @testset " Validation Test || BT-AMP-TMC || basic solve || examples/nlp3.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => false, "log_level" => 100, "max_iter" => 2, "partition_scaling_factor" => 10, "presolve_bt_width_tol" => 1e-3, "presolve_bt_bound_tol" => 1e-1, "presolve_bt" => true, "presolve_bt_algo" => 1, "presolve_bp" => true, "presolve_bt_max_iter" => 2, "presolve_track_time" => true, "disc_var_pick" => max_cover_var_picker, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test MOI.get(m, Alpine.NumberOfIterations()) == 2 @test MOI.get(m, Alpine.NumberOfPresolveIterations()) == 2 vars = all_variables(m) LB = [100, 1000, 1000, 10, 150.2, 10, 35.4, 168] UB = [4573.6, 5547.8, 5913.3, 332.4, 551, 390, 571.1, 638.7] @test isapprox(MOI.get.(m, Alpine.TightenedLowerBound(), vars), LB, atol = 1E-6) @test isapprox(MOI.get.(m, Alpine.TightenedUpperBound(), vars), UB, atol = 1E-6) end # FIXME Pavito terminates with `NUMERICAL_ERROR` on Julia v1.0: @testset " Validation Test || PBT-AMP-TMC || basic solve || examples/nlp3.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => false, "log_level" => 100, "max_iter" => 2, "partition_scaling_factor" => 10, "presolve_bt" => true, "presolve_bt_width_tol" => 1e-3, "presolve_bt_bound_tol" => 1e-1, "presolve_bt_algo" => 2, "presolve_bp" => true, "presolve_bt_max_iter" => 2, "disc_var_pick" => max_cover_var_picker, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test MOI.get(m, Alpine.NumberOfIterations()) == 2 end @testset " Validation Test || AMP-CONV || basic solve || examples/nlp1.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, # "bilinear_convexhull" => true, # "monomial_convexhull" => true, "presolve_bt" => false, "presolve_bp" => true, "partition_scaling_factor" => 12, "max_iter" => 1, ) m = nlp1(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 58.38367169858795; atol = 1e-5) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 end @testset " Validation Test || AMP-CONV || basic solve || examples/nlp3.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => true, # "monomial_convexhull" => true, "presolve_bt" => false, "presolve_bp" => false, "partition_scaling_factor" => 14, "max_iter" => 4, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 7049.24789; atol = 1e-4) @test MOI.get(m, Alpine.NumberOfIterations()) == 4 end @testset " Validation Test || AMP || basic solve || examples/circle.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, "disc_abs_width_tol" => 1e-3, "partition_scaling_factor" => 8, "max_iter" => 6, "presolve_bt" => false, "log_level" => 100, ) m = circle(solver = test_solver) # This is fixed in Alpine - TODO (odow): cycling detected in Pavito when disc_abs_width_tol = 1E-2 JuMP.optimize!(m) @test isapprox(objective_value(m), 1.4142135534556992; atol = 1e-3) end @testset " Validation Test || AMP-CONV-FACET || basic solve || examples/nlp3.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => true, # "monomial_convexhull" => true, "presolve_bt" => false, "presolve_bp" => true, "convhull_formulation" => "facet", "max_iter" => 3, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test isapprox(objective_value(m), 7049.247897696188; atol = 1e-4) @test 6650 <= objective_bound(m) <= 7049 @test MOI.get(m, Alpine.NumberOfIterations()) == 3 end @testset " Validation Test || AMP || multi4N || N = 2 || exprmode=1:11" begin n_instances = 5 objValVec = 2.0 * ones(n_instances) for i in 1:n_instances test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "max_iter" => 4, "partition_scaling_factor" => 4, "presolve_bp" => false, "presolve_bt" => false, "log_level" => 1, ) m = multi4N(solver = test_solver, N = 2, exprmode = i) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), objValVec[i]; atol = 1e-3) end end @testset " Validation Test || AMP || multi2 || exprmode=1:11" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "max_iter" => 5, "presolve_bt" => false, "log_level" => 1, ) m = multi2(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OPTIMAL @test primal_status(m) == MOI.FEASIBLE_POINT @test dual_status(m) == MOI.NO_SOLUTION @test raw_status(m) isa String @test isapprox(objective_value(m), 0.92906489; atol = 1e-3) end @testset " Validation Test || AMP || multi3N || N = 2 || exprmode=1:11" begin n_instances = 3 objValVec = 2.0 * ones(n_instances) objBoundVec = Any[2.97186, 3.85492, 4.23375] for i in 1:n_instances test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "max_iter" => 4, "partition_scaling_factor" => 4, "presolve_bp" => false, "presolve_bt" => false, "log_level" => 1, ) m = multi3N(solver = test_solver, N = 2, exprmode = i) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), objValVec[i]; atol = 1e-3) @test objective_bound(m) <= objBoundVec[i] + 1e-3 end end @testset " Validation Test || AMP || multiKND || K = 3, N = 3, D = 0 " begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "max_iter" => 3, "partition_scaling_factor" => 4, "presolve_bp" => false, "presolve_bt" => false, "log_level" => 1, ) m = multiKND(solver = test_solver, randomub = 50, K = 3, N = 3, D = 0) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 3.0000000824779454; atol = 1e-3) @test isapprox(objective_bound(m), 12.054604248046875; atol = 1e-3) end @testset " Validation Test || AMP-CONV-FACET || basic solve || examples/nlp3.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => true, # "monomial_convexhull" => true, "presolve_bt" => false, "presolve_bp" => false, "max_iter" => 3, "partition_scaling_factor" => 4, "convhull_formulation" => "facet", "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 7049.247897696188; atol = 1e-4) @test isapprox(objective_bound(m), 5871.530692199214; atol = 1E-5) @test MOI.get(m, Alpine.NumberOfIterations()) == 3 end @testset " Validation Test || AMP || PARTITION-SCALING-FACTOR || examples/nlp3.jl " begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "partition_scaling_factor_branch" => false, "partition_scaling_factor" => 18, "max_iter" => 1, "presolve_bp" => true, "presolve_bt" => false, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 @test MOI.get(m, MOI.RawOptimizerAttribute("partition_scaling_factor")) == 18 end @testset " Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/nlp3.jl " begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "partition_scaling_factor_branch" => true, "max_iter" => 1, "presolve_bp" => true, "presolve_bt" => false, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 @test MOI.get(m, MOI.RawOptimizerAttribute("partition_scaling_factor")) == 14 end @testset " Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/castro2m2.jl " begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "partition_scaling_factor_branch" => true, "max_iter" => 1, "presolve_bp" => true, "presolve_bt" => false, "log_level" => 100, ) m = castro2m2(solver = test_solver) JuMP.optimize!(m) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 @test MOI.get(m, MOI.RawOptimizerAttribute("partition_scaling_factor")) == 8 end @testset " Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi3N.jl exprmode=2" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "partition_scaling_factor_branch" => true, "max_iter" => 1, "presolve_bp" => true, "presolve_bt" => false, "log_level" => 100, ) m = multi3N(solver = test_solver, N = 3, exprmode = 1) JuMP.optimize!(m) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 @test MOI.get(m, MOI.RawOptimizerAttribute("partition_scaling_factor")) == 16 end @testset " Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi3N.jl exprmode=2" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "partition_scaling_factor_branch" => true, "max_iter" => 1, "presolve_bp" => false, "presolve_bt" => false, "log_level" => 100, ) m = multi3N(solver = test_solver, N = 3, exprmode = 1) JuMP.optimize!(m) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 @test MOI.get(m, MOI.RawOptimizerAttribute("partition_scaling_factor")) == 20 end @testset " Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi4N.jl exprmode=1" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "partition_scaling_factor_branch" => true, "max_iter" => 1, "presolve_bp" => true, "presolve_bt" => false, "log_level" => 100, ) m = multi4N(solver = test_solver, N = 2, exprmode = 1) JuMP.optimize!(m) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 @test MOI.get(m, MOI.RawOptimizerAttribute("partition_scaling_factor")) == 12 end @testset " Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi4N.jl exprmode=2" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "partition_scaling_factor_branch" => true, "max_iter" => 1, "presolve_bp" => false, "presolve_bt" => false, "log_level" => 100, ) m = multi4N(solver = test_solver, N = 2, exprmode = 1) JuMP.optimize!(m) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 @test MOI.get(m, MOI.RawOptimizerAttribute("partition_scaling_factor")) == 20 end @testset " Validation Test || AMP || PARTITION-SCALING-FACTOR-BRANCH || examples/multi4N.jl exprmode=2" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_abs_width_tol" => 1e-2, "partition_scaling_factor_branch" => true, "max_iter" => 1, "presolve_bp" => true, "presolve_bt" => false, "log_level" => 100, ) m = multi4N(solver = test_solver, N = 2, exprmode = 2) JuMP.optimize!(m) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 @test MOI.get(m, MOI.RawOptimizerAttribute("partition_scaling_factor")) == 20 end @testset "Operator :: bmpl && binlin && binprod solve test I" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => PAVITO, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "presolve_bt" => false, "log_level" => 100, ) m = bpml_lnl(solver = test_solver) JuMP.optimize!(m) @test isapprox(objective_value(m), 0.3; atol = 1e-6) alpine = JuMP.backend(m).optimizer.model @test haskey(alpine.nonconvex_terms, Expr[:(x[1]), :(x[6])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[2]), :(x[7])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[3]), :(x[8])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[4]), :(x[9])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[5]), :(x[10])]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[9])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[10])]][:nonlinear_type] == :BINLIN end @testset "Operator :: bmpl && binlin && binprod solve test II" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => JUNIPER, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "presolve_bt" => false, "partition_scaling_factor" => 4, "log_level" => 100, ) m = bpml_binl(solver = test_solver) # FIXME: Deactivating this until Juniper v0.9.0's numerical issues are fixed. # JuMP.optimize!(m) # @test isapprox(JuMP.objective_value(m), 22812.76415926; atol=1e-6) # alpine = JuMP.backend(m).optimizer.model alpine = _build(m) @test haskey(alpine.nonconvex_terms, Expr[:(x[6]), :(x[7])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[7]), :(x[8])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[8]), :(x[9])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[9]), :(x[10])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[10]), :(x[6])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[1]), :(x[11])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[2]), :(x[13])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[3]), :(x[15])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[4]), :(x[17])]) @test haskey(alpine.nonconvex_terms, Expr[:(x[5]), :(x[19])]) @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[7]), :(x[8])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[8]), :(x[9])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[13])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[15])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[17])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[19])]][:nonlinear_type] == :BINLIN end @testset "Embedding Test || AMP-CONV || basic solve || examples/nlp1.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, # "bilinear_convexhull" => true, # "monomial_convexhull" => true, "presolve_bt" => false, "presolve_bp" => true, "convhull_ebd" => true, "max_iter" => 1, "partition_scaling_factor" => 4, "log_level" => 100, ) m = nlp1(solver = test_solver) JuMP.optimize!(m) alp = JuMP.backend(m).optimizer.model @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 58.38367169858795; atol = 1e-4) @test isapprox(alp.best_bound, 52.9702, atol = 1E-4) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 end @testset "Embedding IBS Test || AMP-CONV || basic solve || examples/nlp1.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, # "bilinear_convexhull" => true, # "monomial_convexhull" => true, "presolve_bt" => false, "presolve_bp" => true, "convhull_ebd" => true, "convhull_ebd_ibs" => true, "partition_scaling_factor" => 8, "max_iter" => 1, "log_level" => 100, ) m = nlp1(solver = test_solver) JuMP.optimize!(m) alp = JuMP.backend(m).optimizer.model @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 58.38367169858795; atol = 1e-5) @test isapprox(alp.best_bound, 57.01, atol = 1E-2) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 end @testset "Embedding IBS Test || AMP-CONV || basic solve || examples/nlp3.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => true, # "monomial_convexhull" => true, "presolve_bt" => false, "presolve_bp" => false, "convhull_ebd" => true, "convhull_ebd_ibs" => true, "max_iter" => 3, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) alp = JuMP.backend(m).optimizer.model @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 7049.247897696188; atol = 1e-5) @test MOI.get(m, Alpine.NumberOfIterations()) == 3 @test isapprox(alp.best_bound, 6893.2067, atol = 1E-4) end @testset "Embedding IBS Test || AMP || special problem || ... " begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, "disc_abs_width_tol" => 1e-3, "partition_scaling_factor" => 8, "max_iter" => 6, "presolve_bt" => false, "presolve_bp" => true, "presolve_bt_algo" => 1, "presolve_bt_bound_tol" => 1e-1, "convhull_ebd" => true, "convhull_ebd_ibs" => true, "log_level" => 100, ) m = circle(solver = test_solver) # This is fixed in Alpine - TODO(odow): mixed-integer cycling detected, terminating Pavito JuMP.optimize!(m) @test isapprox(objective_value(m), 1.41421355; atol = 1e-3) end @testset "Embedding LINK Test || AMP-CONV || basic solve || examples/nlp3.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => true, # "monomial_convexhull" => true, "presolve_bt" => false, "presolve_bp" => false, "convhull_ebd" => true, "convhull_ebd_link" => true, "partition_scaling_factor" => 10, "max_iter" => 3, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 7049.247897696188; atol = 1e-4) @test MOI.get(m, Alpine.NumberOfIterations()) == 3 end @testset "Algorithm Logic Test || castro4m2 || 1 iteration || Error case" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "max_iter" => 1, "presolve_bt" => false, "partition_scaling_factor" => 10, "log_level" => 100, ) m = castro4m2(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT end @testset " Algorithm Logic Test || blend029_gl || 3 iterations || Infeasible Case" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => PAVITO, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "presolve_bp" => true, "disc_var_pick" => 1, "log_level" => 100, "max_iter" => 3, "partition_scaling_factor" => 10, "presolve_bt_width_tol" => 1e-3, "presolve_bt" => false, ) m = blend029_gl(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OTHER_LIMIT @test MOI.get(m, Alpine.NumberOfIterations()) == 3 @test objective_bound(m) <= 14.0074 end @testset "Convex Model Solve" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, "max_iter" => 1, "presolve_bt" => false, "log_level" => 100, ) m = convex_solve(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OPTIMAL end @testset "Uniform partitioning" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_add_partition_method" => "uniform", "disc_uniform_rate" => 10, "max_iter" => 1, "presolve_bt" => false, "time_limit" => 100000, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) @test isapprox(objective_bound(m), 6561.7841; atol = 1e-3) end @testset "Algorithm Test with binprod terms" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => PAVITO, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, # "bilinear_convexhull" => true, # "monomial_convexhull" => true, "presolve_bp" => true, "presolve_bt" => false, "partition_scaling_factor" => 10, "log_level" => 100, ) m = binprod_nlp3(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OPTIMAL @test isapprox(objective_value(m), 3651.020370626844; rtol = 1e-4) @test isapprox(objective_bound(m), 3650.786358471944; rtol = 1e-4) alpine = JuMP.backend(m).optimizer.model @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4])]][:y_idx] == 19 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4])]][:id] == 6 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4])]][:lifted_constr_ref] == :(x[19] == x[2] * x[4]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:y_idx] == 25 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:id] == 12 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:lifted_constr_ref] == :(x[25] == x[3] * x[8]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[8])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5])]][:y_idx] == 22 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5])]][:id] == 9 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5])]][:lifted_constr_ref] == :(x[22] == x[3] * x[5]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[19])]][:y_idx] == 20 @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[19])]][:id] == 7 @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[19])]][:lifted_constr_ref] == :(x[20] == x[12] * x[19]) @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[19])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[4])]][:y_idx] == 14 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[4])]][:id] == 1 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[4])]][:lifted_constr_ref] == :(x[14] == x[9] * x[4]) @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[4])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:y_idx] == 17 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:id] == 4 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:lifted_constr_ref] == :(x[17] == x[1] * x[6]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[11]), :(x[5])]][:y_idx] == 16 @test alpine.nonconvex_terms[Expr[:(x[11]), :(x[5])]][:id] == 3 @test alpine.nonconvex_terms[Expr[:(x[11]), :(x[5])]][:lifted_constr_ref] == :(x[16] == x[11] * x[5]) @test alpine.nonconvex_terms[Expr[:(x[11]), :(x[5])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[11])]][:y_idx] == 30 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[11])]][:id] == 17 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[11])]][:lifted_constr_ref] == :(x[30] == x[10] * x[11]) @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[11])]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[11])]][:y_idx] == 29 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[11])]][:id] == 16 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[11])]][:lifted_constr_ref] == :(x[29] == x[9] * x[10] * x[11]) @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[11])]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:y_idx] == 21 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:id] == 8 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:lifted_constr_ref] == :(x[21] == x[2] * x[7]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[7])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[13])]][:y_idx] == 32 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[13])]][:id] == 19 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[13])]][:lifted_constr_ref] == :(x[32] == x[9] * x[13]) @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[13])]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:y_idx] == 15 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:id] == 2 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:lifted_constr_ref] == :(x[15] == x[10] * x[6]) @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[6])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[12])]][:y_idx] == 33 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[12])]][:id] == 20 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[12])]][:lifted_constr_ref] == :(x[33] == x[10] * x[12]) @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[12])]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[:(x[27]), :(x[5])]][:y_idx] == 28 @test alpine.nonconvex_terms[Expr[:(x[27]), :(x[5])]][:id] == 15 @test alpine.nonconvex_terms[Expr[:(x[27]), :(x[5])]][:lifted_constr_ref] == :(x[28] == x[27] * x[5]) @test alpine.nonconvex_terms[Expr[:(x[27]), :(x[5])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[25])]][:y_idx] == 26 @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[25])]][:id] == 13 @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[25])]][:lifted_constr_ref] == :(x[26] == x[13] * x[25]) @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[25])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[12])]][:y_idx] == 27 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[12])]][:id] == 14 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[12])]][:lifted_constr_ref] == :(x[27] == x[9] * x[12]) @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[12])]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[13])]][:y_idx] == 23 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[13])]][:id] == 10 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[13])]][:lifted_constr_ref] == :(x[23] == x[10] * x[13]) @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[13])]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[:(x[23]), :(x[22])]][:y_idx] == 24 @test alpine.nonconvex_terms[Expr[:(x[23]), :(x[22])]][:id] == 11 @test alpine.nonconvex_terms[Expr[:(x[23]), :(x[22])]][:lifted_constr_ref] == :(x[24] == x[23] * x[22]) @test alpine.nonconvex_terms[Expr[:(x[23]), :(x[22])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[13])]][:y_idx] == 31 @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[13])]][:id] == 18 @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[13])]][:lifted_constr_ref] == :(x[31] == x[12] * x[13]) @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[13])]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[17])]][:y_idx] == 18 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[17])]][:id] == 5 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[17])]][:lifted_constr_ref] == :(x[18] == x[9] * x[17]) @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[17])]][:nonlinear_type] == :BINLIN @test alpine.bounding_constr_mip[1][:rhs] == 1.0 @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[14]), :(x[15])] @test alpine.bounding_constr_mip[1][:coefs] == Any[0.0025, 0.0025] @test alpine.bounding_constr_mip[1][:sense] == :(<=) @test alpine.bounding_constr_mip[1][:cnt] == 2 @test alpine.bounding_constr_mip[2][:rhs] == 1.0 @test alpine.bounding_constr_mip[2][:vars] == Any[:(x[14]), :(x[5]), :(x[7])] @test alpine.bounding_constr_mip[2][:coefs] == Any[-0.0025, 0.0025, 0.0025] @test alpine.bounding_constr_mip[2][:sense] == :(<=) @test alpine.bounding_constr_mip[2][:cnt] == 3 @test alpine.bounding_constr_mip[3][:rhs] == 1.0 @test alpine.bounding_constr_mip[3][:vars] == Any[:(x[16]), :(x[8])] @test alpine.bounding_constr_mip[3][:coefs] == Any[-0.01, 0.01] @test alpine.bounding_constr_mip[3][:sense] == :(<=) @test alpine.bounding_constr_mip[3][:cnt] == 2 @test alpine.bounding_constr_mip[4][:rhs] == 83333.333 @test alpine.bounding_constr_mip[4][:vars] == Any[:(x[1]), :(x[18]), :(x[14])] @test alpine.bounding_constr_mip[4][:sense] == :(<=) @test alpine.bounding_constr_mip[4][:cnt] == 3 @test alpine.bounding_constr_mip[5][:rhs] == 0.0 @test alpine.bounding_constr_mip[5][:vars] == Any[:(x[20]), :(x[21]), :(x[4]), :(x[5])] @test alpine.bounding_constr_mip[5][:coefs] == Any[1.0, -1.0, -1250.0, 1250.0] @test alpine.bounding_constr_mip[5][:sense] == :(<=) @test alpine.bounding_constr_mip[5][:cnt] == 4 @test alpine.bounding_constr_mip[6][:rhs] == -1.25e6 @test alpine.bounding_constr_mip[6][:vars] == Any[:(x[24]), :(x[26]), :(x[28])] @test alpine.bounding_constr_mip[6][:coefs] == Any[1.0, -1.0, -2500.0] @test alpine.bounding_constr_mip[6][:sense] == :(<=) @test alpine.bounding_constr_mip[6][:cnt] == 3 @test alpine.bounding_constr_mip[7][:rhs] == 0.0 @test alpine.bounding_constr_mip[7][:vars] == Any[:(x[29])] @test alpine.bounding_constr_mip[7][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[7][:sense] == :(<=) @test alpine.bounding_constr_mip[7][:cnt] == 1 @test alpine.bounding_constr_mip[8][:rhs] == 0.0 @test alpine.bounding_constr_mip[8][:vars] == Any[:(x[30]), :(x[31])] @test alpine.bounding_constr_mip[8][:coefs] == Any[1.0, -1.0] @test alpine.bounding_constr_mip[8][:sense] == :(>=) @test alpine.bounding_constr_mip[8][:cnt] == 2 @test alpine.bounding_constr_mip[9][:rhs] == 0.0 @test alpine.bounding_constr_mip[9][:vars] == Any[:(x[32]), :(x[33])] @test alpine.bounding_constr_mip[9][:coefs] == Any[1.0, -1.0] @test alpine.bounding_constr_mip[9][:sense] == :(<=) @test alpine.bounding_constr_mip[9][:cnt] == 2 end @testset "TESTS for closing the optimality gap in OBBT" begin test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, "presolve_bt" => true, "presolve_bt_max_iter" => 2, "log_level" => 1, ) m = JuMP.Model(test_solver) # From issue #108 @variable(m, -2 <= x[1:2] <= 2) @variable(m, -10 <= y[1:3] <= 10) @NLobjective(m, Min, y[2] + y[1] * y[2] * y[3]) @constraint(m, y[1] == x[1]) @constraint(m, y[2] == x[2]) @NLconstraint(m, y[3] == x[2]^2) JuMP.optimize!(m) alp = JuMP.backend(m).optimizer.model @test isapprox(JuMP.objective_value(m), -18, atol = 1E-6) @test isapprox(value.(m[:x]), [2, -2], atol = 1E-6) @test alp.logs[:n_iter] == 0 @test MOI.get(m, Alpine.NumberOfIterations()) == 0 end @testset "Linking constraints for multilinear terms" begin # Without linking constraints test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "presolve_bt" => false, "apply_partitioning" => true, "linking_constraints" => false, ) m = linking_constraints_testing(solver = test_solver) JuMP.optimize!(m) alp = JuMP.backend(m).optimizer.model @test isapprox(JuMP.objective_value(m), -0.5294000135, atol = 1E-5) @test isnothing(alp.linking_constraints_info) @test MOI.get(m, Alpine.NumberOfIterations()) == 2 # With linking constraints test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "presolve_bt" => false, "apply_partitioning" => true, "linking_constraints" => true, ) m = linking_constraints_testing(solver = test_solver) JuMP.optimize!(m) alp = JuMP.backend(m).optimizer.model @test isapprox(JuMP.objective_value(m), -0.5294000135, atol = 1E-5) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 @test in(Set{Any}([1, 2]), alp.linking_constraints_info[[1, 2]]) @test in(Set{Any}([1, 2, 3]), alp.linking_constraints_info[[1, 2]]) @test in(Set{Any}([1, 2, 4]), alp.linking_constraints_info[[1, 2]]) @test in(Set{Any}([1, 3]), alp.linking_constraints_info[[1, 3]]) @test in(Set{Any}([1, 2, 3]), alp.linking_constraints_info[[1, 3]]) @test in(Set{Any}([1, 3, 4]), alp.linking_constraints_info[[1, 3]]) @test in(Set{Any}([1, 4]), alp.linking_constraints_info[[1, 4]]) @test in(Set{Any}([1, 2, 4]), alp.linking_constraints_info[[1, 4]]) @test in(Set{Any}([1, 3, 4]), alp.linking_constraints_info[[1, 4]]) end @testset "Warm start value used as the incumbent solution" begin test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "presolve_bt" => false, "max_iter" => 1, "use_start_as_incumbent" => false, ) sol = [ 579.30669, 1359.97066, 5109.97054, 182.0177, 295.60118, 217.9823, 286.41653, 395.60118, ] m = nlp3(solver = test_solver) for i in 1:length(m[:x]) JuMP.set_start_value(m[:x][i], sol[i]) end JuMP.optimize!(m) alp = JuMP.backend(m).optimizer.model @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(objective_value(m), 7049.247897696512, atol = 1e-6) @test isapprox(alp.best_bound, 3834.978106740535, atol = 1E-6) @test alp.options.use_start_as_incumbent == false test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "presolve_bt" => true, "max_iter" => 1, "use_start_as_incumbent" => true, ) m = nlp3(solver = test_solver) for i in 1:length(m[:x]) JuMP.set_start_value(m[:x][i], sol[i]) end JuMP.optimize!(m) alp = JuMP.backend(m).optimizer.model @test termination_status(m) == MOI.OTHER_LIMIT @test isapprox(alp.best_bound, 4810.212866711817, atol = 1E-3) @test alp.warm_start_value == sol @test alp.options.use_start_as_incumbent == true end @testset "Test binary multilinear product linearization" begin test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "minlp_solver" => JUNIPER, "presolve_bt" => false, ) m = hmittelman(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OPTIMAL @test isapprox(objective_value(m), 13; atol = 1e-4) @test MOI.get(m, Alpine.NumberOfIterations()) == 1 test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "minlp_solver" => JUNIPER, "presolve_bt" => true, ) m = hmittelman(solver = test_solver) JuMP.optimize!(m) @test termination_status(m) == MOI.OPTIMAL @test isapprox(objective_value(m), 13; atol = 1e-4) @test MOI.get(m, Alpine.NumberOfIterations()) == 0 end @testset "Test integer variable support via IntegerToZeroOneBridge" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "minlp_solver" => JUNIPER, ) model = JuMP.Model(test_solver) @variable(model, -10 <= x <= 20, Int) @objective(model, Min, x) JuMP.optimize!(model) @test termination_status(model) == MOI.OPTIMAL @test isapprox(objective_value(model), -10; atol = 1e-4) @test isapprox(value(x), -10, atol = 1e-6) @test MOI.get(model, Alpine.NumberOfIterations()) == 0 end @testset "Test integer variable support 0" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "minlp_solver" => JUNIPER, ) model = JuMP.Model(test_solver) @variable(model, x, Int) @objective(model, Min, x) @test_throws Exception JuMP.optimize!(model) end @testset "Test integer variable support 1" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "minlp_solver" => JUNIPER, ) model = JuMP.Model(test_solver) @variable(model, -10 <= x, Int) @objective(model, Min, x) @test_throws Exception JuMP.optimize!(model) end @testset "Test integer variable support 2" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "minlp_solver" => JUNIPER, ) model = JuMP.Model(test_solver) @variable(model, x <= 20, Int) @objective(model, Min, x) @test_throws Exception JuMP.optimize!(model) end ================================================ FILE: test/test_expression.jl ================================================ @testset "Expression Parsing || bilinear || Affine || exprs.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = exprstest(solver = test_solver) alpine = _build(m) ex = alpine.bounding_constr_expr_mip[1] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [-1.0] @test affdict[:coefs] == alpine.bounding_constr_mip[1][:coefs] @test affdict[:vars] == [:(x[1])] @test affdict[:vars] == alpine.bounding_constr_mip[1][:vars] @test isapprox(affdict[:rhs], 109.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[1][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[1][:sense] ex = alpine.bounding_constr_expr_mip[2] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [3.0, 3.0, 3.0, 3.0] @test affdict[:coefs] == alpine.bounding_constr_mip[2][:coefs] @test affdict[:vars] == [:(x[8]), :(x[9]), :(x[10]), :(x[11])] @test affdict[:vars] == alpine.bounding_constr_mip[2][:vars] @test isapprox(affdict[:rhs], 111.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[2][:rhs] @test affdict[:sense] == :(>=) @test affdict[:sense] == alpine.bounding_constr_mip[2][:sense] ex = alpine.bounding_constr_expr_mip[3] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [-1.0, 20.0] @test affdict[:coefs] == alpine.bounding_constr_mip[3][:coefs] @test affdict[:vars] == [:(x[12]), :(x[13])] @test affdict[:vars] == alpine.bounding_constr_mip[3][:vars] @test isapprox(affdict[:rhs], 222.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[3][:rhs] @test affdict[:sense] == :(>=) @test affdict[:sense] == alpine.bounding_constr_mip[3][:sense] # 1.0 * x[12] - 115.0 >= 0.0 ex = alpine.bounding_constr_expr_mip[4] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [-1.0] @test affdict[:coefs] == alpine.bounding_constr_mip[4][:coefs] @test affdict[:vars] == [:(x[12])] @test affdict[:vars] == alpine.bounding_constr_mip[4][:vars] @test isapprox(affdict[:rhs], 115.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[4][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[4][:sense] # 1.0 * x[12] - 115.0 <= 0.0 ex = alpine.bounding_constr_expr_mip[5] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [1.0] @test affdict[:coefs] == alpine.bounding_constr_mip[5][:coefs] @test affdict[:vars] == [:(x[12])] @test affdict[:vars] == alpine.bounding_constr_mip[5][:vars] @test isapprox(affdict[:rhs], 115.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[5][:rhs] @test affdict[:sense] == :(>=) @test affdict[:sense] == alpine.bounding_constr_mip[5][:sense] # -1.0 * x[12] - 115.0 >= 0.0 ex = alpine.bounding_constr_expr_mip[6] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [-1.0] @test affdict[:coefs] == alpine.bounding_constr_mip[6][:coefs] @test affdict[:vars] == [:(x[12])] @test affdict[:vars] == alpine.bounding_constr_mip[6][:vars] @test isapprox(affdict[:rhs], 115.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[6][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[6][:sense] # (x[1] + 1.0 * x[14]) - 555.0 >= 0.0 ex = alpine.bounding_constr_expr_mip[7] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [1.0, 1.0] @test affdict[:coefs] == alpine.bounding_constr_mip[7][:coefs] @test affdict[:vars] == [:(x[1]), :(x[14])] @test affdict[:vars] == alpine.bounding_constr_mip[7][:vars] @test isapprox(affdict[:rhs], 555.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[7][:rhs] @test affdict[:sense] == :(>=) @test affdict[:sense] == alpine.bounding_constr_mip[7][:sense] # ((x[8] - 7.0 * x[9]) + x[10] + x[4]) - 6666.0 <= 0.0 ex = alpine.bounding_constr_expr_mip[8] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [1.0, -7.0, 1.0, 1.0] @test affdict[:coefs] == alpine.bounding_constr_mip[8][:coefs] @test affdict[:vars] == [:(x[8]), :(x[9]), :(x[10]), :(x[4])] @test affdict[:vars] == alpine.bounding_constr_mip[8][:vars] @test isapprox(affdict[:rhs], 6666.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[8][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[8][:sense] # ((13.0 * x[1] - x[2]) + 30.0 * x[3] + x[4]) - 77.0 >= 0.0 ex = alpine.bounding_constr_expr_mip[9] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [13.0, -1.0, 30.0, 1.0] @test affdict[:coefs] == alpine.bounding_constr_mip[9][:coefs] @test affdict[:vars] == [:(x[1]), :(x[2]), :(x[3]), :(x[4])] @test affdict[:vars] == alpine.bounding_constr_mip[9][:vars] @test isapprox(affdict[:rhs], 77.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[9][:rhs] @test affdict[:sense] == :(>=) @test affdict[:sense] == alpine.bounding_constr_mip[9][:sense] end @testset "Expression Parsing || bilinear || Affine || nlp1.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = nlp1(solver = test_solver) alpine = _build(m) ex = alpine.bounding_constr_expr_mip[1] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [1.0] @test affdict[:coefs] == alpine.bounding_constr_mip[1][:coefs] @test affdict[:vars] == [:(x[5])] @test affdict[:vars] == alpine.bounding_constr_mip[1][:vars] @test isapprox(affdict[:rhs], 8.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[1][:rhs] @test affdict[:sense] == :(>=) @test affdict[:sense] == alpine.bounding_constr_mip[1][:sense] end @testset "Expression Parsing || bilinear || Affine || nlp3.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = nlp3(solver = test_solver) alpine = _build(m) ex = alpine.bounding_constr_expr_mip[1] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [0.0025, 0.0025] @test affdict[:coefs] == alpine.bounding_constr_mip[1][:coefs] @test affdict[:vars] == [:(x[4]), :(x[6])] @test affdict[:vars] == alpine.bounding_constr_mip[1][:vars] @test isapprox(affdict[:rhs], 1.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[1][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[1][:sense] ex = alpine.bounding_constr_expr_mip[2] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [-0.0025, 0.0025, 0.0025] @test affdict[:coefs] == alpine.bounding_constr_mip[2][:coefs] @test affdict[:vars] == [:(x[4]), :(x[5]), :(x[7])] @test affdict[:vars] == alpine.bounding_constr_mip[2][:vars] @test isapprox(affdict[:rhs], 1.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[2][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[2][:sense] ex = alpine.bounding_constr_expr_mip[3] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [-0.01, 0.01] @test affdict[:coefs] == alpine.bounding_constr_mip[3][:coefs] @test affdict[:vars] == [:(x[5]), :(x[8])] @test affdict[:vars] == alpine.bounding_constr_mip[3][:vars] @test isapprox(affdict[:rhs], 1.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[3][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[3][:sense] ex = alpine.bounding_constr_expr_mip[4] affdict = Alpine.expr_linear_to_affine(ex) @test (affdict[:coefs] .== [100.0, -1.0, 833.33252]) == [true, true, true] @test affdict[:coefs] == alpine.bounding_constr_mip[4][:coefs] @test affdict[:vars] == [:(x[1]), :(x[9]), :(x[4])] @test affdict[:vars] == alpine.bounding_constr_mip[4][:vars] @test isapprox(affdict[:rhs], 83333.333; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[4][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[4][:sense] ex = alpine.bounding_constr_expr_mip[5] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [1.0, -1.0, -1250.0, 1250.0] @test affdict[:coefs] == alpine.bounding_constr_mip[5][:coefs] @test affdict[:vars] == [:(x[10]), :(x[11]), :(x[4]), :(x[5])] @test affdict[:vars] == alpine.bounding_constr_mip[5][:vars] @test isapprox(affdict[:rhs], 0.0; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[5][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[5][:sense] ex = alpine.bounding_constr_expr_mip[6] affdict = Alpine.expr_linear_to_affine(ex) @test affdict[:coefs] == [1.0, -1.0, -2500.0] @test affdict[:coefs] == alpine.bounding_constr_mip[6][:coefs] @test affdict[:vars] == [:(x[12]), :(x[13]), :(x[5])] @test affdict[:vars] == alpine.bounding_constr_mip[6][:vars] @test isapprox(affdict[:rhs], -1.25e6; atol = 1e-3) @test affdict[:rhs] == alpine.bounding_constr_mip[6][:rhs] @test affdict[:sense] == :(<=) @test affdict[:sense] == alpine.bounding_constr_mip[6][:sense] end @testset "Expression Parsing || bilinear || Simple || bi1.jl " begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = operator_c(solver = test_solver) alpine = _build(m) # Setup internal model @test length(keys(alpine.nonconvex_terms)) == 8 @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 1), Expr(:ref, :x, 1)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 2), Expr(:ref, :x, 2)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 3), Expr(:ref, :x, 3)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 4), Expr(:ref, :x, 4)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 2), Expr(:ref, :x, 3)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 3), Expr(:ref, :x, 4)]) # TODO setup detailed check on this problem end @testset "Expression Parsing || bilinear || Complex || blend029.jl " begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => JUNIPER, "mip_solver" => HIGHS, "log_level" => 100, ) m = blend029(solver = test_solver) alpine = _build(m) # Setup internal model @test length(keys(alpine.nonconvex_terms)) == 28 @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 37), Expr(:ref, :x, 55)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 38), Expr(:ref, :x, 56)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 37), Expr(:ref, :x, 26)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 43), Expr(:ref, :x, 26)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 47), Expr(:ref, :x, 59)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 48), Expr(:ref, :x, 60)]) @test haskey(alpine.nonconvex_terms, [Expr(:ref, :x, 47), Expr(:ref, :x, 36)]) @test alpine.bounding_constr_mip[1][:rhs] == 1.0 @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[4]), :(x[7]), :(x[10]), :(x[49])] @test alpine.bounding_constr_mip[1][:sense] == :(==) @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0, 1.0, 1.0, 1.0] @test alpine.bounding_constr_mip[1][:cnt] == 5 @test alpine.bounding_constr_mip[4][:rhs] == 0.1 @test alpine.bounding_constr_mip[4][:vars] == Any[:(x[4]), :(x[16]), :(x[25]), :(x[34]), :(x[58])] @test alpine.bounding_constr_mip[4][:sense] == :(==) @test alpine.bounding_constr_mip[4][:coefs] == Any[-1.0, -1.0, -1.0, 1.0, 1.0] @test alpine.bounding_constr_mip[4][:cnt] == 5 @test alpine.bounding_constr_mip[17][:rhs] == -0.14 @test alpine.bounding_constr_mip[17][:vars] == Any[:(x[11]), :(x[23]), :(x[32]), :(x[64]), :(x[65])] @test alpine.bounding_constr_mip[17][:sense] == :(==) @test alpine.bounding_constr_mip[17][:coefs] == Any[-1.0, -1.0, -1.0, -1.0, 1.0] @test alpine.bounding_constr_mip[17][:cnt] == 5 @test alpine.bounding_constr_mip[31][:rhs] == 0.0 @test alpine.bounding_constr_mip[31][:vars] == Any[:(x[13])] @test alpine.bounding_constr_mip[31][:sense] == :(>=) @test alpine.bounding_constr_mip[31][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[31][:cnt] == 1 @test alpine.bounding_constr_mip[145][:rhs] == 1.0 @test alpine.bounding_constr_mip[145][:vars] == Any[:(x[73])] @test alpine.bounding_constr_mip[145][:sense] == :(<=) @test alpine.bounding_constr_mip[145][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[145][:cnt] == 1 @test alpine.bounding_constr_mip[67][:rhs] == -1.0 @test alpine.bounding_constr_mip[67][:vars] == Any[:(x[73])] @test alpine.bounding_constr_mip[67][:sense] == :(>=) @test alpine.bounding_constr_mip[67][:coefs] == Any[-1.0] @test alpine.bounding_constr_mip[67][:cnt] == 1 @test alpine.bounding_constr_mip[187][:rhs] == 1.0 @test alpine.bounding_constr_mip[187][:vars] == Any[:(x[79]), :(x[94])] @test alpine.bounding_constr_mip[187][:sense] == :(<=) @test alpine.bounding_constr_mip[187][:coefs] == Any[1.0, 1.0] @test alpine.bounding_constr_mip[187][:cnt] == 2 @test alpine.bounding_constr_mip[202][:rhs] == 0.04 @test alpine.bounding_constr_mip[202][:vars] == Any[:(x[103]), :(x[1]), :(x[13]), :(x[25]), :(x[28]), :(x[31])] @test alpine.bounding_constr_mip[202][:sense] == :(==) @test alpine.bounding_constr_mip[202][:coefs] == Any[1.0, -0.6, -0.2, 0.2, 0.2, 0.2] @test alpine.bounding_constr_mip[202][:cnt] == 6 @test alpine.nonconvex_terms[[:(x[37]), :(x[55])]][:id] == 1 @test alpine.nonconvex_terms[[:(x[37]), :(x[55])]][:lifted_var_ref] == :(x[103]) @test alpine.nonconvex_terms[[:(x[37]), :(x[55])]][:convexified] == false @test alpine.nonconvex_terms[[:(x[37]), :(x[55])]][:nonlinear_type] == :BILINEAR @test alpine.bounding_constr_mip[206][:rhs] == 0.0 @test alpine.bounding_constr_mip[206][:vars] == Any[:(x[107]), :(x[103]), :(x[108]), :(x[109]), :(x[110]), :(x[2]), :(x[14])] @test alpine.bounding_constr_mip[206][:sense] == :(==) @test alpine.bounding_constr_mip[206][:coefs] == Any[1.0, -1.0, 1.0, 1.0, 1.0, -0.6, -0.2] @test alpine.bounding_constr_mip[206][:cnt] == 7 @test alpine.nonconvex_terms[[:(x[38]), :(x[56])]][:id] == 5 @test alpine.nonconvex_terms[[:(x[38]), :(x[56])]][:lifted_var_ref] == :(x[107]) @test alpine.nonconvex_terms[[:(x[38]), :(x[56])]][:convexified] == false @test alpine.nonconvex_terms[[:(x[38]), :(x[56])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[:(x[37]), :(x[26])]][:id] == 6 @test alpine.nonconvex_terms[[:(x[37]), :(x[26])]][:lifted_var_ref] == :(x[108]) @test alpine.nonconvex_terms[[:(x[37]), :(x[26])]][:convexified] == false @test alpine.nonconvex_terms[[:(x[37]), :(x[26])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[:(x[37]), :(x[32])]][:id] == 8 @test alpine.nonconvex_terms[[:(x[37]), :(x[32])]][:lifted_var_ref] == :(x[110]) @test alpine.nonconvex_terms[[:(x[37]), :(x[32])]][:convexified] == false @test alpine.nonconvex_terms[[:(x[37]), :(x[32])]][:nonlinear_type] == :BILINEAR @test alpine.bounding_constr_mip[213][:rhs] == 0.0 @test alpine.bounding_constr_mip[213][:vars] == Any[:(x[129]), :(x[127]), :(x[124]), :(x[130]), :(x[6]), :(x[18])] @test alpine.bounding_constr_mip[213][:sense] == :(==) @test alpine.bounding_constr_mip[213][:coefs] == Any[1.0, -1.0, -1.0, 1.0, -0.4, -0.4] @test alpine.bounding_constr_mip[213][:cnt] == 6 @test alpine.nonconvex_terms[[:(x[48]), :(x[60])]][:id] == 27 @test alpine.nonconvex_terms[[:(x[48]), :(x[60])]][:lifted_var_ref] == :(x[129]) @test alpine.nonconvex_terms[[:(x[48]), :(x[60])]][:convexified] == false @test alpine.nonconvex_terms[[:(x[48]), :(x[60])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[:(x[47]), :(x[59])]][:id] == 25 @test alpine.nonconvex_terms[[:(x[47]), :(x[59])]][:lifted_var_ref] == :(x[127]) @test alpine.nonconvex_terms[[:(x[47]), :(x[59])]][:convexified] == false @test alpine.nonconvex_terms[[:(x[47]), :(x[59])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[:(x[47]), :(x[36])]][:id] == 28 @test alpine.nonconvex_terms[[:(x[47]), :(x[36])]][:lifted_var_ref] == :(x[130]) @test alpine.nonconvex_terms[[:(x[47]), :(x[36])]][:convexified] == false @test alpine.nonconvex_terms[[:(x[47]), :(x[36])]][:nonlinear_type] == :BILINEAR end @testset "Expression Parsing || multilinear || Simple || multi.jl " begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = multi3(solver = test_solver, exprmode = 1) alpine = _build(m) # Setup internal model @test length(keys(alpine.nonconvex_terms)) == 1 @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:id] == 1 @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:lifted_var_ref] == :(x[4]) @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:nonlinear_type] == :MULTILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[4])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing @test alpine.bounding_constr_mip[1][:rhs] == 3.0 @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2]), :(x[3])] @test alpine.bounding_constr_mip[1][:sense] == :(<=) @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0, 1.0] @test alpine.bounding_constr_mip[1][:cnt] == 3 m = multi3(solver = test_solver, exprmode = 2) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] == :(x[4]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 3)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 3)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 3)]][:nonlinear_type] == :BILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[5])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi3(solver = test_solver, exprmode = 3) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:lifted_var_ref] == :(x[4]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 4)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 4)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 4)]][:nonlinear_type] == :BILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[5])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 1) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 1 @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[5])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:id] == 1 @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:nonlinear_type] == :MULTILINEAR @test alpine.bounding_constr_mip[1][:rhs] == 4.0 @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2]), :(x[3]), :(x[4])] @test alpine.bounding_constr_mip[1][:sense] == :(<=) @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0, 1.0, 1.0] @test alpine.bounding_constr_mip[1][:cnt] == 4 m = multi4(solver = test_solver, exprmode = 2) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 6)]][:id] == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 6)]][:lifted_var_ref] == :(x[7]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 6)]][:nonlinear_type] == :BILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 3) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[:(x[5]), :(x[3]), :(x[4])]][:id] == 2 @test alpine.nonconvex_terms[[:(x[5]), :(x[3]), :(x[4])]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[:(x[5]), :(x[3]), :(x[4])]][:nonlinear_type] == :MULTILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 4) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[5])]][:id] == 2 @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[5])]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[5])]][:nonlinear_type] == :MULTILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 5) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 5)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 5)]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 5)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:id] == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:lifted_var_ref] == :(x[7]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:nonlinear_type] == :BILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 6) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 2 @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:id] == 1 @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 4)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 4)]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 5), Expr(:ref, :x, 4)]][:nonlinear_type] == :BILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 7) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 3), Expr(:ref, :x, 4)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 5)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 5)]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 5)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:id] == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:lifted_var_ref] == :(x[7]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:nonlinear_type] == :BILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 8) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[:(x[1]), :(x[5]), :(x[4])]][:id] == 2 @test alpine.nonconvex_terms[[:(x[1]), :(x[5]), :(x[4])]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[:(x[1]), :(x[5]), :(x[4])]][:nonlinear_type] == :MULTILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 9) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 2 @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[4])]][:id] == 1 @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[4])]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[4])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:nonlinear_type] == :BILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[6])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 10) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 5)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 5)]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 4), Expr(:ref, :x, 5)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:id] == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:lifted_var_ref] == :(x[7]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 6)]][:nonlinear_type] == :BILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing m = multi4(solver = test_solver, exprmode = 11) alpine = _build(m) @test length(keys(alpine.nonconvex_terms)) == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 3)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:lifted_var_ref] == :(x[6]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 5)]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:id] == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:lifted_var_ref] == :(x[7]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 6), Expr(:ref, :x, 4)]][:nonlinear_type] == :BILINEAR @test alpine.bounding_obj_mip[:rhs] == 0 @test alpine.bounding_obj_mip[:vars] == Expr[:(x[7])] @test alpine.bounding_obj_mip[:coefs] == [1.0] @test alpine.bounding_obj_mip[:cnt] == 1 @test alpine.bounding_obj_mip[:sense] === nothing end @testset "Expression Parsing || bilinear || Complex-div || div.jl" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = div(solver = test_solver) alpine = _build(m) # Setup internal model @test length(keys(alpine.nonconvex_terms)) == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 1)]][:id] == 1 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 1)]][:lifted_var_ref] == :(x[3]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 1)]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 2)]][:id] == 2 @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 2)]][:lifted_var_ref] == :(x[4]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 2), Expr(:ref, :x, 2)]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:id] == 3 @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:lifted_var_ref] == :(x[5]) @test alpine.nonconvex_terms[[Expr(:ref, :x, 1), Expr(:ref, :x, 2)]][:nonlinear_type] == :BILINEAR aff_mip = alpine.bounding_constr_mip @test aff_mip[1][:rhs] == 0.0 @test aff_mip[1][:vars] == Any[:(x[1])] @test aff_mip[1][:sense] == :(>=) @test round(aff_mip[1][:coefs][1]; digits = 1) == -3.0 @test aff_mip[1][:cnt] == 1 @test aff_mip[2][:rhs] == 0.0 @test aff_mip[2][:vars] == Any[:(x[2])] @test aff_mip[2][:sense] == :(>=) @test aff_mip[2][:coefs] == Any[0.25] @test aff_mip[2][:cnt] == 1 @test aff_mip[3][:rhs] == 0.0 @test aff_mip[3][:vars] == Any[:(x[2])] @test aff_mip[3][:sense] == :(>=) @test aff_mip[3][:coefs] == Any[5.0] @test aff_mip[3][:cnt] == 1 @test aff_mip[4][:rhs] == 0.0 @test aff_mip[4][:vars] == Any[:(x[2])] @test aff_mip[4][:sense] == :(>=) @test aff_mip[4][:coefs] == Any[-120.0] @test aff_mip[4][:cnt] == 1 @test aff_mip[5][:rhs] == 0.0 @test aff_mip[5][:vars] == Any[:(x[2])] @test aff_mip[5][:sense] == :(>=) @test aff_mip[5][:coefs] == Any[72000.0] @test aff_mip[5][:cnt] == 1 @test aff_mip[6][:rhs] == 0.0 @test aff_mip[6][:vars] == Any[:(x[1])] @test aff_mip[6][:sense] == :(>=) @test aff_mip[6][:coefs] == Any[72000.0] @test aff_mip[6][:cnt] == 1 @test aff_mip[7][:rhs] == 8.0 @test aff_mip[7][:vars] == Any[:(x[5])] @test aff_mip[7][:sense] == :(>=) @test aff_mip[7][:coefs] == Any[0.6] @test aff_mip[7][:cnt] == 1 @test aff_mip[8][:rhs] == 0.0 @test aff_mip[8][:vars] == Any[:(x[2]), :(x[5])] @test aff_mip[8][:sense] == :(>=) @test aff_mip[8][:coefs] == Any[5.6, -72000.0] @test aff_mip[8][:cnt] == 2 @test aff_mip[9][:rhs] == 0.0 @test aff_mip[9][:vars] == Any[:(x[2]), :(x[5])] @test aff_mip[9][:sense] == :(>=) @test aff_mip[9][:coefs] == Any[5.6, -36000.0] @test aff_mip[9][:cnt] == 2 @test aff_mip[10][:rhs] == 0.0 @test aff_mip[10][:vars] == Any[:(x[2]), :(x[5]), :(x[2])] @test aff_mip[10][:sense] == :(>=) @test aff_mip[10][:coefs] == Any[5.6, -300.0, -1.75] @test aff_mip[10][:cnt] == 3 @test aff_mip[11][:rhs] == 0.0 @test aff_mip[11][:vars] == Any[:(x[2]), :(x[1]), :(x[5])] @test aff_mip[11][:sense] == :(>=) @test aff_mip[11][:coefs] == Any[5.6, -0.5, 0.5] @test aff_mip[11][:cnt] == 3 end @testset "Expression Parsing || part1 " begin m = Model( optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ), ) @variable(m, x[1:4] >= 0) @NLconstraint(m, x[1]^2 >= 1) # Basic monomial x[5]=x[1]^2 @NLconstraint(m, x[1] * x[2] <= 1) # x[6] <= 1 : x[6] = x[1]*x[2] @NLconstraint(m, x[1]^2 * x[2]^2 <= 1) # x[5] + x[7] <= 1 : x[7] = x[2]^2 @NLconstraint(m, x[1] * (x[2] * x[3]) >= 1) # x[9] >= 1 : x[8] = x[2] * x[3] && x[9] = x[1]*x[8] @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] alpine = _build(m) @test alpine.bounding_constr_expr_mip[1] == :(x[5] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[2] == :(x[6] - 1.0 <= 0.0) @test alpine.bounding_constr_expr_mip[3] == :(x[8] - 1.0 <= 0.0) @test alpine.bounding_constr_expr_mip[4] == :(x[10] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[5] == :(x[13] - 1.0 <= 0.0) @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])]) @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3])]) @test haskey(alpine.nonconvex_terms, [:(x[5]), :(x[7])]) @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[9])]) @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])]) @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])]) @test haskey(alpine.nonconvex_terms, [:(x[5]), :(x[12])]) @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 1 @test alpine.nonconvex_terms[[:(x[1]), :(x[2])]][:id] == 2 @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 3 @test alpine.nonconvex_terms[[:(x[5]), :(x[7])]][:id] == 4 @test alpine.nonconvex_terms[[:(x[2]), :(x[3])]][:id] == 5 @test alpine.nonconvex_terms[[:(x[1]), :(x[9])]][:id] == 6 @test alpine.nonconvex_terms[[:(x[3]), :(x[3])]][:id] == 7 @test alpine.nonconvex_terms[[:(x[7]), :(x[11])]][:id] == 8 @test alpine.nonconvex_terms[[:(x[5]), :(x[12])]][:id] == 9 end @testset "Expression Parsing || part2" begin m = Model( optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ), ) @variable(m, x[1:4] >= 0) @NLconstraint(m, (x[1] * x[2]) * x[3] >= 1) @NLconstraint(m, (x[1]^2 * x[2]^2) * x[3]^2 <= 1) @NLconstraint(m, x[1] * (x[2]^2 * x[3]^2) >= 1) @NLconstraint(m, (x[1]^2 * x[2]) * x[3]^2 <= 1) @NLconstraint(m, x[1]^2 * (x[2] * x[3]) >= 1) @NLconstraint(m, (x[1] * x[2]^2) * x[3] <= 1) alpine = _build(m) @test alpine.bounding_constr_expr_mip[1] == :(x[6] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[2] == :(x[11] - 1.0 <= 0.0) @test alpine.bounding_constr_expr_mip[3] == :(x[13] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[4] == :(x[15] - 1.0 <= 0.0) @test alpine.bounding_constr_expr_mip[5] == :(x[17] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[6] == :(x[19] - 1.0 <= 0.0) @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])]) #5 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[5])]) #6 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) #7 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) #8 @test haskey(alpine.nonconvex_terms, [:(x[7]), :(x[8])]) #9 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])]) #10 @test haskey(alpine.nonconvex_terms, [:(x[9]), :(x[10])]) #11 @test haskey(alpine.nonconvex_terms, [:(x[8]), :(x[10])]) #12 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[12])]) #13 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[7])]) #14 @test haskey(alpine.nonconvex_terms, [:(x[14]), :(x[10])]) #15 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3])]) #16 @test haskey(alpine.nonconvex_terms, [:(x[7]), :(x[16])]) #17 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[8])]) #18 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[18])]) #19 @test alpine.nonconvex_terms[[:(x[1]), :(x[2])]][:id] == 1 @test alpine.nonconvex_terms[[:(x[3]), :(x[5])]][:id] == 2 @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 3 @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 4 @test alpine.nonconvex_terms[[:(x[7]), :(x[8])]][:id] == 5 @test alpine.nonconvex_terms[[:(x[3]), :(x[3])]][:id] == 6 @test alpine.nonconvex_terms[[:(x[9]), :(x[10])]][:id] == 7 @test alpine.nonconvex_terms[[:(x[8]), :(x[10])]][:id] == 8 @test alpine.nonconvex_terms[[:(x[1]), :(x[12])]][:id] == 9 @test alpine.nonconvex_terms[[:(x[2]), :(x[7])]][:id] == 10 @test alpine.nonconvex_terms[[:(x[14]), :(x[10])]][:id] == 11 @test alpine.nonconvex_terms[[:(x[2]), :(x[3])]][:id] == 12 @test alpine.nonconvex_terms[[:(x[7]), :(x[16])]][:id] == 13 @test alpine.nonconvex_terms[[:(x[1]), :(x[8])]][:id] == 14 @test alpine.nonconvex_terms[[:(x[3]), :(x[18])]][:id] == 15 end @testset "Expression Parsing || part3" begin m = Model( optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ), ) @variable(m, x[1:4] >= 0) @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4] >= 1) @NLconstraint(m, ((x[1]^2 * x[2]) * x[3]) * x[4] <= 1) @NLconstraint(m, ((x[1] * x[2]^2) * x[3]) * x[4] >= 1) @NLconstraint(m, ((x[1] * x[2]) * x[3]^2) * x[4] <= 1) @NLconstraint(m, ((x[1] * x[2]) * x[3]) * x[4]^2 >= 1) @NLconstraint(m, ((x[1]^2 * x[2]^2) * x[3]^2) * x[4]^2 <= 1) alpine = _build(m) @test alpine.bounding_constr_expr_mip[1] == :(x[7] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[2] == :(x[11] - 1.0 <= 0.0) @test alpine.bounding_constr_expr_mip[3] == :(x[15] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[4] == :(x[18] - 1.0 <= 0.0) @test alpine.bounding_constr_expr_mip[5] == :(x[20] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[6] == :(x[23] - 1.0 <= 0.0) @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])]) #5 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[5])]) #6 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[6])]) #7 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) #8 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[8])]) #9 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[9])]) #10 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[10])]) #11 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) #12 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[12])]) #13 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[13])]) #14 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[14])]) #15 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])]) #16 @test haskey(alpine.nonconvex_terms, [:(x[5]), :(x[16])]) #17 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[17])]) #18 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[4])]) #19 @test haskey(alpine.nonconvex_terms, [:(x[6]), :(x[19])]) #20 @test haskey(alpine.nonconvex_terms, [:(x[8]), :(x[12])]) #21 @test haskey(alpine.nonconvex_terms, [:(x[21]), :(x[16])]) #22 @test haskey(alpine.nonconvex_terms, [:(x[22]), :(x[19])]) #23 @test alpine.nonconvex_terms[[:(x[1]), :(x[2])]][:id] == 1 @test alpine.nonconvex_terms[[:(x[3]), :(x[5])]][:id] == 2 @test alpine.nonconvex_terms[[:(x[4]), :(x[6])]][:id] == 3 @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 4 @test alpine.nonconvex_terms[[:(x[2]), :(x[8])]][:id] == 5 @test alpine.nonconvex_terms[[:(x[3]), :(x[9])]][:id] == 6 @test alpine.nonconvex_terms[[:(x[4]), :(x[10])]][:id] == 7 @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 8 @test alpine.nonconvex_terms[[:(x[1]), :(x[12])]][:id] == 9 @test alpine.nonconvex_terms[[:(x[3]), :(x[13])]][:id] == 10 @test alpine.nonconvex_terms[[:(x[4]), :(x[14])]][:id] == 11 @test alpine.nonconvex_terms[[:(x[3]), :(x[3])]][:id] == 12 @test alpine.nonconvex_terms[[:(x[5]), :(x[16])]][:id] == 13 @test alpine.nonconvex_terms[[:(x[4]), :(x[17])]][:id] == 14 @test alpine.nonconvex_terms[[:(x[4]), :(x[4])]][:id] == 15 @test alpine.nonconvex_terms[[:(x[6]), :(x[19])]][:id] == 16 @test alpine.nonconvex_terms[[:(x[8]), :(x[12])]][:id] == 17 @test alpine.nonconvex_terms[[:(x[21]), :(x[16])]][:id] == 18 @test alpine.nonconvex_terms[[:(x[22]), :(x[19])]][:id] == 19 end @testset "Expression Parsing || part7" begin m = Model( optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ), ) @variable(m, x[1:4] >= 0) @NLconstraint(m, x[1] * x[2] * x[3] * x[4] >= 1) @NLconstraint(m, x[1]^2 * x[2] * x[3] * x[4] >= 1) @NLconstraint(m, x[1] * x[2]^2 * x[3] * x[4] >= 1) @NLconstraint(m, x[1] * x[2] * x[3]^2 * x[4]^2 >= 1) @NLconstraint(m, x[1] * x[2]^2 * x[3]^2 * x[4] >= 1) @NLconstraint(m, x[1]^2 * x[2] * x[3] * x[4]^2 >= 1) @NLconstraint(m, x[1]^2 * x[2]^2 * x[3]^2 * x[4]^2 >= 1) alpine = _build(m) @test alpine.bounding_constr_expr_mip[1] == :(x[5] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[2] == :(x[7] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[3] == :(x[9] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[4] == :(x[12] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[5] == :(x[13] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[6] == :(x[14] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[7] == :(x[15] - 1.0 >= 0.0) @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2]), :(x[3]), :(x[4])]) #5 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) #6 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3]), :(x[4]), :(x[6])]) #7 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) #8 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[3]), :(x[4]), :(x[8])]) #9 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])]) #10 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[4])]) #11 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2]), :(x[10]), :(x[11])]) #12 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[4]), :(x[8]), :(x[10])]) #13 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3]), :(x[6]), :(x[11])]) #14 @test haskey(alpine.nonconvex_terms, [:(x[6]), :(x[8]), :(x[10]), :(x[11])]) #15 @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:id] == 1 #5 @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 2 #6 @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[4]), :(x[6])]][:id] == 3 #7 @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 4 #8 @test alpine.nonconvex_terms[[:(x[1]), :(x[3]), :(x[4]), :(x[8])]][:id] == 5 #9 @test alpine.nonconvex_terms[[:(x[3]), :(x[3])]][:id] == 6 #10 @test alpine.nonconvex_terms[[:(x[4]), :(x[4])]][:id] == 7 #11 @test alpine.nonconvex_terms[[:(x[1]), :(x[2]), :(x[10]), :(x[11])]][:id] == 8 #12 @test alpine.nonconvex_terms[[:(x[1]), :(x[4]), :(x[8]), :(x[10])]][:id] == 9 #13 @test alpine.nonconvex_terms[[:(x[2]), :(x[3]), :(x[6]), :(x[11])]][:id] == 10 #14 @test alpine.nonconvex_terms[[:(x[6]), :(x[8]), :(x[10]), :(x[11])]][:id] == 11 #15 end @testset "Expression Parsing || part8" begin m = Model( optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ), ) @variable(m, x[1:4] >= 0) @NLconstraint(m, (x[1] * x[2] * x[3]) * x[4] >= 1) @NLconstraint(m, (x[1]^2 * x[2] * x[3]) * x[4] >= 1) @NLconstraint(m, x[1] * (x[2]^2 * x[3]) * x[4] >= 1) @NLconstraint(m, x[1] * (x[2] * x[3]^2) * x[4] >= 1) @NLconstraint(m, (x[1] * x[2]^2) * x[3] * x[4] >= 1) @NLconstraint(m, (x[1] * x[2]) * x[3]^2 * x[4] >= 1) @NLconstraint(m, (x[1] * x[2]) * x[3] * x[4]^2 >= 1) @NLconstraint(m, (x[1] * x[2]) * x[3]^2 * x[4]^2 >= 1) @NLconstraint(m, (x[1]^2 * x[2]^2 * x[3]^2) * x[4]^2 >= 1) alpine = _build(m) @test alpine.bounding_constr_expr_mip[1] == :(x[6] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[2] == :(x[9] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[3] == :(x[12] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[4] == :(x[15] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[5] == :(x[17] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[6] == :(x[19] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[7] == :(x[21] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[8] == :(x[22] - 1.0 >= 0.0) @test alpine.bounding_constr_expr_mip[9] == :(x[24] - 1.0 >= 0.0) @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2]), :(x[3])]) #5 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[5])]) #6 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) #7 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[3]), :(x[7])]) #8 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[8])]) #9 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) #10 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[10])]) #11 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[4]), :(x[11])]) #12 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[3])]) #13 @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[13])]) #14 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[4]), :(x[14])]) #15 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[10])]) #16 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[4]), :(x[16])]) #17 @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[2])]) #18 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[18]), :(x[13])]) #19 @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[4])]) #20 @test haskey(alpine.nonconvex_terms, [:(x[3]), :(x[18]), :(x[20])]) #21 @test haskey(alpine.nonconvex_terms, [:(x[18]), :(x[13]), :(x[20])]) #22 @test haskey(alpine.nonconvex_terms, [:(x[7]), :(x[10]), :(x[13])]) #23 @test haskey(alpine.nonconvex_terms, [:(x[23]), :(x[20])]) #24 end @testset "Expression Parsing || Convex" begin @testset "Convex Parsing :: PART I" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = convex_test(solver = test_solver) alpine = _build(m) @test alpine.num_constr_convex == 19 # 0 : OBJ @test alpine.obj_structure == :convex @test alpine.nonlinear_constrs[0][:expr_orig] == :objective @test alpine.nonlinear_constrs[0][:convex_type] == :convexA @test alpine.nonlinear_constrs[0][:convexified] == false @test alpine.bounding_obj_mip[:sense] === nothing @test alpine.bounding_obj_mip[:coefs] == [1.0, 1.0] @test alpine.bounding_obj_mip[:vars] == [:(x[1]), :(x[3])] @test alpine.bounding_obj_mip[:rhs] == 0.0 @test alpine.bounding_obj_mip[:powers] == [2, 2] @test alpine.bounding_obj_mip[:cnt] == 2 # 1 @test alpine.constr_structure[1] == :convex @test alpine.nonlinear_constrs[1][:expr_orig] == :constraints @test alpine.nonlinear_constrs[1][:convex_type] == :convexA @test alpine.nonlinear_constrs[1][:convexified] == false @test alpine.bounding_constr_mip[1][:sense] == :(<=) @test alpine.bounding_constr_mip[1][:coefs] == [3.0, 4.0] @test alpine.bounding_constr_mip[1][:vars] == [:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[1][:rhs] == 25.0 @test alpine.bounding_constr_mip[1][:powers] == [2, 2] @test alpine.bounding_constr_mip[1][:cnt] == 2 # 2 @test alpine.constr_structure[2] == :convex @test alpine.nonlinear_constrs[2][:expr_orig] == :constraints @test alpine.nonlinear_constrs[2][:convex_type] == :convexA @test alpine.nonlinear_constrs[2][:convexified] == false @test alpine.bounding_constr_mip[2][:sense] == :(<=) @test alpine.bounding_constr_mip[2][:coefs] == [3.0, 4.0] @test alpine.bounding_constr_mip[2][:vars] == [:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[2][:rhs] == 25.0 @test alpine.bounding_constr_mip[2][:powers] == [2, 2] @test alpine.bounding_constr_mip[2][:cnt] == 2 # 4 @test alpine.constr_structure[4] == :convex @test alpine.nonlinear_constrs[4][:expr_orig] == :constraints @test alpine.nonlinear_constrs[4][:convex_type] == :convexA @test alpine.nonlinear_constrs[4][:convexified] == false @test alpine.bounding_constr_mip[4][:sense] == :(<=) @test alpine.bounding_constr_mip[4][:coefs] == [3.0, 4.0] @test alpine.bounding_constr_mip[4][:vars] == [:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[4][:rhs] == 10.0 @test alpine.bounding_constr_mip[4][:powers] == [2, 2] @test alpine.bounding_constr_mip[4][:cnt] == 2 # 5 @test alpine.constr_structure[5] == :convex @test alpine.nonlinear_constrs[5][:expr_orig] == :constraints @test alpine.nonlinear_constrs[5][:convex_type] == :convexA @test alpine.nonlinear_constrs[5][:convexified] == :false @test alpine.bounding_constr_mip[5][:sense] == :(<=) @test alpine.bounding_constr_mip[5][:coefs] == [3.0, 4.0, 6.0] @test alpine.bounding_constr_mip[5][:vars] == [:(x[1]), :(x[2]), :(x[3])] @test alpine.bounding_constr_mip[5][:rhs] == 10.0 @test alpine.bounding_constr_mip[5][:powers] == [2, 2, 2] @test alpine.bounding_constr_mip[5][:cnt] == 3 #6,7 excluded # 8 @test alpine.constr_structure[8] == :convex @test alpine.nonlinear_constrs[8][:expr_orig] == :constraints @test alpine.nonlinear_constrs[8][:convex_type] == :convexB @test alpine.nonlinear_constrs[8][:convexified] == :false @test alpine.bounding_constr_mip[8][:sense] == :(<=) @test alpine.bounding_constr_mip[8][:coefs] == [3.0, 1.0, 5.0] @test alpine.bounding_constr_mip[8][:vars] == [:(x[1]), :(x[2]), :(x[3])] @test alpine.bounding_constr_mip[8][:rhs] == 200.0 @test alpine.bounding_constr_mip[8][:powers] == [3.0, 3.0, 3.0] @test alpine.bounding_constr_mip[8][:cnt] == 3 # 9 @test alpine.constr_structure[9] == :convex @test alpine.nonlinear_constrs[9][:expr_orig] == :constraints @test alpine.nonlinear_constrs[9][:convex_type] == :convexB @test alpine.nonlinear_constrs[9][:convexified] == :false @test alpine.bounding_constr_mip[9][:sense] == :(<=) @test alpine.bounding_constr_mip[9][:coefs] == [1.0, 1.0, 1.0, 100.0] @test alpine.bounding_constr_mip[9][:vars] == [:(x[1]), :(x[2]), :(x[3]), :(x[4])] @test alpine.bounding_constr_mip[9][:rhs] == 200.0 @test alpine.bounding_constr_mip[9][:powers] == [3, 3, 3, 3] @test alpine.bounding_constr_mip[9][:cnt] == 4 # 11 @test alpine.constr_structure[11] == :convex @test alpine.nonlinear_constrs[11][:expr_orig] == :constraints @test alpine.nonlinear_constrs[11][:convex_type] == :convexA @test alpine.nonlinear_constrs[11][:convexified] == :false @test alpine.bounding_constr_mip[11][:sense] == :(<=) @test alpine.bounding_constr_mip[11][:coefs] == [3.0, 4.0] @test alpine.bounding_constr_mip[11][:vars] == [:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[11][:rhs] == 25.0 @test alpine.bounding_constr_mip[11][:powers] == [2, 2] @test alpine.bounding_constr_mip[11][:cnt] == 2 # 14 @test alpine.constr_structure[14] == :convex @test alpine.nonlinear_constrs[14][:expr_orig] == :constraints @test alpine.nonlinear_constrs[14][:convex_type] == :convexA @test alpine.nonlinear_constrs[14][:convexified] == :false @test alpine.bounding_constr_mip[14][:sense] == :(<=) @test alpine.bounding_constr_mip[14][:coefs] == [3.0, 5.0] @test alpine.bounding_constr_mip[14][:vars] == [:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[14][:rhs] == 25.0 @test alpine.bounding_constr_mip[14][:powers] == [2, 2] @test alpine.bounding_constr_mip[14][:cnt] == 2 # 15 @test alpine.constr_structure[15] == :convex @test alpine.nonlinear_constrs[15][:expr_orig] == :constraints @test alpine.nonlinear_constrs[15][:convex_type] == :convexA @test alpine.nonlinear_constrs[15][:convexified] == :false @test alpine.bounding_constr_mip[15][:sense] == :(<=) @test alpine.bounding_constr_mip[15][:coefs] == [3.0, 5.0, 1.0] @test alpine.bounding_constr_mip[15][:vars] == [:(x[1]), :(x[2]), :(x[4])] @test alpine.bounding_constr_mip[15][:rhs] == 25.0 @test alpine.bounding_constr_mip[15][:powers] == [2, 2, 2] @test alpine.bounding_constr_mip[15][:cnt] == 3 # 19 @test alpine.constr_structure[19] == :convex @test alpine.nonlinear_constrs[19][:expr_orig] == :constraints @test alpine.nonlinear_constrs[19][:convex_type] == :convexA @test alpine.nonlinear_constrs[19][:convexified] == :false @test alpine.bounding_constr_mip[19][:sense] == :(<=) @test alpine.bounding_constr_mip[19][:coefs] == [3.0, 16.0] @test alpine.bounding_constr_mip[19][:vars] == [:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[19][:rhs] == 40.0 @test alpine.bounding_constr_mip[19][:powers] == [2, 2] @test alpine.bounding_constr_mip[19][:cnt] == 2 # 22 @test alpine.constr_structure[22] == :convex @test alpine.nonlinear_constrs[22][:expr_orig] == :constraints @test alpine.nonlinear_constrs[22][:convex_type] == :convexA @test alpine.nonlinear_constrs[22][:convexified] == :false @test alpine.bounding_constr_mip[22][:sense] == :(<=) @test alpine.bounding_constr_mip[22][:coefs] == [3.0, 4.0, 5.0, 6.0] @test alpine.bounding_constr_mip[22][:vars] == [:(x[1]), :(x[2]), :(x[3]), :(x[4])] @test alpine.bounding_constr_mip[22][:rhs] == 15.0 @test alpine.bounding_constr_mip[22][:powers] == [2, 2, 2, 2] @test alpine.bounding_constr_mip[22][:cnt] == 4 # 25 @test alpine.constr_structure[25] == :convex @test alpine.nonlinear_constrs[25][:expr_orig] == :constraints @test alpine.nonlinear_constrs[25][:convex_type] == :convexA @test alpine.nonlinear_constrs[25][:convexified] == :false @test alpine.bounding_constr_mip[25][:sense] == :(<=) @test alpine.bounding_constr_mip[25][:coefs] == [1.0, 1.0, 1.0, 1.0, 1.0] @test alpine.bounding_constr_mip[25][:vars] == [:(x[1]), :(x[2]), :(x[3]), :(x[4]), :(x[5])] @test alpine.bounding_constr_mip[25][:rhs] == 99999.0 @test alpine.bounding_constr_mip[25][:powers] == [2, 2, 2, 2, 2] @test alpine.bounding_constr_mip[25][:cnt] == 5 # 26 @test alpine.constr_structure[26] == :convex @test alpine.nonlinear_constrs[26][:expr_orig] == :constraints @test alpine.nonlinear_constrs[26][:convex_type] == :convexA @test alpine.nonlinear_constrs[26][:convexified] == :false @test alpine.bounding_constr_mip[26][:sense] == :(<=) @test alpine.bounding_constr_mip[26][:coefs] == [3.0, 4.0] @test alpine.bounding_constr_mip[26][:vars] == [:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[26][:rhs] == 200.0 @test alpine.bounding_constr_mip[26][:powers] == [4, 4] @test alpine.bounding_constr_mip[26][:cnt] == 2 end end @testset "Expression Prasing || Linear Lifting" begin @testset "Expression Parsing || Linear Lifting || nlp2" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "partition_scaling_factor" => 8, "log_level" => 100, ) m = nlp2(solver = test_solver) alpine = _build(m) @test length(alpine.linear_terms) == 2 @test length(alpine.nonconvex_terms) == 4 lk = Vector{Any}(undef, 2) lk[1] = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, -1.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3)])), ) lk[2] = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, -2.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6)])), ) @test length(keys(alpine.linear_terms)) == 2 yids = [4, 7] for i in 1:length(keys(alpine.linear_terms)) for j in keys(alpine.linear_terms) if alpine.linear_terms[j][:id] == i @test j == lk[i] @test j[:sign] == :+ @test j[:scalar] == lk[i][:scalar] @test j[:coef_var] == lk[i][:coef_var] @test alpine.linear_terms[j][:y_idx] == yids[i] end end end @test haskey(alpine.linear_terms, lk[1]) @test haskey(alpine.linear_terms, lk[2]) @test haskey(alpine.nonconvex_terms, [:(x[2]), :(x[2])]) @test haskey(alpine.nonconvex_terms, [:(x[4]), :(x[4])]) @test haskey(alpine.nonconvex_terms, [:(x[7]), :(x[7])]) @test haskey(alpine.nonconvex_terms, [:(x[1]), :(x[1])]) @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:id] == 1 @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:id] == 3 @test alpine.nonconvex_terms[[:(x[4]), :(x[4])]][:id] == 2 @test alpine.nonconvex_terms[[:(x[7]), :(x[7])]][:id] == 4 @test alpine.nonconvex_terms[[:(x[1]), :(x[1])]][:lifted_var_ref].args[2] == 3 @test alpine.nonconvex_terms[[:(x[2]), :(x[2])]][:lifted_var_ref].args[2] == 6 @test alpine.nonconvex_terms[[:(x[4]), :(x[4])]][:lifted_var_ref].args[2] == 5 @test alpine.nonconvex_terms[[:(x[7]), :(x[7])]][:lifted_var_ref].args[2] == 8 end @testset "Expression Parsing || Linear Lifting || general" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = basic_linear_lift(solver = test_solver) alpine = _build(m) # Setup internal model lk = Vector{Any}(undef, 5) lk[1] = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1), (-1.0, 2)])), ) lk[2] = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(3.0, 2), (-1.0, 3)])), ) lk[3] = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1), (1.0, 3)])), ) lk[4] = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2), (1.0, 1)])), ) lk[5] = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 3.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2), (1.0, 1), (1.0, 3)])), ) @test length(keys(alpine.linear_terms)) == 5 yids = [8, 9, 12, 14, 16] for i in 1:length(keys(alpine.linear_terms)) for j in keys(alpine.linear_terms) if alpine.linear_terms[j][:id] == i @test j == lk[i] @test j[:sign] == :+ @test j[:scalar] == lk[i][:scalar] @test j[:coef_var] == lk[i][:coef_var] @test alpine.linear_terms[j][:y_idx] == yids[i] end end end nlk1 = [:(x[8]), :(x[9]), :(x[12])] nlk2 = [:(x[2]), :(x[2])] nlk3 = [:(x[2]), :(x[3])] nlk4 = [:(x[8]), :(x[8])] nlk5 = [:(x[1]), :(x[3])] nlk6 = [:(x[8]), :(x[9])] nlk7 = [:(x[1]), :(x[2])] nlk8 = [:(x[16]), :(x[15])] nlk9 = [:(x[14]), :(x[14])] @test alpine.nonconvex_terms[nlk1][:id] == 7 @test alpine.nonconvex_terms[nlk2][:id] == 3 @test alpine.nonconvex_terms[nlk3][:id] == 4 @test alpine.nonconvex_terms[nlk4][:id] == 6 @test alpine.nonconvex_terms[nlk5][:id] == 2 @test alpine.nonconvex_terms[nlk6][:id] == 5 @test alpine.nonconvex_terms[nlk7][:id] == 1 @test alpine.nonconvex_terms[nlk8][:id] == 9 @test alpine.nonconvex_terms[nlk9][:id] == 8 @test alpine.nonconvex_terms[nlk1][:lifted_var_ref].args[2] == 13 @test alpine.nonconvex_terms[nlk2][:lifted_var_ref].args[2] == 6 @test alpine.nonconvex_terms[nlk3][:lifted_var_ref].args[2] == 7 @test alpine.nonconvex_terms[nlk4][:lifted_var_ref].args[2] == 11 @test alpine.nonconvex_terms[nlk5][:lifted_var_ref].args[2] == 5 @test alpine.nonconvex_terms[nlk6][:lifted_var_ref].args[2] == 10 @test alpine.nonconvex_terms[nlk7][:lifted_var_ref].args[2] == 4 @test alpine.nonconvex_terms[nlk8][:lifted_var_ref].args[2] == 17 @test alpine.nonconvex_terms[nlk9][:lifted_var_ref].args[2] == 15 @test alpine.nonconvex_terms[nlk1][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[nlk2][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[nlk3][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[nlk4][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[nlk5][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[nlk6][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[nlk7][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[nlk8][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[nlk9][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[nlk1][:var_idxs] == [8, 9, 12] @test alpine.nonconvex_terms[nlk2][:var_idxs] == [2, 2] @test alpine.nonconvex_terms[nlk3][:var_idxs] == [2, 3] @test alpine.nonconvex_terms[nlk4][:var_idxs] == [8] @test alpine.nonconvex_terms[nlk5][:var_idxs] == [1, 3] @test alpine.nonconvex_terms[nlk6][:var_idxs] == [8, 9] @test alpine.nonconvex_terms[nlk7][:var_idxs] == [1, 2] @test alpine.nonconvex_terms[nlk8][:var_idxs] == [16, 15] @test alpine.nonconvex_terms[nlk9][:var_idxs] == [14] end @testset "Expression Parsing || Linear Lifting || brainpc3" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "partition_scaling_factor" => 8, "log_level" => 100, ) m = brainpc3(solver = test_solver) alpine = _build(m) @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:y_idx] == 6913 @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:id] == 2 @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:lifted_constr_ref] == :(x[6913] == (*)(x[6912])) @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6912]), :(x[6912])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:y_idx] == 6970 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:id] == 25 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:lifted_constr_ref] == :(x[6970] == x[6903] * x[6969]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6969])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:y_idx] == 6915 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:id] == 3 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:lifted_constr_ref] == :(x[6915] == x[6903] * x[6914]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6914])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:y_idx] == 6920 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:id] == 5 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:lifted_constr_ref] == :(x[6920] == x[6903] * x[6919]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6919])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:y_idx] == 6928 @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:id] == 8 @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:lifted_constr_ref] == :(x[6928] == (*)(x[6927])) @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6927]), :(x[6927])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:y_idx] == 6953 @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:id] == 18 @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:lifted_constr_ref] == :(x[6953] == (*)(x[6952])) @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6952]), :(x[6952])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:y_idx] == 6963 @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:id] == 22 @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:lifted_constr_ref] == :(x[6963] == (*)(x[6962])) @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6962]), :(x[6962])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:y_idx] == 6975 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:id] == 27 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:lifted_constr_ref] == :(x[6975] == x[6903] * x[6974]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6974])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:y_idx] == 6935 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:id] == 11 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:lifted_constr_ref] == :(x[6935] == x[6903] * x[6934]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6934])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:y_idx] == 6960 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:id] == 21 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:lifted_constr_ref] == :(x[6960] == x[6903] * x[6959]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6959])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:y_idx] == 7015 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:id] == 43 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:lifted_constr_ref] == :(x[7015] == x[6903] * x[7014]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7014])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:y_idx] == 6940 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:id] == 13 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:lifted_constr_ref] == :(x[6940] == x[6903] * x[6939]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6939])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:y_idx] == 7018 @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:id] == 44 @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:lifted_constr_ref] == :(x[7018] == (*)(x[7017])) @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[7017]), :(x[7017])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:y_idx] == 6930 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:id] == 9 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:lifted_constr_ref] == :(x[6930] == x[6903] * x[6929]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6929])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:y_idx] == 7013 @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:id] == 42 @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:lifted_constr_ref] == :(x[7013] == (*)(x[7012])) @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[7012]), :(x[7012])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:y_idx] == 6948 @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:id] == 16 @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:lifted_constr_ref] == :(x[6948] == (*)(x[6947])) @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6947]), :(x[6947])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:y_idx] == 7033 @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:id] == 50 @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:lifted_constr_ref] == :(x[7033] == (*)(x[7032])) @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[7032]), :(x[7032])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:y_idx] == 6998 @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:id] == 36 @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:lifted_constr_ref] == :(x[6998] == (*)(x[6997])) @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6997]), :(x[6997])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:y_idx] == 7028 @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:id] == 48 @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:lifted_constr_ref] == :(x[7028] == (*)(x[7027])) @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[7027]), :(x[7027])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:y_idx] == 7038 @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:id] == 52 @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:lifted_constr_ref] == :(x[7038] == (*)(x[7037])) @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[7037]), :(x[7037])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:y_idx] == 7008 @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:id] == 40 @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:lifted_constr_ref] == :(x[7008] == (*)(x[7007])) @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[7007]), :(x[7007])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:y_idx] == 6965 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:id] == 23 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:lifted_constr_ref] == :(x[6965] == x[6903] * x[6964]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6964])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:y_idx] == 6925 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:id] == 7 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:lifted_constr_ref] == :(x[6925] == x[6903] * x[6924]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6924])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:y_idx] == 6980 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:id] == 29 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:lifted_constr_ref] == :(x[6980] == x[6903] * x[6979]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6979])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:y_idx] == 6995 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:id] == 35 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:lifted_constr_ref] == :(x[6995] == x[6903] * x[6994]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6994])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:y_idx] == 6973 @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:id] == 26 @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:lifted_constr_ref] == :(x[6973] == (*)(x[6972])) @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6972]), :(x[6972])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:y_idx] == 7020 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:id] == 45 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:lifted_constr_ref] == :(x[7020] == x[6903] * x[7019]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7019])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:y_idx] == 6993 @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:id] == 34 @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:lifted_constr_ref] == :(x[6993] == (*)(x[6992])) @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6992]), :(x[6992])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:y_idx] == 7003 @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:id] == 38 @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:lifted_constr_ref] == :(x[7003] == (*)(x[7002])) @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[7002]), :(x[7002])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:y_idx] == 7023 @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:id] == 46 @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:lifted_constr_ref] == :(x[7023] == (*)(x[7022])) @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[7022]), :(x[7022])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:y_idx] == 6909 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:id] == 1 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:lifted_constr_ref] == :(x[6909] == x[6903] * x[6908]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6908])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:y_idx] == 6950 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:id] == 17 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:lifted_constr_ref] == :(x[6950] == x[6903] * x[6949]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6949])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:y_idx] == 7005 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:id] == 39 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:lifted_constr_ref] == :(x[7005] == x[6903] * x[7004]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7004])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:y_idx] == 6918 @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:id] == 4 @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:lifted_constr_ref] == :(x[6918] == (*)(x[6917])) @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6917]), :(x[6917])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:y_idx] == 6938 @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:id] == 12 @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:lifted_constr_ref] == :(x[6938] == (*)(x[6937])) @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6937]), :(x[6937])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:y_idx] == 6933 @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:id] == 10 @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:lifted_constr_ref] == :(x[6933] == (*)(x[6932])) @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6932]), :(x[6932])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:y_idx] == 6990 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:id] == 33 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:lifted_constr_ref] == :(x[6990] == x[6903] * x[6989]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6989])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:y_idx] == 6978 @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:id] == 28 @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:lifted_constr_ref] == :(x[6978] == (*)(x[6977])) @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6977]), :(x[6977])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:y_idx] == 6988 @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:id] == 32 @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:lifted_constr_ref] == :(x[6988] == (*)(x[6987])) @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6987]), :(x[6987])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:y_idx] == 7035 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:id] == 51 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:lifted_constr_ref] == :(x[7035] == x[6903] * x[7034]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7034])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:y_idx] == 6968 @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:id] == 24 @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:lifted_constr_ref] == :(x[6968] == (*)(x[6967])) @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6967]), :(x[6967])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:y_idx] == 6958 @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:id] == 20 @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:lifted_constr_ref] == :(x[6958] == (*)(x[6957])) @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6957]), :(x[6957])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:y_idx] == 7010 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:id] == 41 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:lifted_constr_ref] == :(x[7010] == x[6903] * x[7009]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7009])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:y_idx] == 6943 @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:id] == 14 @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:lifted_constr_ref] == :(x[6943] == (*)(x[6942])) @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6942]), :(x[6942])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:y_idx] == 6983 @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:id] == 30 @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:lifted_constr_ref] == :(x[6983] == (*)(x[6982])) @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6982]), :(x[6982])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:y_idx] == 7000 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:id] == 37 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:lifted_constr_ref] == :(x[7000] == x[6903] * x[6999]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6999])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:y_idx] == 6945 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:id] == 15 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:lifted_constr_ref] == :(x[6945] == x[6903] * x[6944]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6944])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:y_idx] == 7025 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:id] == 47 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:lifted_constr_ref] == :(x[7025] == x[6903] * x[7024]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7024])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:y_idx] == 6955 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:id] == 19 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:lifted_constr_ref] == :(x[6955] == x[6903] * x[6954]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6954])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:y_idx] == 6923 @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:id] == 6 @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:lifted_constr_ref] == :(x[6923] == (*)(x[6922])) @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6922]), :(x[6922])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:y_idx] == 6985 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:id] == 31 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:lifted_constr_ref] == :(x[6985] == x[6903] * x[6984]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[6984])]][:constr_id] == Set(Any[0]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:y_idx] == 7030 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:id] == 49 @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:lifted_constr_ref] == :(x[7030] == x[6903] * x[7029]) @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:y_type] == :Cont @test alpine.nonconvex_terms[Expr[:(x[6903]), :(x[7029])]][:constr_id] == Set(Any[0]) lk1 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6910), (-1.0, 6909)])), ) @test alpine.linear_terms[lk1][:y_idx] == 6911 @test alpine.linear_terms[lk1][:id] == 3 @test alpine.linear_terms[lk1][:y_type] == :(Cont) lk2 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3467), (1.0, 16)])), ) @test alpine.linear_terms[lk2][:y_idx] == 6908 @test alpine.linear_terms[lk2][:id] == 1 @test alpine.linear_terms[lk2][:y_type] == :(Cont) lk3 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(0.001548, 6903), (1.0, 7016), (1.0, 5702)]), ), ) @test alpine.linear_terms[lk3][:y_idx] == 7017 @test alpine.linear_terms[lk3][:id] == 67 @test alpine.linear_terms[lk3][:y_type] == :(Cont) lk4 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 5162), (1.0, 1711)])), ) @test alpine.linear_terms[lk4][:y_idx] == 7004 @test alpine.linear_terms[lk4][:id] == 59 @test alpine.linear_terms[lk4][:y_type] == :(Cont) lk5 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 7021), (0.001435, 6903), (1.0, 6002)]), ), ) @test alpine.linear_terms[lk5][:y_idx] == 7022 @test alpine.linear_terms[lk5][:id] == 70 @test alpine.linear_terms[lk5][:y_type] == :(Cont) lk6 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6935), (1.0, 166)])), ) @test alpine.linear_terms[lk6][:y_idx] == 6936 @test alpine.linear_terms[lk6][:id] == 18 @test alpine.linear_terms[lk6][:y_type] == :(Cont) lk7 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 4262), (0.00247, 6903), (1.0, 6981)]), ), ) @test alpine.linear_terms[lk7][:y_idx] == 6982 @test alpine.linear_terms[lk7][:id] == 46 @test alpine.linear_terms[lk7][:y_type] == :(Cont) lk8 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7005), (1.0, 1711)])), ) @test alpine.linear_terms[lk8][:y_idx] == 7006 @test alpine.linear_terms[lk8][:id] == 60 @test alpine.linear_terms[lk8][:y_type] == :(Cont) lk9 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1951), (1.0, 5402)])), ) @test alpine.linear_terms[lk9][:y_idx] == 7009 @test alpine.linear_terms[lk9][:id] == 62 @test alpine.linear_terms[lk9][:y_type] == :(Cont) lk10 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 226), (-1.0, 6945)])), ) @test alpine.linear_terms[lk10][:y_idx] == 6946 @test alpine.linear_terms[lk10][:id] == 24 @test alpine.linear_terms[lk10][:y_type] == :(Cont) lk11 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7030), (1.0, 3151)])), ) @test alpine.linear_terms[lk11][:y_idx] == 7031 @test alpine.linear_terms[lk11][:id] == 75 @test alpine.linear_terms[lk11][:y_type] == :(Cont) lk12 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 6991), (1.0, 4622), (0.002066, 6903)]), ), ) @test alpine.linear_terms[lk12][:y_idx] == 6992 @test alpine.linear_terms[lk12][:id] == 52 @test alpine.linear_terms[lk12][:y_type] == :(Cont) lk13 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 7026), (1.0, 6302), (0.001323, 6903)]), ), ) @test alpine.linear_terms[lk13][:y_idx] == 7027 @test alpine.linear_terms[lk13][:id] == 73 @test alpine.linear_terms[lk13][:y_type] == :(Cont) lk14 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 46), (1.0, 3497)])), ) @test alpine.linear_terms[lk14][:y_idx] == 6914 @test alpine.linear_terms[lk14][:id] == 5 @test alpine.linear_terms[lk14][:y_type] == :(Cont) lk15 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6960), (1.0, 391)])), ) @test alpine.linear_terms[lk15][:y_idx] == 6961 @test alpine.linear_terms[lk15][:id] == 33 @test alpine.linear_terms[lk15][:y_type] == :(Cont) lk16 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 631), (-1.0, 6975)])), ) @test alpine.linear_terms[lk16][:y_idx] == 6976 @test alpine.linear_terms[lk16][:id] == 42 @test alpine.linear_terms[lk16][:y_type] == :(Cont) lk17 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1351), (-1.0, 6995)])), ) @test alpine.linear_terms[lk17][:y_idx] == 6996 @test alpine.linear_terms[lk17][:id] == 54 @test alpine.linear_terms[lk17][:y_type] == :(Cont) lk18 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3557), (1.0, 106)])), ) @test alpine.linear_terms[lk18][:y_idx] == 6924 @test alpine.linear_terms[lk18][:id] == 11 @test alpine.linear_terms[lk18][:y_type] == :(Cont) lk19 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 3647), (1.0, 6941), (0.004795, 6903)]), ), ) @test alpine.linear_terms[lk19][:y_idx] == 6942 @test alpine.linear_terms[lk19][:id] == 22 @test alpine.linear_terms[lk19][:y_type] == :(Cont) lk20 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3722), (1.0, 271)])), ) @test alpine.linear_terms[lk20][:y_idx] == 6949 @test alpine.linear_terms[lk20][:id] == 26 @test alpine.linear_terms[lk20][:y_type] == :(Cont) lk21 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3647), (1.0, 196)])), ) @test alpine.linear_terms[lk21][:y_idx] == 6939 @test alpine.linear_terms[lk21][:id] == 20 @test alpine.linear_terms[lk21][:y_type] == :(Cont) lk22 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 3467), (1.0, 6911), (6.34e-6, 6903)]), ), ) @test alpine.linear_terms[lk22][:y_idx] == 6912 @test alpine.linear_terms[lk22][:id] == 4 @test alpine.linear_terms[lk22][:y_type] == :(Cont) lk23 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1531), (1.0, 4982)])), ) @test alpine.linear_terms[lk23][:y_idx] == 6999 @test alpine.linear_terms[lk23][:id] == 56 @test alpine.linear_terms[lk23][:y_type] == :(Cont) lk24 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 106), (-1.0, 6925)])), ) @test alpine.linear_terms[lk24][:y_idx] == 6926 @test alpine.linear_terms[lk24][:id] == 12 @test alpine.linear_terms[lk24][:y_type] == :(Cont) lk25 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2251), (-1.0, 7015)])), ) @test alpine.linear_terms[lk25][:y_idx] == 7016 @test alpine.linear_terms[lk25][:id] == 66 @test alpine.linear_terms[lk25][:y_type] == :(Cont) lk26 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 6936), (0.004985, 6903), (1.0, 3617)]), ), ) @test alpine.linear_terms[lk26][:y_idx] == 6937 @test alpine.linear_terms[lk26][:id] == 19 @test alpine.linear_terms[lk26][:y_type] == :(Cont) lk27 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6915), (1.0, 46)])), ) @test alpine.linear_terms[lk27][:y_idx] == 6916 @test alpine.linear_terms[lk27][:id] == 6 @test alpine.linear_terms[lk27][:y_type] == :(Cont) lk28 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 3557), (0.005968, 6903), (1.0, 6926)]), ), ) @test alpine.linear_terms[lk28][:y_idx] == 6927 @test alpine.linear_terms[lk28][:id] == 13 @test alpine.linear_terms[lk28][:y_type] == :(Cont) lk29 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 271), (-1.0, 6950)])), ) @test alpine.linear_terms[lk29][:y_idx] == 6951 @test alpine.linear_terms[lk29][:id] == 27 @test alpine.linear_terms[lk29][:y_type] == :(Cont) lk30 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(0.002971, 6903), (1.0, 6971), (1.0, 3962)]), ), ) @test alpine.linear_terms[lk30][:y_idx] == 6972 @test alpine.linear_terms[lk30][:id] == 40 @test alpine.linear_terms[lk30][:y_type] == :(Cont) lk31 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 511), (-1.0, 6970)])), ) @test alpine.linear_terms[lk31][:y_idx] == 6971 @test alpine.linear_terms[lk31][:id] == 39 @test alpine.linear_terms[lk31][:y_type] == :(Cont) lk32 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 7031), (1.0, 6602), (0.00121, 6903)]), ), ) @test alpine.linear_terms[lk32][:y_idx] == 7032 @test alpine.linear_terms[lk32][:id] == 76 @test alpine.linear_terms[lk32][:y_type] == :(Cont) lk33 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(0.00166, 6903), (1.0, 7011), (1.0, 5402)]), ), ) @test alpine.linear_terms[lk33][:y_idx] == 7012 @test alpine.linear_terms[lk33][:id] == 64 @test alpine.linear_terms[lk33][:y_type] == :(Cont) lk34 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, -0.003214), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 16)])), ) @test alpine.linear_terms[lk34][:y_idx] == 6910 @test alpine.linear_terms[lk34][:id] == 2 @test alpine.linear_terms[lk34][:y_type] == :(Cont) lk35 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7035), (1.0, 3451)])), ) @test alpine.linear_terms[lk35][:y_idx] == 7036 @test alpine.linear_terms[lk35][:id] == 78 @test alpine.linear_terms[lk35][:y_type] == :(Cont) lk36 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2551), (1.0, 6002)])), ) @test alpine.linear_terms[lk36][:y_idx] == 7019 @test alpine.linear_terms[lk36][:id] == 68 @test alpine.linear_terms[lk36][:y_type] == :(Cont) lk37 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3842), (1.0, 391)])), ) @test alpine.linear_terms[lk37][:y_idx] == 6959 @test alpine.linear_terms[lk37][:id] == 32 @test alpine.linear_terms[lk37][:y_type] == :(Cont) lk38 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 6966), (0.00307, 6903), (1.0, 3902)]), ), ) @test alpine.linear_terms[lk38][:y_idx] == 6967 @test alpine.linear_terms[lk38][:id] == 37 @test alpine.linear_terms[lk38][:y_type] == :(Cont) lk39 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 3722), (0.003829, 6903), (1.0, 6951)]), ), ) @test alpine.linear_terms[lk39][:y_idx] == 6952 @test alpine.linear_terms[lk39][:id] == 28 @test alpine.linear_terms[lk39][:y_type] == :(Cont) lk40 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 451), (1.0, 3902)])), ) @test alpine.linear_terms[lk40][:y_idx] == 6964 @test alpine.linear_terms[lk40][:id] == 35 @test alpine.linear_terms[lk40][:y_type] == :(Cont) lk41 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 7006), (1.0, 5162), (0.001713, 6903)]), ), ) @test alpine.linear_terms[lk41][:y_idx] == 7007 @test alpine.linear_terms[lk41][:id] == 61 @test alpine.linear_terms[lk41][:y_type] == :(Cont) lk42 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 811), (-1.0, 6980)])), ) @test alpine.linear_terms[lk42][:y_idx] == 6981 @test alpine.linear_terms[lk42][:id] == 45 @test alpine.linear_terms[lk42][:y_type] == :(Cont) lk43 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 7001), (1.0, 4982), (0.00173, 6903)]), ), ) @test alpine.linear_terms[lk43][:y_idx] == 7002 @test alpine.linear_terms[lk43][:id] == 58 @test alpine.linear_terms[lk43][:y_type] == :(Cont) lk44 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6920), (1.0, 76)])), ) @test alpine.linear_terms[lk44][:y_idx] == 6921 @test alpine.linear_terms[lk44][:id] == 9 @test alpine.linear_terms[lk44][:y_type] == :(Cont) lk45 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 4622), (1.0, 1171)])), ) @test alpine.linear_terms[lk45][:y_idx] == 6989 @test alpine.linear_terms[lk45][:id] == 50 @test alpine.linear_terms[lk45][:y_type] == :(Cont) lk46 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 991), (1.0, 4442)])), ) @test alpine.linear_terms[lk46][:y_idx] == 6984 @test alpine.linear_terms[lk46][:id] == 47 @test alpine.linear_terms[lk46][:y_type] == :(Cont) lk47 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6930), (1.0, 136)])), ) @test alpine.linear_terms[lk47][:y_idx] == 6931 @test alpine.linear_terms[lk47][:id] == 15 @test alpine.linear_terms[lk47][:y_type] == :(Cont) lk48 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 4802), (0.001891, 6903), (1.0, 6996)]), ), ) @test alpine.linear_terms[lk48][:y_idx] == 6997 @test alpine.linear_terms[lk48][:id] == 55 @test alpine.linear_terms[lk48][:y_type] == :(Cont) lk49 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 511), (1.0, 3962)])), ) @test alpine.linear_terms[lk49][:y_idx] == 6969 @test alpine.linear_terms[lk49][:id] == 38 @test alpine.linear_terms[lk49][:y_type] == :(Cont) lk50 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 811), (1.0, 4262)])), ) @test alpine.linear_terms[lk50][:y_idx] == 6979 @test alpine.linear_terms[lk50][:id] == 44 @test alpine.linear_terms[lk50][:y_type] == :(Cont) lk51 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(0.01551, 6903), (1.0, 6916), (1.0, 3497)]), ), ) @test alpine.linear_terms[lk51][:y_idx] == 6917 @test alpine.linear_terms[lk51][:id] == 7 @test alpine.linear_terms[lk51][:y_type] == :(Cont) lk52 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 451), (-1.0, 6965)])), ) @test alpine.linear_terms[lk52][:y_idx] == 6966 @test alpine.linear_terms[lk52][:id] == 36 @test alpine.linear_terms[lk52][:y_type] == :(Cont) lk53 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(0.005773, 6903), (1.0, 3587), (1.0, 6931)]), ), ) @test alpine.linear_terms[lk53][:y_idx] == 6932 @test alpine.linear_terms[lk53][:id] == 16 @test alpine.linear_terms[lk53][:y_type] == :(Cont) lk54 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 631), (1.0, 4082)])), ) @test alpine.linear_terms[lk54][:y_idx] == 6974 @test alpine.linear_terms[lk54][:id] == 41 @test alpine.linear_terms[lk54][:y_type] == :(Cont) lk55 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 991), (-1.0, 6985)])), ) @test alpine.linear_terms[lk55][:y_idx] == 6986 @test alpine.linear_terms[lk55][:id] == 48 @test alpine.linear_terms[lk55][:y_type] == :(Cont) lk56 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 4802), (1.0, 1351)])), ) @test alpine.linear_terms[lk56][:y_idx] == 6994 @test alpine.linear_terms[lk56][:id] == 53 @test alpine.linear_terms[lk56][:y_type] == :(Cont) lk57 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 6946), (0.004409, 6903), (1.0, 3677)]), ), ) @test alpine.linear_terms[lk57][:y_idx] == 6947 @test alpine.linear_terms[lk57][:id] == 25 @test alpine.linear_terms[lk57][:y_type] == :(Cont) lk58 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 2251), (1.0, 5702)])), ) @test alpine.linear_terms[lk58][:y_idx] == 7014 @test alpine.linear_terms[lk58][:id] == 65 @test alpine.linear_terms[lk58][:y_type] == :(Cont) lk59 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7020), (1.0, 2551)])), ) @test alpine.linear_terms[lk59][:y_idx] == 7021 @test alpine.linear_terms[lk59][:id] == 69 @test alpine.linear_terms[lk59][:y_type] == :(Cont) lk60 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6940), (1.0, 196)])), ) @test alpine.linear_terms[lk60][:y_idx] == 6941 @test alpine.linear_terms[lk60][:id] == 21 @test alpine.linear_terms[lk60][:y_type] == :(Cont) lk61 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 3527), (1.0, 6921), (0.008919, 6903)]), ), ) @test alpine.linear_terms[lk61][:y_idx] == 6922 @test alpine.linear_terms[lk61][:id] == 10 @test alpine.linear_terms[lk61][:y_type] == :(Cont) lk62 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7025), (1.0, 2851)])), ) @test alpine.linear_terms[lk62][:y_idx] == 7026 @test alpine.linear_terms[lk62][:id] == 72 @test alpine.linear_terms[lk62][:y_type] == :(Cont) lk63 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 6986), (1.0, 4442), (0.002252, 6903)]), ), ) @test alpine.linear_terms[lk63][:y_idx] == 6987 @test alpine.linear_terms[lk63][:id] == 49 @test alpine.linear_terms[lk63][:y_type] == :(Cont) lk64 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(0.002765, 6903), (1.0, 6976), (1.0, 4082)]), ), ) @test alpine.linear_terms[lk64][:y_idx] == 6977 @test alpine.linear_terms[lk64][:id] == 43 @test alpine.linear_terms[lk64][:y_type] == :(Cont) lk65 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 6956), (0.003269, 6903), (1.0, 3782)]), ), ) @test alpine.linear_terms[lk65][:y_idx] == 6957 @test alpine.linear_terms[lk65][:id] == 31 @test alpine.linear_terms[lk65][:y_type] == :(Cont) lk66 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3587), (1.0, 136)])), ) @test alpine.linear_terms[lk66][:y_idx] == 6929 @test alpine.linear_terms[lk66][:id] == 14 @test alpine.linear_terms[lk66][:y_type] == :(Cont) lk67 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 166), (1.0, 3617)])), ) @test alpine.linear_terms[lk67][:y_idx] == 6934 @test alpine.linear_terms[lk67][:id] == 17 @test alpine.linear_terms[lk67][:y_type] == :(Cont) lk68 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 7010), (1.0, 1951)])), ) @test alpine.linear_terms[lk68][:y_idx] == 7011 @test alpine.linear_terms[lk68][:id] == 63 @test alpine.linear_terms[lk68][:y_type] == :(Cont) lk69 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 7036), (0.001098, 6903), (1.0, 6902)]), ), ) @test alpine.linear_terms[lk69][:y_idx] == 7037 @test alpine.linear_terms[lk69][:id] == 79 @test alpine.linear_terms[lk69][:y_type] == :(Cont) lk70 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3527), (1.0, 76)])), ) @test alpine.linear_terms[lk70][:y_idx] == 6919 @test alpine.linear_terms[lk70][:id] == 8 @test alpine.linear_terms[lk70][:y_type] == :(Cont) lk71 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}( :coef_var, Set(Any[(1.0, 6961), (1.0, 3842), (0.00317, 6903)]), ), ) @test alpine.linear_terms[lk71][:y_idx] == 6962 @test alpine.linear_terms[lk71][:id] == 34 @test alpine.linear_terms[lk71][:y_type] == :(Cont) lk72 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6990), (1.0, 1171)])), ) @test alpine.linear_terms[lk72][:y_idx] == 6991 @test alpine.linear_terms[lk72][:id] == 51 @test alpine.linear_terms[lk72][:y_type] == :(Cont) lk73 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3451), (1.0, 6902)])), ) @test alpine.linear_terms[lk73][:y_idx] == 7034 @test alpine.linear_terms[lk73][:id] == 77 @test alpine.linear_terms[lk73][:y_type] == :(Cont) lk74 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6302), (1.0, 2851)])), ) @test alpine.linear_terms[lk74][:y_idx] == 7024 @test alpine.linear_terms[lk74][:id] == 71 @test alpine.linear_terms[lk74][:y_type] == :(Cont) lk75 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1531), (-1.0, 7000)])), ) @test alpine.linear_terms[lk75][:y_idx] == 7001 @test alpine.linear_terms[lk75][:id] == 57 @test alpine.linear_terms[lk75][:y_type] == :(Cont) lk76 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3151), (1.0, 6602)])), ) @test alpine.linear_terms[lk76][:y_idx] == 7029 @test alpine.linear_terms[lk76][:id] == 74 @test alpine.linear_terms[lk76][:y_type] == :(Cont) lk77 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 3782), (1.0, 331)])), ) @test alpine.linear_terms[lk77][:y_idx] == 6954 @test alpine.linear_terms[lk77][:id] == 29 @test alpine.linear_terms[lk77][:y_type] == :(Cont) lk78 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(-1.0, 6955), (1.0, 331)])), ) @test alpine.linear_terms[lk78][:y_idx] == 6956 @test alpine.linear_terms[lk78][:id] == 30 @test alpine.linear_terms[lk78][:y_type] == :(Cont) lk79 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 226), (1.0, 3677)])), ) @test alpine.linear_terms[lk79][:y_idx] == 6944 @test alpine.linear_terms[lk79][:id] == 23 @test alpine.linear_terms[lk79][:y_type] == :(Cont) end end @testset "Expression Parsing || Basic Multiplication Operators (Machine Generated for diffs)" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => JUNIPER, "mip_solver" => HIGHS, "log_level" => 100, ) m = operator_basic(solver = test_solver) JuMP.set_optimize_hook(m, MOI.Utilities.attach_optimizer) JuMP.optimize!(m) JuMP.set_optimize_hook(m, nothing) alpine = JuMP.backend(m).optimizer.model Alpine.load!(alpine) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4])]][:y_idx] == 31 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4])]][:id] == 27 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4])]][:lifted_constr_ref] == :(x[31] == x[3] * x[4]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[76])]][:y_idx] == 83 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[76])]][:id] == 79 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[76])]][:lifted_constr_ref] == :(x[83] == x[4] * x[5] * x[76]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[76])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[2])]][:y_idx] == 9 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[2])]][:id] == 5 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[2])]][:lifted_constr_ref] == :(x[9] == (*)(x[2])) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[2])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7])]][:y_idx] == 19 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7])]][:id] == 15 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7])]][:lifted_constr_ref] == :(x[19] == x[5] * x[7]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[31])]][:y_idx] == 32 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[31])]][:id] == 28 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[31])]][:lifted_constr_ref] == :(x[32] == x[2] * x[31]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[31])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10])]][:y_idx] == 49 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10])]][:id] == 45 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10])]][:lifted_constr_ref] == :(x[49] == x[1] * x[2] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5]), :(x[9])]][:y_idx] == 50 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5]), :(x[9])]][:id] == 46 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5]), :(x[9])]][:lifted_constr_ref] == :(x[50] == x[3] * x[5] * x[9]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[5]), :(x[9])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[47])]][:y_idx] == 69 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[47])]][:id] == 65 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[47])]][:lifted_constr_ref] == :(x[69] == x[4] * x[47]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[47])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[4])]][:y_idx] == 28 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[4])]][:id] == 24 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[4])]][:lifted_constr_ref] == :(x[28] == (*)(x[4])) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[4])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[10])]][:y_idx] == 37 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[10])]][:id] == 33 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[10])]][:lifted_constr_ref] == :(x[37] == x[4] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[10])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[1])]][:y_idx] == 5 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[1])]][:id] == 1 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[1])]][:lifted_constr_ref] == :(x[5] == (*)(x[1])) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[1])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[95])]][:y_idx] == 96 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[95])]][:id] == 92 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[95])]][:lifted_constr_ref] == :(x[96] == x[5] * x[95]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[95])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[40])]][:y_idx] == 41 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[40])]][:id] == 37 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[40])]][:lifted_constr_ref] == :(x[41] == x[2] * x[40]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[40])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10])]][:y_idx] == 26 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10])]][:id] == 22 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10])]][:lifted_constr_ref] == :(x[26] == x[6] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[78]), :(x[28])]][:y_idx] == 84 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[78]), :(x[28])]][:id] == 80 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[78]), :(x[28])]][:lifted_constr_ref] == :(x[84] == x[1] * x[78] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[78]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[43])]][:y_idx] == 58 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[43])]][:id] == 54 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[43])]][:lifted_constr_ref] == :(x[58] == x[6] * x[43]) @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[43])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[6]), :(x[10])]][:y_idx] == 106 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[6]), :(x[10])]][:id] == 102 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[6]), :(x[10])]][:lifted_constr_ref] == :(x[106] == x[4] * x[6] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[6]), :(x[10])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4]), :(x[10])]][:y_idx] == 90 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4]), :(x[10])]][:id] == 86 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4]), :(x[10])]][:lifted_constr_ref] == :(x[90] == x[2] * x[4] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[4]), :(x[10])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[41])]][:y_idx] == 42 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[41])]][:id] == 38 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[41])]][:lifted_constr_ref] == :(x[42] == x[1] * x[41]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[41])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[37])]][:y_idx] == 38 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[37])]][:id] == 34 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[37])]][:lifted_constr_ref] == :(x[38] == x[2] * x[37]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[37])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[85])]][:y_idx] == 87 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[85])]][:id] == 83 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[85])]][:lifted_constr_ref] == :(x[87] == x[5] * x[85]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[85])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5]), :(x[28])]][:y_idx] == 66 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5]), :(x[28])]][:id] == 62 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5]), :(x[28])]][:lifted_constr_ref] == :(x[66] == x[2] * x[3] * x[5] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10])]][:y_idx] == 53 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10])]][:id] == 49 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10])]][:lifted_constr_ref] == :(x[53] == x[5] * x[9] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6]), :(x[28])]][:y_idx] == 107 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6]), :(x[28])]][:id] == 103 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6]), :(x[28])]][:lifted_constr_ref] == :(x[107] == x[3] * x[6] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5])]][:y_idx] == 17 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5])]][:id] == 13 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5])]][:lifted_constr_ref] == :(x[17] == x[2] * x[5]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[37])]][:y_idx] == 57 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[37])]][:id] == 53 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[37])]][:lifted_constr_ref] == :(x[57] == x[6] * x[37]) @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[37])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7]), :(x[28])]][:y_idx] == 81 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7]), :(x[28])]][:id] == 77 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7]), :(x[28])]][:lifted_constr_ref] == :(x[81] == x[5] * x[7] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[7]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[38])]][:y_idx] == 39 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[38])]][:id] == 35 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[38])]][:lifted_constr_ref] == :(x[39] == x[1] * x[38]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[38])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[9])]][:y_idx] == 48 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[9])]][:id] == 44 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[9])]][:lifted_constr_ref] == :(x[48] == x[1] * x[3] * x[9]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[9])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[23])]][:y_idx] == 24 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[23])]][:id] == 20 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[23])]][:lifted_constr_ref] == :(x[24] == x[4] * x[23]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[23])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[17])]][:y_idx] == 23 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[17])]][:id] == 19 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[17])]][:lifted_constr_ref] == :(x[23] == x[3] * x[17]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[17])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[10])]][:y_idx] == 51 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[10])]][:id] == 47 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[10])]][:lifted_constr_ref] == :(x[51] == x[1] * x[9] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[10])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[7])]][:y_idx] == 75 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[7])]][:id] == 71 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[7])]][:lifted_constr_ref] == :(x[75] == x[4] * x[5] * x[7]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[5]), :(x[7])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[28])]][:y_idx] == 95 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[28])]][:id] == 91 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[28])]][:lifted_constr_ref] == :(x[95] == x[9] * x[10] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:y_idx] == 11 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:id] == 7 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:lifted_constr_ref] == :(x[11] == x[9] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[10])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[37])]][:y_idx] == 100 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[37])]][:id] == 96 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[37])]][:lifted_constr_ref] == :(x[100] == x[1] * x[2] * x[37]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[37])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4]), :(x[5])]][:y_idx] == 62 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4]), :(x[5])]][:id] == 58 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4]), :(x[5])]][:lifted_constr_ref] == :(x[62] == x[2] * x[3] * x[4] * x[5]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4]), :(x[5])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[9]), :(x[10])]][:y_idx] == 65 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[9]), :(x[10])]][:id] == 61 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[9]), :(x[10])]][:lifted_constr_ref] == :(x[65] == x[1] * x[4] * x[9] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[9]), :(x[10])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7]), :(x[28])]][:y_idx] == 80 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7]), :(x[28])]][:id] == 76 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7]), :(x[28])]][:lifted_constr_ref] == :(x[80] == x[1] * x[7] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:y_idx] == 46 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:id] == 42 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:lifted_constr_ref] == :(x[46] == x[1] * x[2] * x[3]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[40])]][:y_idx] == 59 @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[40])]][:id] == 55 @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[40])]][:lifted_constr_ref] == :(x[59] == x[17] * x[40]) @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[40])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[85])]][:y_idx] == 86 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[85])]][:id] == 82 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[85])]][:lifted_constr_ref] == :(x[86] == x[1] * x[85]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[85])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[31])]][:y_idx] == 97 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[31])]][:id] == 93 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[31])]][:lifted_constr_ref] == :(x[97] == x[1] * x[2] * x[31]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[31])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[28])]][:y_idx] == 29 @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[28])]][:id] == 25 @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[28])]][:lifted_constr_ref] == :(x[29] == x[13] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[13]), :(x[28])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[28])]][:y_idx] == 92 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[28])]][:id] == 88 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[28])]][:lifted_constr_ref] == :(x[92] == x[2] * x[3] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9])]][:y_idx] == 20 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9])]][:id] == 16 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9])]][:lifted_constr_ref] == :(x[20] == x[1] * x[9]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10]), :(x[28])]][:y_idx] == 109 @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10]), :(x[28])]][:id] == 105 @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10]), :(x[28])]][:lifted_constr_ref] == :(x[109] == x[14] * x[10] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[92])]][:y_idx] == 93 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[92])]][:id] == 89 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[92])]][:lifted_constr_ref] == :(x[93] == x[1] * x[92]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[92])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4])]][:y_idx] == 85 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4])]][:id] == 81 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4])]][:lifted_constr_ref] == :(x[85] == x[2] * x[3] * x[4]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[4])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:y_idx] == 16 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:id] == 12 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:lifted_constr_ref] == :(x[16] == x[1] * x[11]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[11])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[21])]][:y_idx] == 25 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[21])]][:id] == 21 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[21])]][:lifted_constr_ref] == :(x[25] == x[4] * x[21]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[21])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[53]), :(x[28])]][:y_idx] == 73 @test alpine.nonconvex_terms[Expr[:(x[53]), :(x[28])]][:id] == 69 @test alpine.nonconvex_terms[Expr[:(x[53]), :(x[28])]][:lifted_constr_ref] == :(x[73] == x[53] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[53]), :(x[28])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[32])]][:y_idx] == 34 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[32])]][:id] == 30 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[32])]][:lifted_constr_ref] == :(x[34] == x[5] * x[32]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[32])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[28])]][:y_idx] == 40 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[28])]][:id] == 36 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[28])]][:lifted_constr_ref] == :(x[40] == x[3] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[28])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10]), :(x[28])]][:y_idx] == 67 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10]), :(x[28])]][:id] == 63 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10]), :(x[28])]][:lifted_constr_ref] == :(x[67] == x[5] * x[9] * x[10] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[10]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[43])]][:y_idx] == 102 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[43])]][:id] == 98 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[43])]][:lifted_constr_ref] == :(x[102] == x[5] * x[9] * x[43]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9]), :(x[43])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[26])]][:y_idx] == 27 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[26])]][:id] == 23 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[26])]][:lifted_constr_ref] == :(x[27] == x[4] * x[26]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[26])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[20]), :(x[31])]][:y_idx] == 56 @test alpine.nonconvex_terms[Expr[:(x[20]), :(x[31])]][:id] == 52 @test alpine.nonconvex_terms[Expr[:(x[20]), :(x[31])]][:lifted_constr_ref] == :(x[56] == x[20] * x[31]) @test alpine.nonconvex_terms[Expr[:(x[20]), :(x[31])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[4]), :(x[9])]][:y_idx] == 63 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[4]), :(x[9])]][:id] == 59 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[4]), :(x[9])]][:lifted_constr_ref] == :(x[63] == x[1] * x[3] * x[4] * x[9]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[3]), :(x[4]), :(x[9])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10])]][:y_idx] == 15 @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10])]][:id] == 11 @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10])]][:lifted_constr_ref] == :(x[15] == x[14] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[10])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[76])]][:y_idx] == 77 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[76])]][:id] == 73 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[76])]][:lifted_constr_ref] == :(x[77] == x[1] * x[4] * x[76]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[76])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[88])]][:y_idx] == 89 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[88])]][:id] == 85 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[88])]][:lifted_constr_ref] == :(x[89] == x[1] * x[88]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[88])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[90])]][:y_idx] == 94 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[90])]][:id] == 90 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[90])]][:lifted_constr_ref] == :(x[94] == x[5] * x[90]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[90])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10]), :(x[28])]][:y_idx] == 108 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10]), :(x[28])]][:id] == 104 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10]), :(x[28])]][:lifted_constr_ref] == :(x[108] == x[6] * x[10] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[10]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[48])]][:y_idx] == 70 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[48])]][:id] == 66 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[48])]][:lifted_constr_ref] == :(x[70] == x[4] * x[48]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[48])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[31])]][:y_idx] == 54 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[31])]][:id] == 50 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[31])]][:lifted_constr_ref] == :(x[54] == x[6] * x[31]) @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[31])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[31])]][:y_idx] == 99 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[31])]][:id] == 95 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[31])]][:lifted_constr_ref] == :(x[99] == x[1] * x[9] * x[31]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[9]), :(x[31])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[35])]][:y_idx] == 36 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[35])]][:id] == 32 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[35])]][:lifted_constr_ref] == :(x[36] == x[1] * x[35]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[35])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9])]][:y_idx] == 14 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9])]][:id] == 10 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9])]][:lifted_constr_ref] == :(x[14] == x[5] * x[9]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[9])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[13])]][:y_idx] == 22 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[13])]][:id] == 18 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[13])]][:lifted_constr_ref] == :(x[22] == x[4] * x[13]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[13])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10]), :(x[28])]][:y_idx] == 64 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10]), :(x[28])]][:id] == 60 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10]), :(x[28])]][:lifted_constr_ref] == :(x[64] == x[1] * x[2] * x[10] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[10]), :(x[28])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[46]), :(x[28])]][:y_idx] == 72 @test alpine.nonconvex_terms[Expr[:(x[46]), :(x[28])]][:id] == 68 @test alpine.nonconvex_terms[Expr[:(x[46]), :(x[28])]][:lifted_constr_ref] == :(x[72] == x[46] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[46]), :(x[28])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[31])]][:y_idx] == 55 @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[31])]][:id] == 51 @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[31])]][:lifted_constr_ref] == :(x[55] == x[17] * x[31]) @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[31])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[31])]][:y_idx] == 98 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[31])]][:id] == 94 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[31])]][:lifted_constr_ref] == :(x[98] == x[2] * x[5] * x[31]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[31])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[28])]][:y_idx] == 43 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[28])]][:id] == 39 @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[28])]][:lifted_constr_ref] == :(x[43] == x[10] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[10]), :(x[28])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[10])]][:y_idx] == 78 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[10])]][:id] == 74 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[10])]][:lifted_constr_ref] == :(x[78] == x[2] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[10])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[10])]][:y_idx] == 52 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[10])]][:id] == 48 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[10])]][:lifted_constr_ref] == :(x[52] == x[2] * x[5] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[5]), :(x[10])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[90])]][:y_idx] == 91 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[90])]][:id] == 87 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[90])]][:lifted_constr_ref] == :(x[91] == x[1] * x[90]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[90])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[17])]][:y_idx] == 104 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[17])]][:id] == 100 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[17])]][:lifted_constr_ref] == :(x[104] == x[3] * x[4] * x[17]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[17])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[9])]][:y_idx] == 76 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[9])]][:id] == 72 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[9])]][:lifted_constr_ref] == :(x[76] == x[3] * x[9]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[9])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[78])]][:y_idx] == 79 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[78])]][:id] == 75 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[78])]][:lifted_constr_ref] == :(x[79] == x[1] * x[4] * x[78]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[78])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[3])]][:y_idx] == 10 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[3])]][:id] == 6 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[3])]][:lifted_constr_ref] == :(x[10] == (*)(x[3])) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[3])]][:nonlinear_type] == :MONOMIAL @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[49])]][:y_idx] == 71 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[49])]][:id] == 67 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[49])]][:lifted_constr_ref] == :(x[71] == x[4] * x[49]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[49])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[9])]][:y_idx] == 88 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[9])]][:id] == 84 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[9])]][:lifted_constr_ref] == :(x[88] == x[3] * x[4] * x[9]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[9])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[15]), :(x[28])]][:y_idx] == 30 @test alpine.nonconvex_terms[Expr[:(x[15]), :(x[28])]][:id] == 26 @test alpine.nonconvex_terms[Expr[:(x[15]), :(x[28])]][:lifted_constr_ref] == :(x[30] == x[15] * x[28]) @test alpine.nonconvex_terms[Expr[:(x[15]), :(x[28])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[46])]][:y_idx] == 68 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[46])]][:id] == 64 @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[46])]][:lifted_constr_ref] == :(x[68] == x[4] * x[46]) @test alpine.nonconvex_terms[Expr[:(x[4]), :(x[46])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[11])]][:y_idx] == 12 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[11])]][:id] == 8 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[11])]][:lifted_constr_ref] == :(x[12] == x[5] * x[11]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[11])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[7])]][:y_idx] == 74 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[7])]][:id] == 70 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[7])]][:lifted_constr_ref] == :(x[74] == x[1] * x[4] * x[7]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[7])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[20])]][:y_idx] == 105 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[20])]][:id] == 101 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[20])]][:lifted_constr_ref] == :(x[105] == x[3] * x[4] * x[20]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[20])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[11])]][:y_idx] == 82 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[11])]][:id] == 78 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[11])]][:lifted_constr_ref] == :(x[82] == x[1] * x[4] * x[11]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[4]), :(x[11])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[43])]][:y_idx] == 44 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[43])]][:id] == 40 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[43])]][:lifted_constr_ref] == :(x[44] == x[9] * x[43]) @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[43])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:y_idx] == 61 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:id] == 57 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:lifted_constr_ref] == :(x[61] == x[1] * x[2] * x[3] * x[4]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3]), :(x[4])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[10])]][:y_idx] == 18 @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[10])]][:id] == 14 @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[10])]][:lifted_constr_ref] == :(x[18] == x[17] * x[10]) @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[10])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7])]][:y_idx] == 8 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7])]][:id] == 4 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7])]][:lifted_constr_ref] == :(x[8] == x[1] * x[7]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[7])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:y_idx] == 6 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:id] == 2 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:lifted_constr_ref] == :(x[6] == x[1] * x[2]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[40])]][:y_idx] == 101 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[40])]][:id] == 97 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[40])]][:lifted_constr_ref] == :(x[101] == x[1] * x[2] * x[40]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[40])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[37])]][:y_idx] == 60 @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[37])]][:id] == 56 @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[37])]][:lifted_constr_ref] == :(x[60] == x[17] * x[37]) @test alpine.nonconvex_terms[Expr[:(x[17]), :(x[37])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[6])]][:y_idx] == 103 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[6])]][:id] == 99 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[6])]][:lifted_constr_ref] == :(x[103] == x[3] * x[4] * x[6]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[4]), :(x[6])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3])]][:y_idx] == 7 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3])]][:id] == 3 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3])]][:lifted_constr_ref] == :(x[7] == x[2] * x[3]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5])]][:y_idx] == 47 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5])]][:id] == 43 @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5])]][:lifted_constr_ref] == :(x[47] == x[2] * x[3] * x[5]) @test alpine.nonconvex_terms[Expr[:(x[2]), :(x[3]), :(x[5])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6])]][:y_idx] == 13 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6])]][:id] == 9 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6])]][:lifted_constr_ref] == :(x[13] == x[3] * x[6]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[6])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[31])]][:y_idx] == 35 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[31])]][:id] == 31 @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[31])]][:lifted_constr_ref] == :(x[35] == x[9] * x[31]) @test alpine.nonconvex_terms[Expr[:(x[9]), :(x[31])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[32])]][:y_idx] == 33 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[32])]][:id] == 29 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[32])]][:lifted_constr_ref] == :(x[33] == x[1] * x[32]) @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[32])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[20])]][:y_idx] == 21 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[20])]][:id] == 17 @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[20])]][:lifted_constr_ref] == :(x[21] == x[3] * x[20]) @test alpine.nonconvex_terms[Expr[:(x[3]), :(x[20])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[44])]][:y_idx] == 45 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[44])]][:id] == 41 @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[44])]][:lifted_constr_ref] == :(x[45] == x[5] * x[44]) @test alpine.nonconvex_terms[Expr[:(x[5]), :(x[44])]][:nonlinear_type] == :BILINEAR @test alpine.bounding_constr_mip[1][:rhs] == 1.0 @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[5])] @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[1][:sense] == :(>=) @test alpine.bounding_constr_mip[1][:cnt] == 1 @test alpine.bounding_constr_mip[2][:rhs] == 1.0 @test alpine.bounding_constr_mip[2][:vars] == Any[:(x[6])] @test alpine.bounding_constr_mip[2][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[2][:sense] == :(<=) @test alpine.bounding_constr_mip[2][:cnt] == 1 @test alpine.bounding_constr_mip[3][:rhs] == 1.0 @test alpine.bounding_constr_mip[3][:vars] == Any[:(x[5]), :(x[7])] @test alpine.bounding_constr_mip[3][:coefs] == Any[1.0, 1.0] @test alpine.bounding_constr_mip[3][:sense] == :(<=) @test alpine.bounding_constr_mip[3][:cnt] == 2 @test alpine.bounding_constr_mip[4][:rhs] == 1.0 @test alpine.bounding_constr_mip[4][:vars] == Any[:(x[8])] @test alpine.bounding_constr_mip[4][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[4][:sense] == :(>=) @test alpine.bounding_constr_mip[4][:cnt] == 1 @test alpine.bounding_constr_mip[5][:rhs] == 1.0 @test alpine.bounding_constr_mip[5][:vars] == Any[:(x[12])] @test alpine.bounding_constr_mip[5][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[5][:sense] == :(<=) @test alpine.bounding_constr_mip[5][:cnt] == 1 @test alpine.bounding_constr_mip[6][:rhs] == 1.0 @test alpine.bounding_constr_mip[6][:vars] == Any[:(x[13])] @test alpine.bounding_constr_mip[6][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[6][:sense] == :(>=) @test alpine.bounding_constr_mip[6][:cnt] == 1 @test alpine.bounding_constr_mip[7][:rhs] == 1.0 @test alpine.bounding_constr_mip[7][:vars] == Any[:(x[15])] @test alpine.bounding_constr_mip[7][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[7][:sense] == :(<=) @test alpine.bounding_constr_mip[7][:cnt] == 1 @test alpine.bounding_constr_mip[8][:rhs] == 1.0 @test alpine.bounding_constr_mip[8][:vars] == Any[:(x[16])] @test alpine.bounding_constr_mip[8][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[8][:sense] == :(>=) @test alpine.bounding_constr_mip[8][:cnt] == 1 @test alpine.bounding_constr_mip[9][:rhs] == 1.0 @test alpine.bounding_constr_mip[9][:vars] == Any[:(x[18])] @test alpine.bounding_constr_mip[9][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[9][:sense] == :(<=) @test alpine.bounding_constr_mip[9][:cnt] == 1 @test alpine.bounding_constr_mip[10][:rhs] == 1.0 @test alpine.bounding_constr_mip[10][:vars] == Any[:(x[19])] @test alpine.bounding_constr_mip[10][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[10][:sense] == :(>=) @test alpine.bounding_constr_mip[10][:cnt] == 1 @test alpine.bounding_constr_mip[11][:rhs] == 1.0 @test alpine.bounding_constr_mip[11][:vars] == Any[:(x[21])] @test alpine.bounding_constr_mip[11][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[11][:sense] == :(<=) @test alpine.bounding_constr_mip[11][:cnt] == 1 @test alpine.bounding_constr_mip[12][:rhs] == 1.0 @test alpine.bounding_constr_mip[12][:vars] == Any[:(x[22])] @test alpine.bounding_constr_mip[12][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[12][:sense] == :(>=) @test alpine.bounding_constr_mip[12][:cnt] == 1 @test alpine.bounding_constr_mip[13][:rhs] == 1.0 @test alpine.bounding_constr_mip[13][:vars] == Any[:(x[24])] @test alpine.bounding_constr_mip[13][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[13][:sense] == :(<=) @test alpine.bounding_constr_mip[13][:cnt] == 1 @test alpine.bounding_constr_mip[14][:rhs] == 1.0 @test alpine.bounding_constr_mip[14][:vars] == Any[:(x[25])] @test alpine.bounding_constr_mip[14][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[14][:sense] == :(>=) @test alpine.bounding_constr_mip[14][:cnt] == 1 @test alpine.bounding_constr_mip[15][:rhs] == 1.0 @test alpine.bounding_constr_mip[15][:vars] == Any[:(x[27])] @test alpine.bounding_constr_mip[15][:coefs] == Any[1.0] @test alpine.bounding_constr_mip[15][:sense] == :(<=) @test alpine.bounding_constr_mip[15][:cnt] == 1 end @testset "Expression Parsing || corner cases" begin @testset "Corner Cases - 1 : sign convertor special case" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "minlp_solver" => JUNIPER, "log_level" => 100, ) m = Model(test_solver) @variable(m, 0 <= x[1:5] <= 1, Bin) @NLconstraint(m, x[1] + -x[2] >= 2) @objective(m, Min, x[1] + x[2]) alpine = _build(m) @test alpine.bounding_constr_mip[1][:rhs] == 2.0 @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, -1.0] @test alpine.bounding_constr_mip[1][:sense] == :(>=) @test alpine.bounding_constr_mip[1][:cnt] == 2 end @testset "Corner Cases - 2 : full sub-expression" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = Model(test_solver) @variable(m, x[1:5] >= 0) @NLconstraint(m, (x[1] + 10 + 4 * x[2] + 200) * 5 >= 2 * 5) @constraint(m, x[1] + x[2] + 200 >= 2) @objective(m, Min, x[1] + x[2]) alpine = _build(m) @test alpine.bounding_constr_mip[1][:rhs] == -198.0 @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0] @test alpine.bounding_constr_mip[1][:sense] == :(>=) @test alpine.bounding_constr_mip[1][:cnt] == 2 @test alpine.bounding_constr_mip[2][:rhs] == -1040.0 @test alpine.bounding_constr_mip[2][:vars] == Any[:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[2][:coefs] == Any[5.0, 20.0] @test alpine.bounding_constr_mip[2][:sense] == :(>=) @test alpine.bounding_constr_mip[2][:cnt] == 2 end @testset "Corner Cases - 2 : full sub-expression" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = Model(test_solver) @variable(m, x[1:5] >= 0) @NLconstraint(m, (x[1] + 10 + 4 * x[2] + 200) * 5 >= 2 * 5) @constraint(m, x[1] + x[2] + 200 >= 2) @objective(m, Min, x[1] + x[2]) alpine = _build(m) @test alpine.bounding_constr_mip[1][:rhs] == -198.0 @test alpine.bounding_constr_mip[1][:vars] == Any[:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[1][:coefs] == Any[1.0, 1.0] @test alpine.bounding_constr_mip[1][:sense] == :(>=) @test alpine.bounding_constr_mip[1][:cnt] == 2 @test alpine.bounding_constr_mip[2][:rhs] == -1040.0 @test alpine.bounding_constr_mip[2][:vars] == Any[:(x[1]), :(x[2])] @test alpine.bounding_constr_mip[2][:coefs] == Any[5.0, 20.0] @test alpine.bounding_constr_mip[2][:sense] == :(>=) @test alpine.bounding_constr_mip[2][:cnt] == 2 end end @testset "Expression Parsing || Discrete Multilinear" begin @testset "Expression Parsing || bmpl && binlin && binprod" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => JUNIPER, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = bpml(solver = test_solver) alpine = _build(m) # Setup internal model @test length(keys(alpine.nonconvex_terms)) == 12 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:y_idx] == 11 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:y_idx] == 12 @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[6])]][:y_idx] == 13 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:y_idx] == 14 @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[6])]][:y_idx] == 15 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7])]][:y_idx] == 16 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[16])]][:y_idx] == 17 @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7]), :(x[8])]][:y_idx] == 18 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[18])]][:y_idx] == 19 @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[18])]][:y_idx] == 20 @test alpine.nonconvex_terms[Expr[ :(x[1]), :(x[2]), :(x[3]), :(x[4]), :(x[5]), ]][:y_idx] == 21 @test alpine.nonconvex_terms[Expr[ :(x[6]), :(x[7]), :(x[9]), :(x[10]), :(x[6]), ]][:y_idx] == 22 @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[6])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2])]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[:(x[12]), :(x[6])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[2]), :(x[3])]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[6])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7])]][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[16])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[6]), :(x[7]), :(x[8])]][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[Expr[:(x[1]), :(x[18])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[:(x[14]), :(x[18])]][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[Expr[ :(x[1]), :(x[2]), :(x[3]), :(x[4]), :(x[5]), ]][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[Expr[ :(x[6]), :(x[7]), :(x[9]), :(x[10]), :(x[6]), ]][:nonlinear_type] == :MULTILINEAR @test length(alpine.var_type) == 22 @test alpine.var_type[11] == :Cont @test alpine.var_type[12] == :Bin @test alpine.var_type[13] == :Cont @test alpine.var_type[14] == :Bin @test alpine.var_type[15] == :Cont @test alpine.var_type[16] == :Cont @test alpine.var_type[17] == :Cont @test alpine.var_type[18] == :Cont @test alpine.var_type[19] == :Cont @test alpine.var_type[20] == :Cont @test alpine.var_type[21] == :Bin @test alpine.var_type[22] == :Cont end @testset "Expression Parsing || bmpl && binlin && binprod with linear lifting and coefficients" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => JUNIPER, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = bmpl_linearlifting(solver = test_solver) alpine = _build(m) lk1 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 1), (1.0, 17)])), ) lk2 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 11), (1.0, 12)])), ) lk3 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 7), (2.0, 6)])), ) lk4 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6), (1.0, 19)])), ) lk5 = Dict{Symbol,Any}( Pair{Symbol,Any}(:sign, :+), Pair{Symbol,Any}(:scalar, 0.0), Pair{Symbol,Any}(:coef_var, Set(Any[(1.0, 6), (1.0, 25)])), ) @test haskey(alpine.linear_terms, lk1) @test haskey(alpine.linear_terms, lk2) @test haskey(alpine.linear_terms, lk3) @test haskey(alpine.linear_terms, lk4) @test haskey(alpine.linear_terms, lk5) @test alpine.linear_terms[lk1][:lifted_constr_ref] == :(x[20] == x[1] + x[17]) @test alpine.linear_terms[lk2][:lifted_constr_ref] == :(x[13] == x[11] + x[12]) @test alpine.linear_terms[lk3][:lifted_constr_ref] == :(x[15] == 2 * x[6] + x[7]) @test alpine.linear_terms[lk4][:lifted_constr_ref] == :(x[21] == x[6] + x[19]) @test alpine.linear_terms[lk5][:lifted_constr_ref] == :(x[26] == x[6] + x[25]) @test alpine.linear_terms[lk1][:y_idx] == 20 @test alpine.linear_terms[lk2][:y_idx] == 13 @test alpine.linear_terms[lk3][:y_idx] == 15 @test alpine.linear_terms[lk4][:y_idx] == 21 @test alpine.linear_terms[lk5][:y_idx] == 26 @test alpine.linear_terms[lk1][:y_type] == :Cont @test alpine.linear_terms[lk2][:y_type] == :Cont @test alpine.linear_terms[lk3][:y_type] == :Cont @test alpine.linear_terms[lk4][:y_type] == :Cont @test alpine.linear_terms[lk5][:y_type] == :Cont nlk1 = Expr[:(x[18]), :(x[7])] nlk2 = Expr[:(x[6]), :(x[7]), :(x[8])] nlk3 = Expr[:(x[7]), :(x[10])] nlk4 = Expr[:(x[2]), :(x[26])] nlk5 = Expr[:(x[1]), :(x[13])] nlk6 = Expr[:(x[1]), :(x[15])] nlk7 = Expr[:(x[2]), :(x[6])] nlk8 = Expr[:(x[24]), :(x[23])] nlk9 = Expr[:(x[1]), :(x[2])] nlk10 = Expr[:(x[2]), :(x[3])] nlk11 = Expr[:(x[20]), :(x[21])] nlk12 = Expr[:(x[3]), :(x[4])] @test haskey(alpine.nonconvex_terms, nlk1) @test haskey(alpine.nonconvex_terms, nlk2) @test haskey(alpine.nonconvex_terms, nlk3) @test haskey(alpine.nonconvex_terms, nlk4) @test haskey(alpine.nonconvex_terms, nlk5) @test haskey(alpine.nonconvex_terms, nlk6) @test haskey(alpine.nonconvex_terms, nlk7) @test haskey(alpine.nonconvex_terms, nlk8) @test haskey(alpine.nonconvex_terms, nlk9) @test haskey(alpine.nonconvex_terms, nlk10) @test haskey(alpine.nonconvex_terms, nlk11) @test haskey(alpine.nonconvex_terms, nlk12) @test alpine.nonconvex_terms[nlk1][:id] == 7 @test alpine.nonconvex_terms[nlk2][:id] == 1 @test alpine.nonconvex_terms[nlk3][:id] == 9 @test alpine.nonconvex_terms[nlk4][:id] == 12 @test alpine.nonconvex_terms[nlk5][:id] == 3 @test alpine.nonconvex_terms[nlk6][:id] == 4 @test alpine.nonconvex_terms[nlk7][:id] == 5 @test alpine.nonconvex_terms[nlk8][:id] == 11 @test alpine.nonconvex_terms[nlk9][:id] == 6 @test alpine.nonconvex_terms[nlk10][:id] == 2 @test alpine.nonconvex_terms[nlk11][:id] == 8 @test alpine.nonconvex_terms[nlk12][:id] == 10 @test alpine.nonconvex_terms[nlk1][:y_type] == :Cont @test alpine.nonconvex_terms[nlk2][:y_type] == :Cont @test alpine.nonconvex_terms[nlk3][:y_type] == :Cont @test alpine.nonconvex_terms[nlk4][:y_type] == :Cont @test alpine.nonconvex_terms[nlk5][:y_type] == :Cont @test alpine.nonconvex_terms[nlk6][:y_type] == :Cont @test alpine.nonconvex_terms[nlk7][:y_type] == :Cont @test alpine.nonconvex_terms[nlk8][:y_type] == :Cont @test alpine.nonconvex_terms[nlk9][:y_type] == :Bin @test alpine.nonconvex_terms[nlk10][:y_type] == :Bin @test alpine.nonconvex_terms[nlk11][:y_type] == :Cont @test alpine.nonconvex_terms[nlk12][:y_type] == :Bin @test alpine.nonconvex_terms[nlk1][:y_idx] == 19 @test alpine.nonconvex_terms[nlk2][:y_idx] == 11 @test alpine.nonconvex_terms[nlk3][:y_idx] == 23 @test alpine.nonconvex_terms[nlk4][:y_idx] == 27 @test alpine.nonconvex_terms[nlk5][:y_idx] == 14 @test alpine.nonconvex_terms[nlk6][:y_idx] == 16 @test alpine.nonconvex_terms[nlk7][:y_idx] == 17 @test alpine.nonconvex_terms[nlk8][:y_idx] == 25 @test alpine.nonconvex_terms[nlk9][:y_idx] == 18 @test alpine.nonconvex_terms[nlk10][:y_idx] == 12 @test alpine.nonconvex_terms[nlk11][:y_idx] == 22 @test alpine.nonconvex_terms[nlk12][:y_idx] == 24 @test alpine.nonconvex_terms[nlk1][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[nlk2][:nonlinear_type] == :MULTILINEAR @test alpine.nonconvex_terms[nlk3][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[nlk4][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[nlk5][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[nlk6][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[nlk7][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[nlk8][:nonlinear_type] == :BINLIN @test alpine.nonconvex_terms[nlk9][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[nlk10][:nonlinear_type] == :BINPROD @test alpine.nonconvex_terms[nlk11][:nonlinear_type] == :BILINEAR @test alpine.nonconvex_terms[nlk12][:nonlinear_type] == :BINPROD end end @testset "Expr dereferencing for @NLexpression" begin # Taken from Juniper.jl test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => JUNIPER, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "presolve_bt" => true, ) m = Model(test_solver) @variable(m, 0 <= x <= 1) @variable(m, 0 <= z <= 1, Bin) b_expr = @NLexpression(m, z / 1) @NLconstraint(m, 1.1 >= b_expr) an_expr = @NLexpression(m, x / 1) @NLobjective(m, Max, z + an_expr) JuMP.optimize!(m) @test isapprox(JuMP.objective_value(m), 2.0; atol = 1E-6) @test isapprox(JuMP.value(z), 1; atol = 1e-6) @test isapprox(JuMP.value(x), 1; atol = 1e-6) end @testset "@NLexpression from quadratic @expression (Issue #221)" begin @testset "Unit tests for `expr_is_emptysum`" begin # Empty sum @test Alpine.expr_is_emptysum(:(+())) # Not empty sum zero int @test !Alpine.expr_is_emptysum(:(+(0, 0))) # Not empty sum zero float @test !Alpine.expr_is_emptysum(:(+(0.0, 0.0))) # Not empty sum int with zero @test !Alpine.expr_is_emptysum(:(+(1, 0))) # Not empty sum int @test !Alpine.expr_is_emptysum(:(+(1, 2))) # Not empty sum float with zero @test !Alpine.expr_is_emptysum(:(+(1.0, 0.0))) # Not empty sum float @test !Alpine.expr_is_emptysum(:(+(1.0, 3.0))) # Not empty sum of variables @test !Alpine.expr_is_emptysum(:(x + y)) # Not empty sum of variable with int @test !Alpine.expr_is_emptysum(:(x + 1)) # Not empty sum of variable with float @test !Alpine.expr_is_emptysum(:(x + 3.0)) # Not empty expression with non-linear function evaluation @test !Alpine.expr_is_emptysum(:(sin(x))) # Not empty expression with anonimus function @test !Alpine.expr_is_emptysum(:(x -> log(x))) # Not empty expression with anonimus function @test !Alpine.expr_is_emptysum(:(x -> log(x))) # Not empty expression with empty sum @test !Alpine.expr_is_emptysum(:($(:(+())) + 1)) end test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, "presolve_bt" => true, "apply_partitioning" => true, ) m = JuMP.Model(test_solver) @variable(m, -2 ≤ x ≤ 2, start = 1) @expression(m, expr, x^2) @NLconstraint(m, expr >= 1) @NLconstraint(m, expr <= 2) @NLobjective(m, Min, x^3) JuMP.optimize!(m) @test JuMP.termination_status(m) == JuMP.MOI.OPTIMAL @test isapprox(JuMP.objective_value(m), -(sqrt(2))^3; atol = 1E-6) @test isapprox(JuMP.value(m[:x]), -sqrt(2); atol = 1E-6) end ================================================ FILE: test/test_solver.jl ================================================ @testset "Optimizer loading tests" begin # Random Model 1 test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = operator_c(solver = test_solver) alpine = _build(m) @test isa(alpine, Alpine.Optimizer) # Expression Model 1 m = exprstest(solver = test_solver) alpine = _build(m) @test isa(alpine, Alpine.Optimizer) end @testset "Partitioning variable selection tests :: nlp3" begin # Select all NL variable test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 0, "disc_uniform_rate" => 10, "presolve_bp" => false, "presolve_bt" => false, "max_iter" => 1, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) alpine = JuMP.backend(m).optimizer.model @test JuMP.termination_status(m) == MOI.OTHER_LIMIT @test isapprox(JuMP.objective_value(m), 7049.2478976; atol = 1e-3) @test length(alpine.candidate_disc_vars) == 8 @test length(alpine.disc_vars) == 8 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 0 # Select all NL variable test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 2, "disc_uniform_rate" => 10, "presolve_bp" => false, "presolve_bt" => false, "max_iter" => 1, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) alpine = JuMP.backend(m).optimizer.model @test JuMP.termination_status(m) == MOI.OTHER_LIMIT @test isapprox(JuMP.objective_value(m), 7049.2478976; atol = 1e-3) @test length(alpine.candidate_disc_vars) == 8 @test length(alpine.disc_vars) == 8 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 2 # Minimum vertex cover algorithm test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 1, "disc_uniform_rate" => 10, "presolve_bp" => false, "presolve_bt" => false, "max_iter" => 1, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) alpine = JuMP.backend(m).optimizer.model @test JuMP.termination_status(m) == MOI.OTHER_LIMIT @test isapprox(JuMP.objective_value(m), 7049.2478976; atol = 1e-3) @test length(alpine.candidate_disc_vars) == 8 @test length(alpine.disc_vars) == 3 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 1 # Adaptive variable selection scheme :: disc_var_pick = 3 test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 3, "presolve_bp" => false, "presolve_bt" => false, "max_iter" => 2, "log_level" => 100, ) m = nlp3(solver = test_solver) JuMP.optimize!(m) alpine = JuMP.backend(m).optimizer.model @test JuMP.termination_status(m) == MOI.OTHER_LIMIT @test isapprox(JuMP.objective_value(m), 7049.2478976; atol = 1e-3) @test length(alpine.candidate_disc_vars) == 8 @test length(alpine.disc_vars) == 8 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 3 end @testset "Partitioning variable selection tests :: castro2m2" begin # Select all NL variables test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 0, "disc_uniform_rate" => 10, "presolve_bt" => false, "max_iter" => 0, ) m = castro2m2(solver = test_solver) JuMP.optimize!(m) alpine = JuMP.backend(m).optimizer.model @test JuMP.termination_status(m) == MOI.LOCALLY_SOLVED @test length(alpine.candidate_disc_vars) == 10 @test length(alpine.disc_vars) == 10 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 0 # Select minimum vertex cover test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 1, "disc_uniform_rate" => 10, "presolve_bt" => false, "max_iter" => 0, ) m = castro2m2(solver = test_solver) JuMP.optimize!(m) alpine = JuMP.backend(m).optimizer.model @test JuMP.termination_status(m) == MOI.LOCALLY_SOLVED @test length(alpine.candidate_disc_vars) == 10 @test length(alpine.disc_vars) == 4 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 1 # Criteria 15 static selection test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 2, "disc_uniform_rate" => 15, "presolve_bt" => false, "max_iter" => 0, ) m = castro2m2(solver = test_solver) JuMP.optimize!(m) alpine = JuMP.backend(m).optimizer.model @test JuMP.termination_status(m) == MOI.LOCALLY_SOLVED @test length(alpine.candidate_disc_vars) == 10 @test length(alpine.disc_vars) == 10 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 2 end @testset "Partitioning variable selection tests :: blend029" begin # Select all NL variable test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => PAVITO, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 0, "disc_uniform_rate" => 10, "presolve_bt" => false, "max_iter" => 1, "log_level" => 100, ) m = blend029_gl(solver = test_solver) alpine = _build(m) @test length(alpine.candidate_disc_vars) == 26 @test Set(alpine.candidate_disc_vars) == Set([ 26, 27, 29, 30, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 55, 56, 57, 58, 59, 60, ]) @test length(alpine.disc_vars) == 26 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 0 # Minimum vertex cover test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => PAVITO, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 1, "disc_uniform_rate" => 10, "presolve_bp" => false, "presolve_bt" => false, "max_iter" => 1, "log_level" => 100, ) m = blend029_gl(solver = test_solver) alpine = _build(m) @test length(alpine.candidate_disc_vars) == 26 @test Set(alpine.candidate_disc_vars) == Set([ 26, 27, 29, 30, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 55, 56, 57, 58, 59, 60, ]) @test length(alpine.disc_vars) == 10 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 1 # Adaptive Scheme vertex cover test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => PAVITO, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "disc_var_pick" => 2, "disc_uniform_rate" => 10, "presolve_bp" => false, "presolve_bt" => false, "max_iter" => 1, "log_level" => 100, ) m = blend029_gl(solver = test_solver) alpine = _build(m) @test length(alpine.candidate_disc_vars) == 26 @test length(Set(alpine.candidate_disc_vars)) == 26 # TODO provide a check to see if candidate_disc_vars are all covered @test length(alpine.disc_vars) == 10 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 2 end @testset "Partitioning variable selection tests :: castro6m2" begin # Dynamic Scheme step 1 test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, # We don't use the default HiGHS because it struggles with the numerical # scaling of this example. # "mip_solver" => HIGHS, "mip_solver" => optimizer_with_attributes( HiGHS.Optimizer, MOI.Silent() => true, "presolve" => "off", ), "disc_var_pick" => 3, "presolve_bp" => true, "presolve_bt" => false, "max_iter" => 2, "log_level" => 100, ) m = castro6m2(solver = test_solver) JuMP.optimize!(m) alpine = JuMP.backend(m).optimizer.model @test JuMP.termination_status(m) == MOI.OTHER_LIMIT @test JuMP.objective_value(m) <= 228.87 @test length(alpine.candidate_disc_vars) == 24 @test length(Set(alpine.candidate_disc_vars)) == 24 @test length(alpine.disc_vars) == 12 @test length(Set(alpine.disc_vars)) == 12 @test MOI.get(m, MOI.RawOptimizerAttribute("disc_var_pick")) == 3 end @testset "Hessians disabled with user-defined multivariate functions" begin test_solver = JuMP.optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "log_level" => 100, ) m = Model(test_solver) my_f(x, y) = (x - 1)^2 + (y - 2)^2 JuMP.register(m, :my_f, 2, my_f, autodiff = true) @variable(m, x[1:2]) @NLobjective(m, Min, my_f(x[1], x[2])) JuMP.set_optimize_hook(m, MOI.Utilities.attach_optimizer) JuMP.optimize!(m) JuMP.set_optimize_hook(m, nothing) alpine = JuMP.backend(m).optimizer.model @test !(:Hess in Alpine.features_available(alpine)) end @testset "test_scalar_nonlinear_function" begin model = Model( optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, ), ) @variable(model, -1 <= x[i in 1:3] <= 2) @objective(model, Max, prod(x)) @constraint(model, x[1]^3 <= 1) @constraint(model, x[2]^4 >= 1) @constraint(model, x[3]^3 == 1) optimize!(model) @test isapprox(value.(x), [1, 2, 1]; atol = 1e-6) @test isapprox(objective_value(model), 2; atol = 1e-6) end ================================================ FILE: test/test_utility.jl ================================================ @testset "Utility Function Tests: Solver identifier fetch" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "minlp_solver" => PAVITO, "nlp_solver" => IPOPT, "mip_solver" => HIGHS, "presolve_bp" => true, "disc_var_pick" => 1, "log_level" => 100, "max_iter" => 2, ) m = blend029_gl(solver = test_solver) alpine = JuMP.backend(m).optimizer.model Alpine._fetch_mip_solver_identifier( alpine; override = "Gurobi.GurobiSolver(nothing, Any[])", ) @test alpine.mip_solver_id == "Gurobi" Alpine._fetch_mip_solver_identifier(alpine; override = "CPLEX.CplexSolver(Any[])") @test alpine.mip_solver_id == "CPLEX" Alpine._fetch_nlp_solver_identifier(alpine; override = "Ipopt.IpoptSolver(Any[])") @test alpine.nlp_solver_id == "Ipopt" end @testset "Solver Funtion Tests :: Embedding" begin ebdmap = Alpine.embedding_map(5) @test ebdmap[:L] == 2 @test ebdmap[:H] == [[0, 0], [0, 1], [1, 1], [1, 0]] @test ebdmap[1] == Set([4, 5]) @test ebdmap[2] == Set([3]) @test ebdmap[3] == Set([2, 1]) @test ebdmap[4] == Set([5, 1]) ebdmap = Alpine.embedding_map(9) @test ebdmap[:L] == 3 @test ebdmap[:H_orig] == ["000", "001", "011", "010", "110", "111", "101", "100"] @test ebdmap[:H] == [ [0, 0, 0], [0, 0, 1], [0, 1, 1], [0, 1, 0], [1, 1, 0], [1, 1, 1], [1, 0, 1], [1, 0, 0], ] @test ebdmap[1] == Set([7, 9, 8, 6]) @test ebdmap[2] == Set([4, 5, 6]) @test ebdmap[3] == Set([7, 3]) @test ebdmap[4] == Set([4, 3, 2, 1]) @test ebdmap[5] == Set([9, 2, 8, 1]) @test ebdmap[6] == Set([9, 5, 1]) ebdmap = Alpine.embedding_map(12) @test ebdmap[:L] == 4 @test ebdmap[:H_orig] == [ "0000", "0001", "0011", "0010", "0110", "0111", "0101", "0100", "1100", "1101", "1111", "1110", "1010", "1011", "1001", "1000", ] @test ebdmap[:H] == [ [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 1], [0, 0, 1, 0], [0, 1, 1, 0], [0, 1, 1, 1], [0, 1, 0, 1], [0, 1, 0, 0], [1, 1, 0, 0], [1, 1, 0, 1], [1, 1, 1, 1], [1, 1, 1, 0], [1, 0, 1, 0], [1, 0, 1, 1], [1, 0, 0, 1], [1, 0, 0, 0], ] @test ebdmap[1] == Set([10, 11, 12]) @test ebdmap[2] == Set([7, 9, 10, 11, 8, 6, 12]) @test ebdmap[3] == Set([4, 5, 6, 12]) @test ebdmap[4] == Set([7, 3, 11, 12]) @test ebdmap[5] == Set([7, 4, 2, 3, 5, 8, 6, 1]) @test ebdmap[6] == Set([4, 2, 3, 1]) @test ebdmap[7] == Set([9, 10, 2, 8, 1]) @test ebdmap[8] == Set([9, 5, 1]) end @testset "Utility Function Tests: check_solution_history test" begin test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, "presolve_bt" => false, "partition_scaling_factor" => 10, "disc_consecutive_forbid" => false, ) m1 = mathopt(solver = test_solver) JuMP.optimize!(m1) alpine1 = JuMP.backend(m1).optimizer.model Alpine.variable_values(m1) test_solver = optimizer_with_attributes( Alpine.Optimizer, "nlp_solver" => IPOPT, "mip_solver" => PAVITO, "presolve_bt" => false, "partition_scaling_factor" => 10, "disc_consecutive_forbid" => true, ) m2 = mathopt(solver = test_solver) JuMP.optimize!(m2) alpine2 = JuMP.backend(m2).optimizer.model @test termination_status(m1) == MOI.OPTIMAL @test termination_status(m2) == MOI.OPTIMAL @test alpine1.logs[:n_iter] >= alpine2.logs[:n_iter] @test isapprox(JuMP.objective_value(m1), JuMP.objective_value(m2), atol = 1E-5) end