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
[](https://github.com/lanl-ansi/Alpine.jl/actions/workflows/ci.yml)
[](https://codecov.io/gh/lanl-ansi/Alpine.jl)
[](https://lanl-ansi.github.io/Alpine.jl/latest/)
[](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