From 3d0b4a7182e85398a1382fc2d500cc4e86baf0e8 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Tue, 15 Aug 2023 14:22:49 +0000 Subject: [PATCH] build based on 122f962f5 --- previews/PR3585/api/index.html | 80 +++++ previews/PR3585/artifacts/index.html | 140 ++++++++ previews/PR3585/assets/custom.css | 4 + previews/PR3585/assets/documenter.js | 331 ++++++++++++++++++ previews/PR3585/assets/logo.png | Bin 0 -> 133246 bytes previews/PR3585/assets/search.js | 267 ++++++++++++++ .../PR3585/assets/themes/documenter-dark.css | 7 + .../PR3585/assets/themes/documenter-light.css | 9 + previews/PR3585/assets/themeswap.js | 66 ++++ previews/PR3585/assets/warner.js | 49 +++ previews/PR3585/basedocs/index.html | 31 ++ previews/PR3585/compatibility/index.html | 46 +++ previews/PR3585/creating-packages/index.html | 163 +++++++++ previews/PR3585/environments/index.html | 78 +++++ previews/PR3585/getting-started/index.html | 31 ++ previews/PR3585/glossary/index.html | 2 + previews/PR3585/index.html | 2 + previews/PR3585/managing-packages/index.html | 147 ++++++++ previews/PR3585/registries/index.html | 30 ++ previews/PR3585/repl/index.html | 229 ++++++++++++ previews/PR3585/search/index.html | 2 + previews/PR3585/search_index.js | 3 + previews/PR3585/siteinfo.js | 1 + previews/PR3585/toml-files/index.html | 48 +++ 24 files changed, 1766 insertions(+) create mode 100644 previews/PR3585/api/index.html create mode 100644 previews/PR3585/artifacts/index.html create mode 100644 previews/PR3585/assets/custom.css create mode 100644 previews/PR3585/assets/documenter.js create mode 100644 previews/PR3585/assets/logo.png create mode 100644 previews/PR3585/assets/search.js create mode 100644 previews/PR3585/assets/themes/documenter-dark.css create mode 100644 previews/PR3585/assets/themes/documenter-light.css create mode 100644 previews/PR3585/assets/themeswap.js create mode 100644 previews/PR3585/assets/warner.js create mode 100644 previews/PR3585/basedocs/index.html create mode 100644 previews/PR3585/compatibility/index.html create mode 100644 previews/PR3585/creating-packages/index.html create mode 100644 previews/PR3585/environments/index.html create mode 100644 previews/PR3585/getting-started/index.html create mode 100644 previews/PR3585/glossary/index.html create mode 100644 previews/PR3585/index.html create mode 100644 previews/PR3585/managing-packages/index.html create mode 100644 previews/PR3585/registries/index.html create mode 100644 previews/PR3585/repl/index.html create mode 100644 previews/PR3585/search/index.html create mode 100644 previews/PR3585/search_index.js create mode 100644 previews/PR3585/siteinfo.js create mode 100644 previews/PR3585/toml-files/index.html diff --git a/previews/PR3585/api/index.html b/previews/PR3585/api/index.html new file mode 100644 index 0000000000..c5c01f7c78 --- /dev/null +++ b/previews/PR3585/api/index.html @@ -0,0 +1,80 @@ + +12. API Reference · Pkg.jl

12. API Reference

This section describes the functional API for interacting with Pkg.jl. It is recommended to use the functional API, rather than the Pkg REPL mode, for non-interactive usage, for example in scripts.

General API Reference

Certain options are generally useful and can be specified in any API call. You can specify these options by setting keyword arguments.

Redirecting output

Use the io::IOBuffer keyword argument to redirect Pkg output. For example, Pkg.add("Example"; io=devnull) will discard any output produced by the add call.

Package API Reference

In the Pkg REPL mode, packages (with associated version, UUID, URL etc) are parsed from strings, for example "Package#master","Package@v0.1", "www.mypkg.com/MyPkg#my/feature".

In the functional API, it is possible to use strings as arguments for simple commands (like Pkg.add(["PackageA", "PackageB"]), but more complicated commands, which e.g. specify URLs or version range, require the use of a more structured format over strings. This is done by creating an instance of PackageSpec which is passed in to functions.

Pkg.addFunction
Pkg.add(pkg::Union{String, Vector{String}}; preserve=PRESERVE_TIERED, installed=false)
+Pkg.add(pkg::Union{PackageSpec, Vector{PackageSpec}}; preserve=PRESERVE_TIERED, installed=false)

Add a package to the current project. This package will be available by using the import and using keywords in the Julia REPL, and if the current project is a package, also inside that package.

Resolution Tiers

Pkg resolves the set of packages in your environment using a tiered algorithm. The preserve keyword argument allows you to key into a specific tier in the resolve algorithm. The following table describes the argument values for preserve (in order of strictness):

ValueDescription
PRESERVE_ALL_INSTALLEDLike PRESERVE_ALL and only add those already installed
PRESERVE_ALLPreserve the state of all existing dependencies (including recursive dependencies)
PRESERVE_DIRECTPreserve the state of all existing direct dependencies
PRESERVE_SEMVERPreserve semver-compatible versions of direct dependencies
PRESERVE_NONEDo not attempt to preserve any version information
PRESERVE_TIERED_INSTALLEDLike PRESERVE_TIERED except PRESERVE_ALL_INSTALLED is tried first
PRESERVE_TIEREDUse the tier that will preserve the most version information while
allowing version resolution to succeed (this is the default)
Note

To change the default strategy to PRESERVE_TIERED_INSTALLED set the env var JULIA_PKG_PRESERVE_TIERED_INSTALLED to true.

After the installation of new packages the project will be precompiled. For more information see pkg> ?precompile.

With the PRESERVE_ALL_INSTALLED strategy the newly added packages will likely already be precompiled, but if not this may be because either the combination of package versions resolved in this environment has not been resolved and precompiled before, or the precompile cache has been deleted by the LRU cache storage (see JULIA_MAX_NUM_PRECOMPILE_FILES).

Julia 1.9

The PRESERVE_TIERED_INSTALLED and PRESERVE_ALL_INSTALLED strategies requires at least Julia 1.9.

Examples

Pkg.add("Example") # Add a package from registry
+Pkg.add("Example"; preserve=Pkg.PRESERVE_ALL) # Add the `Example` package and strictly preserve existing dependencies
+Pkg.add(name="Example", version="0.3") # Specify version; latest release in the 0.3 series
+Pkg.add(name="Example", version="0.3.1") # Specify version; exact release
+Pkg.add(url="https://github.com/JuliaLang/Example.jl", rev="master") # From url to remote gitrepo
+Pkg.add(url="/remote/mycompany/juliapackages/OurPackage") # From path to local gitrepo
+Pkg.add(url="https://github.com/Company/MonoRepo", subdir="juliapkgs/Package.jl)") # With subdir

After the installation of new packages the project will be precompiled. See more at Environment Precompilation.

See also PackageSpec, Pkg.develop.

source
Pkg.developFunction
Pkg.develop(pkg::Union{String, Vector{String}}; io::IO=stderr, preserve=PRESERVE_TIERED, installed=false)
+Pkg.develop(pkgs::Union{PackageSpec, Vector{PackageSpec}}; io::IO=stderr, preserve=PRESERVE_TIERED, installed=false)

Make a package available for development by tracking it by path. If pkg is given with only a name or by a URL, the package will be downloaded to the location specified by the environment variable JULIA_PKG_DEVDIR, with joinpath(DEPOT_PATH[1],"dev") being the default.

If pkg is given as a local path, the package at that path will be tracked.

The preserve strategies offered by Pkg.add are also available via the preserve kwarg. See Pkg.add for more information.

Examples

# By name
+Pkg.develop("Example")
+
+# By url
+Pkg.develop(url="https://github.com/JuliaLang/Compat.jl")
+
+# By path
+Pkg.develop(path="MyJuliaPackages/Package.jl")

See also PackageSpec, Pkg.add.

source
Pkg.activateFunction
Pkg.activate([s::String]; shared::Bool=false, io::IO=stderr)
+Pkg.activate(; temp::Bool=false, shared::Bool=false, io::IO=stderr)

Activate the environment at s. The active environment is the environment that is modified by executing package commands. The logic for what path is activated is as follows:

  • If shared is true, the first existing environment named s from the depots in the depot stack will be activated. If no such environment exists, create and activate that environment in the first depot.
  • If temp is true this will create and activate a temporary environment which will be deleted when the julia process is exited.
  • If s is an existing path, then activate the environment at that path.
  • If s is a package in the current project and s is tracking a path, then activate the environment at the tracked path.
  • Otherwise, s is interpreted as a non-existing path, which is then activated.

If no argument is given to activate, then use the first project found in LOAD_PATH.

Examples

Pkg.activate()
+Pkg.activate("local/path")
+Pkg.activate("MyDependency")
+Pkg.activate(; temp=true)
source
Pkg.rmFunction
Pkg.rm(pkg::Union{String, Vector{String}}; mode::PackageMode = PKGMODE_PROJECT)
+Pkg.rm(pkg::Union{PackageSpec, Vector{PackageSpec}}; mode::PackageMode = PKGMODE_PROJECT)

Remove a package from the current project. If mode is equal to PKGMODE_MANIFEST also remove it from the manifest including all recursive dependencies of pkg.

See also PackageSpec, PackageMode.

source
Pkg.updateFunction
Pkg.update(; level::UpgradeLevel=UPLEVEL_MAJOR, mode::PackageMode = PKGMODE_PROJECT, preserve::PreserveLevel)
+Pkg.update(pkg::Union{String, Vector{String}})
+Pkg.update(pkg::Union{PackageSpec, Vector{PackageSpec}})

If no positional argument is given, update all packages in the manifest if mode is PKGMODE_MANIFEST and packages in both manifest and project if mode is PKGMODE_PROJECT. If no positional argument is given, level can be used to control by how much packages are allowed to be upgraded (major, minor, patch, fixed).

If packages are given as positional arguments, the preserve argument can be used to control what other packages are allowed to update:

  • PRESERVE_ALL (default): Only allow pkg to update.
  • PRESERVE_DIRECT: Only allow pkg and indirect dependencies that are not a direct dependency in the project to update.
  • PRESERVE_NONE: Allow pkg and all its indirect dependencies to update.

After any package updates the project will be precompiled. See more at Environment Precompilation.

See also PackageSpec, PackageMode, UpgradeLevel.

source
Pkg.testFunction
Pkg.test(; kwargs...)
+Pkg.test(pkg::Union{String, Vector{String}; kwargs...)
+Pkg.test(pkgs::Union{PackageSpec, Vector{PackageSpec}}; kwargs...)

Keyword arguments:

  • coverage::Bool=false: enable or disable generation of coverage statistics.
  • allow_reresolve::Bool=true: allow Pkg to reresolve the package versions in the test environment
  • julia_args::Union{Cmd, Vector{String}}: options to be passed the test process.
  • test_args::Union{Cmd, Vector{String}}: test arguments (ARGS) available in the test process.
Julia 1.9

allow_reresolve requires at least Julia 1.9.

Run the tests for package pkg, or for the current project (which thus needs to be a package) if no positional argument is given to Pkg.test. A package is tested by running its test/runtests.jl file.

The tests are run by generating a temporary environment with only the pkg package and its (recursive) dependencies in it. If a manifest file exists and the allow_reresolve keyword argument is set to false, the versions in the manifest file are used. Otherwise a feasible set of packages is resolved and installed.

During the tests, test-specific dependencies are active, which are given in the project file as e.g.

[extras]
+Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[targets]
+test = ["Test"]

The tests are executed in a new process with check-bounds=yes and by default startup-file=no. If using the startup file (~/.julia/config/startup.jl) is desired, start julia with --startup-file=yes. Inlining of functions during testing can be disabled (for better coverage accuracy) by starting julia with --inline=no.

source
Pkg.buildFunction
Pkg.build(; verbose = false, io::IO=stderr)
+Pkg.build(pkg::Union{String, Vector{String}}; verbose = false, io::IO=stderr)
+Pkg.build(pkgs::Union{PackageSpec, Vector{PackageSpec}}; verbose = false, io::IO=stderr)

Run the build script in deps/build.jl for pkg and all of its dependencies in depth-first recursive order. If no argument is given to build, the current project is built, which thus needs to be a package. This function is called automatically on any package that gets installed for the first time. verbose = true prints the build output to stdout/stderr instead of redirecting to the build.log file.

source
Pkg.pinFunction
Pkg.pin(pkg::Union{String, Vector{String}}; io::IO=stderr, all_pkgs::Bool=false)
+Pkg.pin(pkgs::Union{PackageSpec, Vector{PackageSpec}}; io::IO=stderr, all_pkgs::Bool=false)

Pin a package to the current version (or the one given in the PackageSpec) or to a certain git revision. A pinned package is never automatically updated: if pkg is tracking a path, or a repository, those remain tracked but will not update. To get updates from the origin path or remote repository the package must first be freed.

Julia 1.7

The all_pkgs kwarg was introduced in julia 1.7.

Examples

Pkg.pin("Example")
+Pkg.pin(name="Example", version="0.3.1")
+Pkg.pin(all_pkgs = true)
source
Pkg.freeFunction
Pkg.free(pkg::Union{String, Vector{String}}; io::IO=stderr, all_pkgs::Bool=false)
+Pkg.free(pkgs::Union{PackageSpec, Vector{PackageSpec}}; io::IO=stderr, all_pkgs::Bool=false)

If pkg is pinned, remove the pin. If pkg is tracking a path, e.g. after Pkg.develop, go back to tracking registered versions. To free all dependencies set all_pkgs=true.

Julia 1.7

The all_pkgs kwarg was introduced in julia 1.7.

Examples

Pkg.free("Package")
+Pkg.free(all_pkgs = true)
source
Pkg.instantiateFunction
Pkg.instantiate(; verbose = false, io::IO=stderr)

If a Manifest.toml file exists in the active project, download all the packages declared in that manifest. Otherwise, resolve a set of feasible packages from the Project.toml files and install them. verbose = true prints the build output to stdout/stderr instead of redirecting to the build.log file. If no Project.toml exist in the current active project, create one with all the dependencies in the manifest and instantiate the resulting project.

After packages have been installed the project will be precompiled. See more at Environment Precompilation.

source
Pkg.resolveFunction
Pkg.resolve(; io::IO=stderr)

Update the current manifest with potential changes to the dependency graph from packages that are tracking a path.

source
Pkg.gcFunction
Pkg.gc(; collect_delay::Period=Day(7), io::IO=stderr)

Garbage-collect package and artifact installations by sweeping over all known Manifest.toml and Artifacts.toml files, noting those that have been deleted, and then finding artifacts and packages that are thereafter not used by any other projects, marking them as "orphaned". This method will only remove orphaned objects (package versions, artifacts, and scratch spaces) that have been continually un-used for a period of collect_delay; which defaults to seven days.

source
Pkg.statusFunction
Pkg.status([pkgs...]; outdated::Bool=false, mode::PackageMode=PKGMODE_PROJECT, diff::Bool=false, compat::Bool=false, extensions::Bool=false, io::IO=stdout)

Print out the status of the project/manifest.

Packages marked with have new versions that can be installed, e.g. via Pkg.up. Those marked with have new versions available, but cannot be installed due to compatibility conflicts with other packages. To see why, set the keyword argument outdated=true.

Setting outdated=true will only show packages that are not on the latest version, their maximum version and why they are not on the latest version (either due to other packages holding them back due to compatibility constraints, or due to compatibility in the project file). As an example, a status output like:

pkg> Pkg.status(; outdated=true)
+Status `Manifest.toml`
+⌃ [a8cc5b0e] Crayons v2.0.0 [<v3.0.0], (<v4.0.4)
+⌅ [b8a86587] NearestNeighbors v0.4.8 (<v0.4.9) [compat]
+⌅ [2ab3a3ac] LogExpFunctions v0.2.5 (<v0.3.0): SpecialFunctions

means that the latest version of Crayons is 4.0.4 but the latest version compatible with the [compat] section in the current project is 3.0.0. The latest version of NearestNeighbors is 0.4.9 but due to compat constrains in the project it is held back to 0.4.8. The latest version of LogExpFunctions is 0.3.0 but SpecialFunctions is holding it back to 0.2.5.

If mode is PKGMODE_PROJECT, print out status only about the packages that are in the project (explicitly added). If mode is PKGMODE_MANIFEST, print status also about those in the manifest (recursive dependencies). If there are any packages listed as arguments, the output will be limited to those packages.

Setting ext=true will show dependencies with extensions and what extension dependencies of those that are currently loaded.

Setting diff=true will, if the environment is in a git repository, limit the output to the difference as compared to the last git commit.

See Pkg.project and Pkg.dependencies to get the project/manifest status as a Julia object instead of printing it.

Julia 1.8

The and indicators were added in Julia 1.8. The outdated keyword argument requires at least Julia 1.8.

source
Pkg.compatFunction
Pkg.compat()

Interactively edit the [compat] entries within the current Project.

Pkg.compat(pkg::String, compat::String)

Set the [compat] string for the given package within the current Project.

See Compatibility for more information on the project [compat] section.

source
Pkg.precompileFunction
Pkg.precompile(; strict::Bool=false, timing::Bool=false)
+Pkg.precompile(pkg; strict::Bool=false, timing::Bool=false)
+Pkg.precompile(pkgs; strict::Bool=false, timing::Bool=false)

Precompile all or specific dependencies of the project in parallel.

Set timing=true to show the duration of the precompilation of each dependency.

Note

Errors will only throw when precompiling the top-level dependencies, given that not all manifest dependencies may be loaded by the top-level dependencies on the given system. This can be overridden to make errors in all dependencies throw by setting the kwarg strict to true

Note

This method is called automatically after any Pkg action that changes the manifest. Any packages that have previously errored during precompilation won't be retried in auto mode until they have changed. To disable automatic precompilation set ENV["JULIA_PKG_PRECOMPILE_AUTO"]=0. To manually control the number of tasks used set ENV["JULIA_NUM_PRECOMPILE_TASKS"].

Julia 1.8

Specifying packages to precompile requires at least Julia 1.8.

Julia 1.9

Timing mode requires at least Julia 1.9.

Examples

Pkg.precompile()
+Pkg.precompile("Foo")
+Pkg.precompile(["Foo", "Bar"])
source
Pkg.offlineFunction
Pkg.offline(b::Bool=true)

Enable (b=true) or disable (b=false) offline mode.

In offline mode Pkg tries to do as much as possible without connecting to internet. For example, when adding a package Pkg only considers versions that are already downloaded in version resolution.

To work in offline mode across Julia sessions you can set the environment variable JULIA_PKG_OFFLINE to "true".

source
Pkg.whyFunction
Pkg.why(pkg::Union{String, Vector{String}})
+Pkg.why(pkg::Union{PackageSpec, Vector{PackageSpec}})

Show the reason why this package is in the manifest. The output is all the different ways to reach the package through the dependency graph starting from the dependencies.

Julia 1.9

This function requires at least Julia 1.9.

source
Pkg.dependenciesFunction
Pkg.dependencies()::Dict{UUID, PackageInfo}

This feature is considered experimental.

Query the dependency graph of the active project. The result is a Dict that maps a package UUID to a PackageInfo struct representing the dependency (a package).

PackageInfo fields

FieldDescription
nameThe name of the package
versionThe version of the package (this is Nothing for stdlibs)
tree_hashA file hash of the package directory tree
is_direct_depThe package is a direct dependency
is_pinnedWhether a package is pinned
is_tracking_pathWhether a package is tracking a path
is_tracking_repoWhether a package is tracking a repository
is_tracking_registryWhether a package is being tracked by registry i.e. not by path nor by repository
git_revisionThe git revision when tracking by repository
git_sourceThe git source when tracking by repository
sourceThe directory containing the source code for that package
dependenciesThe dependencies of that package as a vector of UUIDs
source
Pkg.respect_sysimage_versionsFunction
Pkg.respect_sysimage_versions(b::Bool=true)

Enable (b=true) or disable (b=false) respecting versions that are in the sysimage (enabled by default).

If this option is enabled, Pkg will only install packages that have been put into the sysimage (e.g. via PackageCompiler) at the version of the package in the sysimage. Also, trying to add a package at a URL or develop a package that is in the sysimage will error.

source
Pkg.projectFunction
Pkg.project()::ProjectInfo

This feature is considered experimental.

Request a ProjectInfo struct which contains information about the active project.

ProjectInfo fields

FieldDescription
nameThe project's name
uuidThe project's UUID
versionThe project's version
ispackageWhether the project is a package (has a name and uuid)
dependenciesThe project's direct dependencies as a Dict which maps dependency name to dependency UUID
pathThe location of the project file which defines the active project
source
Pkg.undoFunction
undo()

Undoes the latest change to the active project. Only states in the current session are stored, up to a maximum of 50 states.

See also: redo.

source
Pkg.setprotocol!Function
setprotocol!(;
+    domain::AbstractString = "github.com",
+    protocol::Union{Nothing, AbstractString}=nothing
+)

Set the protocol used to access hosted packages when adding a url or developing a package. Defaults to delegating the choice to the package developer (protocol === nothing). Other choices for protocol are "https" or "git".

Examples

julia> Pkg.setprotocol!(domain = "github.com", protocol = "ssh")
+
+julia> Pkg.setprotocol!(domain = "gitlab.mycompany.com")
source
Pkg.PackageSpecType
PackageSpec(name::String, [uuid::UUID, version::VersionNumber])
+PackageSpec(; name, url, path, subdir, rev, version, mode, level)

A PackageSpec is a representation of a package with various metadata. This includes:

  • The name of the package.
  • The package's unique uuid.
  • A version (for example when adding a package). When upgrading, can also be an instance of the enum UpgradeLevel. If the version is given as a String this means that unspecified versions are "free", for example version="0.5" allows any version 0.5.x to be installed. If given as a VersionNumber, the exact version is used, for example version=v"0.5.3".
  • A url and an optional git revision. rev can be a branch name or a git commit SHA1.
  • A local path. This is equivalent to using the url argument but can be more descriptive.
  • A subdir which can be used when adding a package that is not in the root of a repository.

Most functions in Pkg take a Vector of PackageSpec and do the operation on all the packages in the vector.

Many functions that take a PackageSpec or a Vector{PackageSpec} can be called with a more concise notation with NamedTuples. For example, Pkg.add can be called either as the explicit or concise versions as:

ExplicitConcise
Pkg.add(PackageSpec(name="Package"))Pkg.add(name = "Package")
Pkg.add(PackageSpec(url="www.myhost.com/MyPkg")))Pkg.add(name = "Package")
Pkg.add([PackageSpec(name="Package"), PackageSpec(path="/MyPkg"])Pkg.add([(;name="Package"), (;path="MyPkg")])

Below is a comparison between the REPL mode and the functional API:

REPLAPI
PackagePackageSpec("Package")
Package@0.2PackageSpec(name="Package", version="0.2")
-PackageSpec(name="Package", version=v"0.2.1")
Package=a67d...PackageSpec(name="Package", uuid="a67d...")
Package#masterPackageSpec(name="Package", rev="master")
local/path#featurePackageSpec(path="local/path"; rev="feature")
www.mypkg.comPackageSpec(url="www.mypkg.com")
--major PackagePackageSpec(name="Package", version=UPLEVEL_MAJOR)
source
Pkg.UpgradeLevelType
UpgradeLevel

An enum with the instances

  • UPLEVEL_FIXED
  • UPLEVEL_PATCH
  • UPLEVEL_MINOR
  • UPLEVEL_MAJOR

Determines how much a package is allowed to be updated. Used as an argument to PackageSpec or as an argument to Pkg.update.

source

Registry API Reference

The functional API for registries uses RegistrySpecs, similar to PackageSpec.

Pkg.RegistrySpecType
RegistrySpec(name::String)
+RegistrySpec(; name, url, path)

A RegistrySpec is a representation of a registry with various metadata, much like PackageSpec.

Most registry functions in Pkg take a Vector of RegistrySpec and do the operation on all the registries in the vector.

Examples

Below is a comparison between the REPL mode and the functional API::

REPLAPI
MyRegistryRegistrySpec("MyRegistry")
MyRegistry=a67d...RegistrySpec(name="MyRegistry", uuid="a67d...")
local/pathRegistrySpec(path="local/path")
www.myregistry.comRegistrySpec(url="www.myregistry.com")
source
Pkg.Registry.addFunction
Pkg.Registry.add(registry::RegistrySpec)

Add new package registries.

The no-argument Pkg.Registry.add() will install the default registries.

Examples

Pkg.Registry.add("General")
+Pkg.Registry.add(RegistrySpec(uuid = "23338594-aafe-5451-b93e-139f81909106"))
+Pkg.Registry.add(RegistrySpec(url = "https://github.com/JuliaRegistries/General.git"))
source
Pkg.Registry.rmFunction
Pkg.Registry.rm(registry::String)
+Pkg.Registry.rm(registry::RegistrySpec)

Remove registries.

Examples

Pkg.Registry.rm("General")
+Pkg.Registry.rm(RegistrySpec(uuid = "23338594-aafe-5451-b93e-139f81909106"))
source
Pkg.Registry.updateFunction
Pkg.Registry.update()
+Pkg.Registry.update(registry::RegistrySpec)
+Pkg.Registry.update(registry::Vector{RegistrySpec})

Update registries. If no registries are given, update all available registries.

Examples

Pkg.Registry.update()
+Pkg.Registry.update("General")
+Pkg.Registry.update(RegistrySpec(uuid = "23338594-aafe-5451-b93e-139f81909106"))
source
Pkg.Registry.statusFunction
Pkg.Registry.status()

Display information about available registries.

Examples

Pkg.Registry.status()
source

Artifacts API Reference

Pkg.Artifacts.create_artifactFunction
create_artifact(f::Function)

Creates a new artifact by running f(artifact_path), hashing the result, and moving it to the artifact store (~/.julia/artifacts on a typical installation). Returns the identifying tree hash of this artifact.

source
Pkg.Artifacts.remove_artifactFunction
remove_artifact(hash::SHA1; honor_overrides::Bool=false)

Removes the given artifact (identified by its SHA1 git tree hash) from disk. Note that if an artifact is installed in multiple depots, it will be removed from all of them. If an overridden artifact is requested for removal, it will be silently ignored; this method will never attempt to remove an overridden artifact.

In general, we recommend that you use Pkg.gc() to manage artifact installations and do not use remove_artifact() directly, as it can be difficult to know if an artifact is being used by another package.

source
Pkg.Artifacts.verify_artifactFunction
verify_artifact(hash::SHA1; honor_overrides::Bool=false)

Verifies that the given artifact (identified by its SHA1 git tree hash) is installed on- disk, and retains its integrity. If the given artifact is overridden, skips the verification unless honor_overrides is set to true.

source
Pkg.Artifacts.bind_artifact!Function
bind_artifact!(artifacts_toml::String, name::String, hash::SHA1;
+               platform::Union{AbstractPlatform,Nothing} = nothing,
+               download_info::Union{Vector{Tuple},Nothing} = nothing,
+               lazy::Bool = false,
+               force::Bool = false)

Writes a mapping of name -> hash within the given (Julia)Artifacts.toml file. If platform is not nothing, this artifact is marked as platform-specific, and will be a multi-mapping. It is valid to bind multiple artifacts with the same name, but different platforms and hash'es within the same artifacts_toml. If force is set to true, this will overwrite a pre-existant mapping, otherwise an error is raised.

download_info is an optional vector that contains tuples of URLs and a hash. These URLs will be listed as possible locations where this artifact can be obtained. If lazy is set to true, even if download information is available, this artifact will not be downloaded until it is accessed via the artifact"name" syntax, or ensure_artifact_installed() is called upon it.

source
Pkg.Artifacts.unbind_artifact!Function
unbind_artifact!(artifacts_toml::String, name::String; platform = nothing)

Unbind the given name from an (Julia)Artifacts.toml file. Silently fails if no such binding exists within the file.

source
Pkg.Artifacts.download_artifactFunction
download_artifact(tree_hash::SHA1, tarball_url::String, tarball_hash::String;
+                  verbose::Bool = false, io::IO=stderr)

Download/install an artifact into the artifact store. Returns true on success, returns an error object on failure.

Julia 1.8

As of Julia 1.8 this function returns the error object rather than false when failure occurs

source
Pkg.Artifacts.ensure_artifact_installedFunction
ensure_artifact_installed(name::String, artifacts_toml::String;
+                          platform::AbstractPlatform = HostPlatform(),
+                          pkg_uuid::Union{Base.UUID,Nothing}=nothing,
+                          verbose::Bool = false,
+                          quiet_download::Bool = false,
+                          io::IO=stderr)

Ensures an artifact is installed, downloading it via the download information stored in artifacts_toml if necessary. Throws an error if unable to install.

source
Pkg.Artifacts.ensure_all_artifacts_installedFunction
ensure_all_artifacts_installed(artifacts_toml::String;
+                               platform = HostPlatform(),
+                               pkg_uuid = nothing,
+                               include_lazy = false,
+                               verbose = false,
+                               quiet_download = false,
+                               io::IO=stderr)

Installs all non-lazy artifacts from a given (Julia)Artifacts.toml file. package_uuid must be provided to properly support overrides from Overrides.toml entries in depots.

If include_lazy is set to true, then lazy packages will be installed as well.

This function is deprecated and should be replaced with the following snippet:

artifacts = select_downloadable_artifacts(artifacts_toml; platform, include_lazy)
+for name in keys(artifacts)
+    ensure_artifact_installed(name, artifacts[name], artifacts_toml; platform=platform)
+end
Warning

This function is deprecated in Julia 1.6 and will be removed in a future version. Use select_downloadable_artifacts() and ensure_artifact_installed() instead.

source
Pkg.Artifacts.archive_artifactFunction
archive_artifact(hash::SHA1, tarball_path::String; honor_overrides::Bool=false)

Archive an artifact into a tarball stored at tarball_path, returns the SHA256 of the resultant tarball as a hexadecimal string. Throws an error if the artifact does not exist. If the artifact is overridden, throws an error unless honor_overrides is set.

source
diff --git a/previews/PR3585/artifacts/index.html b/previews/PR3585/artifacts/index.html new file mode 100644 index 0000000000..463496a423 --- /dev/null +++ b/previews/PR3585/artifacts/index.html @@ -0,0 +1,140 @@ + +8. Artifacts · Pkg.jl

8. Artifacts

Pkg can install and manage containers of data that are not Julia packages. These containers can contain platform-specific binaries, datasets, text, or any other kind of data that would be convenient to place within an immutable, life-cycled datastore. These containers, (called "Artifacts") can be created locally, hosted anywhere, and automatically downloaded and unpacked upon installation of your Julia package. This mechanism is also used to provide the binary dependencies for packages built with BinaryBuilder.jl.

Basic Usage

Pkg artifacts are declared in an Artifacts.toml file, which can be placed in your current directory or in the root of your package. Currently, Pkg supports downloading of tarfiles (which can be compressed) from a URL. Following is a minimal Artifacts.toml file which will permit the downloading of a socrates.tar.gz file from github.com. In this example, a single artifact, given the name socrates, is defined.

# a simple Artifacts.toml file
+[socrates]
+git-tree-sha1 = "43563e7631a7eafae1f9f8d9d332e3de44ad7239"
+
+    [[socrates.download]]
+    url = "https://github.com/staticfloat/small_bin/raw/master/socrates.tar.gz"
+    sha256 = "e65d2f13f2085f2c279830e863292312a72930fee5ba3c792b14c33ce5c5cc58"

If this Artifacts.toml file is placed in your current directory, then socrates.tar.gz can be downloaded, unpacked and used with artifact"socrates". Since this tarball contains a folder bin, and a text file named socrates within that folder, we could access the content of that file as follows.

using Pkg.Artifacts
+
+rootpath = artifact"socrates"
+open(joinpath(rootpath, "bin", "socrates")) do file
+    println(read(file, String))
+end

If you have an existing tarball that is accessible via a url, it could also be accessed in this manner. To create the Artifacts.toml you must compute two hashes: the sha256 hash of the download file, and the git-tree-sha1 of the unpacked content. These can be computed as follows.

using Tar, Inflate, SHA
+
+filename = "socrates.tar.gz"
+println("sha256: ", bytes2hex(open(sha256, filename)))
+println("git-tree-sha1: ", Tar.tree_hash(IOBuffer(inflate_gzip(filename))))

To access this artifact from within a package you create, place the Artifacts.toml at the root of your package, adjacent to Project.toml. Then, make sure to add Pkg in your deps and set julia = "1.3" or higher in your compat section.

Artifacts.toml files

Pkg provides an API for working with artifacts, as well as a TOML file format for recording artifact usage in your packages, and to automate downloading of artifacts at package install time. Artifacts can always be referred to by content hash, but are typically accessed by a name that is bound to a content hash in an Artifacts.toml file that lives in a project's source tree.

Note

It is possible to use the alternate name JuliaArtifacts.toml, similar to how it is possible to use JuliaProject.toml and JuliaManifest.toml instead of Project.toml and Manifest.toml, respectively.

An example Artifacts.toml file is shown here:

# Example Artifacts.toml file
+[socrates]
+git-tree-sha1 = "43563e7631a7eafae1f9f8d9d332e3de44ad7239"
+lazy = true
+
+    [[socrates.download]]
+    url = "https://github.com/staticfloat/small_bin/raw/master/socrates.tar.gz"
+    sha256 = "e65d2f13f2085f2c279830e863292312a72930fee5ba3c792b14c33ce5c5cc58"
+
+    [[socrates.download]]
+    url = "https://github.com/staticfloat/small_bin/raw/master/socrates.tar.bz2"
+    sha256 = "13fc17b97be41763b02cbb80e9d048302cec3bd3d446c2ed6e8210bddcd3ac76"
+
+[[c_simple]]
+arch = "x86_64"
+git-tree-sha1 = "4bdf4556050cb55b67b211d4e78009aaec378cbc"
+libc = "musl"
+os = "linux"
+
+    [[c_simple.download]]
+    sha256 = "411d6befd49942826ea1e59041bddf7dbb72fb871bb03165bf4e164b13ab5130"
+    url = "https://github.com/JuliaBinaryWrappers/c_simple_jll.jl/releases/download/c_simple+v1.2.3+0/c_simple.v1.2.3.x86_64-linux-musl.tar.gz"
+
+[[c_simple]]
+arch = "x86_64"
+git-tree-sha1 = "51264dbc770cd38aeb15f93536c29dc38c727e4c"
+os = "macos"
+
+    [[c_simple.download]]
+    sha256 = "6c17d9e1dc95ba86ec7462637824afe7a25b8509cc51453f0eb86eda03ed4dc3"
+    url = "https://github.com/JuliaBinaryWrappers/c_simple_jll.jl/releases/download/c_simple+v1.2.3+0/c_simple.v1.2.3.x86_64-apple-darwin14.tar.gz"
+
+[processed_output]
+git-tree-sha1 = "1c223e66f1a8e0fae1f9fcb9d3f2e3ce48a82200"

This Artifacts.toml binds three artifacts; one named socrates, one named c_simple and one named processed_output. The single required piece of information for an artifact is its git-tree-sha1. Because artifacts are addressed only by their content hash, the purpose of an Artifacts.toml file is to provide metadata about these artifacts, such as binding a human-readable name to a content hash, providing information about where an artifact may be downloaded from, or even binding a single name to multiple hashes, keyed by platform-specific constraints such as operating system or libgfortran version.

Artifact types and properties

In the above example, the socrates artifact showcases a platform-independent artifact with multiple download locations. When downloading and installing the socrates artifact, URLs will be attempted in order until one succeeds. The socrates artifact is marked as lazy, which means that it will not be automatically downloaded when the containing package is installed, but rather will be downloaded on-demand when the package first attempts to use it.

The c_simple artifact showcases a platform-dependent artifact, where each entry in the c_simple array contains keys that help the calling package choose the appropriate download based on the particulars of the host machine. Note that each artifact contains both a git-tree-sha1 and a sha256 for each download entry. This is to ensure that the downloaded tarball is secure before attempting to unpack it, as well as enforcing that all tarballs must expand to the same overall tree hash.

The processed_output artifact contains no download stanza, and so cannot be installed. An artifact such as this would be the result of code that was previously run, generating a new artifact and binding the resultant hash to a name within this project.

Using Artifacts

Artifacts can be manipulated using convenient APIs exposed from the Pkg.Artifacts namespace. As a motivating example, let us imagine that we are writing a package that needs to load the Iris machine learning dataset. While we could just download the dataset during a build step into the package directory, and many packages currently do precisely this, that has some significant drawbacks:

  • First, it modifies the package directory, making package installation stateful, which we want to avoid. In the future, we would like to reach the point where packages can be installed completely read-only, instead of being able to modify themselves after installation.

  • Second, the downloaded data is not shared across different versions of our package. If we have three different versions of the package installed for use by various projects, then we need three different copies of the data, even if it hasn't changed between those versions. Moreover, each time we upgrade or downgrade the package unless we do something clever (and probably brittle), we have to download the data again.

With artifacts, we will instead check to see if our iris artifact already exists on-disk and only if it doesn't will we download and install it, after which we can bind the result into our Artifacts.toml file:

using Pkg.Artifacts
+
+# This is the path to the Artifacts.toml we will manipulate
+artifact_toml = joinpath(@__DIR__, "Artifacts.toml")
+
+# Query the `Artifacts.toml` file for the hash bound to the name "iris"
+# (returns `nothing` if no such binding exists)
+iris_hash = artifact_hash("iris", artifact_toml)
+
+# If the name was not bound, or the hash it was bound to does not exist, create it!
+if iris_hash == nothing || !artifact_exists(iris_hash)
+    # create_artifact() returns the content-hash of the artifact directory once we're finished creating it
+    iris_hash = create_artifact() do artifact_dir
+        # We create the artifact by simply downloading a few files into the new artifact directory
+        iris_url_base = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris"
+        download("$(iris_url_base)/iris.data", joinpath(artifact_dir, "iris.csv"))
+        download("$(iris_url_base)/bezdekIris.data", joinpath(artifact_dir, "bezdekIris.csv"))
+        download("$(iris_url_base)/iris.names", joinpath(artifact_dir, "iris.names"))
+    end
+
+    # Now bind that hash within our `Artifacts.toml`.  `force = true` means that if it already exists,
+    # just overwrite with the new content-hash.  Unless the source files change, we do not expect
+    # the content hash to change, so this should not cause unnecessary version control churn.
+    bind_artifact!(artifact_toml, "iris", iris_hash)
+end
+
+# Get the path of the iris dataset, either newly created or previously generated.
+# this should be something like `~/.julia/artifacts/dbd04e28be047a54fbe9bf67e934be5b5e0d357a`
+iris_dataset_path = artifact_path(iris_hash)

For the specific use case of using artifacts that were previously bound, we have the shorthand notation artifact"name" which will automatically search for the Artifacts.toml file contained within the current package, look up the given artifact by name, install it if it is not yet installed, then return the path to that given artifact. An example of this shorthand notation is given below:

using Pkg.Artifacts
+
+# For this to work, an `Artifacts.toml` file must be in the current working directory
+# (or in the root of the current package) and must define a mapping for the "iris"
+# artifact.  If it does not exist on-disk, it will be downloaded.
+iris_dataset_path = artifact"iris"

The Pkg.Artifacts API

The Artifacts API is broken up into three levels: hash-aware functions, name-aware functions and utility functions.

  • Hash-aware functions deal with content-hashes and essentially nothing else. These methods allow you to query whether an artifact exists, what its path is, verify that an artifact satisfies its content hash on-disk, etc. Hash-aware functions include: artifact_exists(), artifact_path(), remove_artifact(), verify_artifact() and archive_artifact(). Note that in general you should not use remove_artifact() and should instead use Pkg.gc() to cleanup artifact installations.

  • Name-aware functions deal with bound names within an Artifacts.toml file, and as such, typically require both a path to an Artifacts.toml file as well as the artifact name. Name-aware functions include: artifact_meta(), artifact_hash(), bind_artifact!(), unbind_artifact!(), download_artifact() and ensure_artifact_installed().

  • Utility functions deal with miscellaneous aspects of artifact life, such as create_artifact(), ensure_all_artifacts_installed(), and even the @artifact_str string macro.

For a full listing of docstrings and methods, see the Artifacts Reference section.

Overriding artifact locations

It is occasionally necessary to be able to override the location and content of an artifact. A common use case is a computing environment where certain versions of a binary dependency must be used, regardless of what version of this dependency a package was published with. While a typical Julia configuration would download, unpack and link against a generic library, a system administrator may wish to disable this and instead use a library already installed on the local machine. To enable this, Pkg supports a per-depot Overrides.toml file placed within the artifacts depot directory (e.g. ~/.julia/artifacts/Overrides.toml for the default user depot) that can override the location of an artifact either by content-hash or by package UUID and bound artifact name. Additionally, the destination location can be either an absolute path, or a replacement artifact content hash. This allows sysadmins to create their own artifacts which they can then use by overriding other packages to use the new artifact.

# Override single hash to an absolute path
+78f35e74ff113f02274ce60dab6e92b4546ef806 = "/path/to/replacement"
+
+# Override single hash to new artifact content-hash
+683942669b4639019be7631caa28c38f3e1924fe = "d826e316b6c0d29d9ad0875af6ca63bf67ed38c3"
+
+# Override package bindings by specifying the package UUID and bound artifact name
+# For demonstration purposes we assume this package is called `Foo`
+[d57dbccd-ca19-4d82-b9b8-9d660942965b]
+libfoo = "/path/to/libfoo"
+libbar = "683942669b4639019be7631caa28c38f3e1924fe"

Due to the layered nature of Pkg depots, multiple Overrides.toml files may be in effect at once. This allows the "inner" Overrides.toml files to override the overrides placed within the "outer" Overrides.toml files. To remove an override and re-enable default location logic for an artifact, insert an entry mapping to the empty string:

78f35e74ff113f02274ce60dab6e92b4546ef806 = "/path/to/new/replacement"
+683942669b4639019be7631caa28c38f3e1924fe = ""
+
+[d57dbccd-ca19-4d82-b9b8-9d660942965b]
+libfoo = ""

If the two Overrides.toml snippets as given above are layered on top of each other, the end result will be mapping the content-hash 78f35e74ff113f02274ce60dab6e92b4546ef806 to "/path/to/new/replacement", and mapping Foo.libbar to the artifact identified by the content-hash 683942669b4639019be7631caa28c38f3e1924fe. Note that while that hash was previously overridden, it is no longer, and therefore Foo.libbar will look directly at locations such as ~/.julia/artifacts/683942669b4639019be7631caa28c38f3e1924fe.

Most methods that are affected by overrides can ignore overrides by setting honor_overrides=false as a keyword argument within them. For UUID/name-based overrides to work, Artifacts.toml files must be loaded with the knowledge of the UUID of the loading package. This is deduced automatically by the artifacts"" string macro, however, if you are for some reason manually using the Pkg.Artifacts API within your package and you wish to honor overrides, you must provide the package UUID to API calls like artifact_meta() and ensure_artifact_installed() via the pkg_uuid keyword argument.

Extending Platform Selection

Julia 1.7

Pkg's extended platform selection requires at least Julia 1.7, and is considered experimental.

New in Julia 1.6, Platform objects can have extended attributes applied to them, allowing artifacts to be tagged with things such as CUDA driver version compatibility, microarchitectural compatibility, julia version compatibility and more! Note that this feature is considered experimental and may change in the future. If you as a package developer find yourself needing this feature, please get in contact with us so it can evolve for the benefit of the whole ecosystem. In order to support artifact selection at Pkg.add() time, Pkg will run the specially-named file <project_root>/.pkg/select_artifacts.jl, passing the current platform triplet as the first argument. This artifact selection script should print a TOML-serialized dictionary representing the artifacts that this package needs according to the given platform, and perform any inspection of the system as necessary to auto-detect platform capabilities if they are not explicitly provided by the given platform triplet. The format of the dictionary should match that returned from Artifacts.select_downloadable_artifacts(), and indeed most packages should simply call that function with an augmented Platform object. An example artifact selection hook definition might look like the following, split across two files:

# .pkg/platform_augmentation.jl
+using Libdl, Base.BinaryPlatforms
+function augment_platform!(p::Platform)
+    # If this platform object already has a `cuda` tag set, don't augment
+    if haskey(p, "cuda")
+        return p
+    end
+
+    # Open libcuda explicitly, so it gets `dlclose()`'ed after we're done
+    dlopen("libcuda") do lib
+        # find symbol to ask for driver version; if we can't find it, just silently continue
+        cuDriverGetVersion = dlsym(lib, "cuDriverGetVersion"; throw_error=false)
+        if cuDriverGetVersion !== nothing
+            # Interrogate CUDA driver for driver version:
+            driverVersion = Ref{Cint}()
+            ccall(cuDriverGetVersion, UInt32, (Ptr{Cint},), driverVersion)
+
+            # Store only the major version
+            p["cuda"] = div(driverVersion, 1000)
+        end
+    end
+
+    # Return possibly-altered `Platform` object
+    return p
+end
using TOML, Artifacts, Base.BinaryPlatforms
+include("./platform_augmentation.jl")
+artifacts_toml = joinpath(dirname(@__DIR__), "Artifacts.toml")
+
+# Get "target triplet" from ARGS, if given (defaulting to the host triplet otherwise)
+target_triplet = get(ARGS, 1, Base.BinaryPlatforms.host_triplet())
+
+# Augment this platform object with any special tags we require
+platform = augment_platform!(HostPlatform(parse(Platform, target_triplet)))
+
+# Select all downloadable artifacts that match that platform
+artifacts = select_downloadable_artifacts(artifacts_toml; platform)
+
+# Output the result to `stdout` as a TOML dictionary
+TOML.print(stdout, artifacts)

In this hook definition, our platform augmentation routine opens a system library (libcuda), searches it for a symbol to give us the CUDA driver version, then embeds the major version of that version number into the cuda property of the Platform object we are augmenting. While it is not critical for this code to actually attempt to close the loaded library (as it will most likely be opened again by the CUDA package immediately after the package operations are completed) it is best practice to make hooks as lightweight and transparent as possible, as they may be used by other Pkg utilities in the future. In your own package, you should also use augmented platform objects when using the @artifact_str macro, as follows:

include("../.pkg/platform_augmentation.jl")
+
+function __init__()
+    p = augment_platform!(HostPlatform())
+    global my_artifact_dir = @artifact_str("MyArtifact", p)
+end

This ensures that the same artifact is used by your code as Pkg attempted to install.

Artifact selection hooks are only allowed to use Base, Artifacts, Libdl, and TOML. They are not allowed to use any other standard libraries, and they are not allowed to use any packages (including the package to which they belong).

diff --git a/previews/PR3585/assets/custom.css b/previews/PR3585/assets/custom.css new file mode 100644 index 0000000000..242cd57ddd --- /dev/null +++ b/previews/PR3585/assets/custom.css @@ -0,0 +1,4 @@ +#documenter .docs-sidebar .docs-logo > img, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img { + max-height: 12rem; +} diff --git a/previews/PR3585/assets/documenter.js b/previews/PR3585/assets/documenter.js new file mode 100644 index 0000000000..6adfbbbf4b --- /dev/null +++ b/previews/PR3585/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function() { + var settings = $('#documenter-settings'); + $('#documenter-settings-button').click(function(){ + settings.toggleClass('is-active'); + }); + // Close the dialog if X is clicked + $('#documenter-settings button.delete').click(function(){ + settings.removeClass('is-active'); + }); + // Close dialog if ESC is pressed + $(document).keyup(function(e) { + if (e.keyCode == 27) settings.removeClass('is-active'); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function() { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button") + sidebar_button.click(function(ev) { + ev.preventDefault(); + sidebar.toggleClass('visible'); + if (sidebar.hasClass('visible')) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind('click', function(ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + }); +}) + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function() { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css('max-width'), 10); + var L0 = e.width(); + if(L0 > L) { + var h0 = parseInt(e.css('font-size'), 10); + e.css('font-size', L * h0 / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on('orientationchange', resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function() { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if(typeof active !== 'undefined') { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +function set_theme(theme) { + var active = null; + var disabled = []; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + var themename = ss.ownerNode.getAttribute("data-theme-name"); + if(themename === null) continue; // ignore non-theme stylesheets + // Find the active theme + if(themename === theme) active = ss; + else disabled.push(ss); + } + if(active !== null) { + active.disabled = false; + if(active.ownerNode.getAttribute("data-theme-primary") === null) { + document.getElementsByTagName('html')[0].className = "theme--" + theme; + } else { + document.getElementsByTagName('html')[0].className = ""; + } + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + + // Store the theme in localStorage + if(typeof(window.localStorage) !== "undefined") { + window.localStorage.setItem("documenter-theme", theme); + } else { + console.error("Browser does not support window.localStorage"); + } +} + +// Theme picker setup +$(document).ready(function() { + // onchange callback + $('#documenter-themepicker').change(function themepick_callback(ev){ + var themename = $('#documenter-themepicker option:selected').attr('value'); + set_theme(themename); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if(typeof(window.localStorage) !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if(theme !== null) { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = (e.value === theme); + }) + } else { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = $("html").hasClass(`theme--${e.value}`); + }) + } + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/previews/PR3585/assets/logo.png b/previews/PR3585/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3517825db95f1b423cbc654b17d8856818777bb1 GIT binary patch literal 133246 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 + // MIT License + function parseUri (str) { + var o = parseUri.options, + m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), + uri = {}, + i = 14; + + while (i--) uri[o.key[i]] = m[i] || ""; + + uri[o.q.name] = {}; + uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { + if ($1) uri[o.q.name][$1] = $2; + }); + + return uri; + }; + parseUri.options = { + strictMode: false, + key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], + q: { + name: "queryKey", + parser: /(?:^|&)([^&=]*)=?([^&]*)/g + }, + parser: { + strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, + loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ + } + }; + + $("#search-form").submit(function(e) { + e.preventDefault() + }) + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'does', + 'either', + 'ever', + 'every', + 'from', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'into', + 'it', + 'its', + 'just', + 'least', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'who', + 'whom', + 'why', + 'will', + 'would', + 'yet', + 'you', + 'your' + ]) + + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!" + // would not find anything if searching for "add!", only for the entire qualification + lunr.tokenizer.separator = /[\s\-\.]+/ + + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '') + }) + } + + lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter') + lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer') + + var index = lunr(function () { + this.ref('location') + this.field('title',{boost: 100}) + this.field('text') + documenterSearchIndex['docs'].forEach(function(e) { + this.add(e) + }, this) + }) + var store = {} + + documenterSearchIndex['docs'].forEach(function(e) { + store[e.location] = {title: e.title, category: e.category, page: e.page} + }) + + $(function(){ + searchresults = $('#documenter-search-results'); + searchinfo = $('#documenter-search-info'); + searchbox = $('#documenter-search-query'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + function update_search(querystring) { + tokens = lunr.tokenizer(querystring) + results = index.query(function (q) { + tokens.forEach(function (t) { + q.term(t.toString(), { + fields: ["title"], + boost: 100, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["title"], + boost: 10, + usePipeline: true, + editDistance: 2, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["text"], + boost: 1, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + }) + }) + searchinfo.text("Number of results: " + results.length) + searchresults.empty() + results.forEach(function(result) { + data = store[result.ref] + link = $(''+data.title+'') + link.attr('href', documenterBaseURL+'/'+result.ref) + if (data.category != "page"){ + cat = $('('+data.category+', '+data.page+')') + } else { + cat = $('('+data.category+')') + } + li = $('
  • ').append(link).append(" ").append(cat) + searchresults.append(li) + }) + } + + function update_search_box() { + querystring = searchbox.val() + update_search(querystring) + } + + searchbox.keyup(_.debounce(update_search_box, 250)) + searchbox.change(update_search_box) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/previews/PR3585/assets/themes/documenter-dark.css b/previews/PR3585/assets/themes/documenter-dark.css new file mode 100644 index 0000000000..c94a294dcf --- /dev/null +++ b/previews/PR3585/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}html.theme--documenter-dark .tabs,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 .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable,html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);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 .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .list:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .highlight:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-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 .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,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,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}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 .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:15px;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 .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 .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,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 .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,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.button,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 .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,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,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,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.button{outline:none}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],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],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,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 .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #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 .button,html.theme--documenter-dark fieldset[disabled] .button{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:15px !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.85em !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:15px !important}.is-size-7-mobile{font-size:.85em !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:15px !important}.is-size-7-tablet{font-size:.85em !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:15px !important}.is-size-7-touch{font-size:.85em !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:15px !important}.is-size-7-desktop{font-size:.85em !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:15px !important}.is-size-7-widescreen{font-size:.85em !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:15px !important}.is-size-7-fullhd{font-size:.85em !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:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !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:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",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{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;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:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.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:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;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 #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:.75em;padding-right:.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:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}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(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;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:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}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:#fff;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:#fff;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}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:#fff}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:#fff;color:#fff}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:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !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:#fff;box-shadow:none;color:#fff}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:#fff}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 #fff #fff !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:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}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:#000;border-color:transparent;color:#fff}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:#fff;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:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !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:#fff}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 #fff #fff !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:#fff;color:#fff}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:#fff;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:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:#282f2f}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(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:#1d2122}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:#282f2f;border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}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:#ecf0f1;border-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !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 #282f2f #282f2f !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:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}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:#282f2f;color:#ecf0f1}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 #ecf0f1 #ecf0f1 !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:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#ecf0f1}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:#232829;border-color:transparent;color:#ecf0f1}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:#ecf0f1}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(40,47,47,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:#1d2122;border-color:transparent;color:#ecf0f1}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:#282f2f;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:#ecf0f1;color:#282f2f}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:#dde4e6}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:#ecf0f1;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}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:#282f2f;border-color:#282f2f;color:#ecf0f1}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 #282f2f #282f2f !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 #ecf0f1 #ecf0f1 !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:#282f2f;box-shadow:none;color:#282f2f}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:#ecf0f1;color:#ecf0f1}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:#ecf0f1;color:#282f2f}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 #282f2f #282f2f !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:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;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:#335476;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(55,90,127,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:#2f4d6d;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:#375a7f;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:#375a7f}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:#375a7f}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:#375a7f;color:#375a7f}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:#375a7f;border-color:#375a7f;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 #375a7f #375a7f !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:#375a7f;box-shadow:none;color:#375a7f}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:#375a7f}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 #375a7f #375a7f !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:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;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(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}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:#1abc9c}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:#1abc9c;color:#1abc9c}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:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !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:#1abc9c;box-shadow:none;color:#1abc9c}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:#1abc9c}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 #1abc9c #1abc9c !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:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;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(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}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:#024c7d}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:#024c7d;color:#024c7d}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:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !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:#024c7d;box-shadow:none;color:#024c7d}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:#024c7d}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 #024c7d #024c7d !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:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;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(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}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:#008438}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:#008438;color:#008438}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:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !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:#008438;box-shadow:none;color:#008438}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:#008438}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 #008438 #008438 !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:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}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(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}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:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !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 #fff #fff !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:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}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:#fff;color:#ad8100}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 #ad8100 #ad8100 !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:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;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(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}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:#9e1b0d}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:#9e1b0d;color:#9e1b0d}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:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !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:#9e1b0d;box-shadow:none;color:#9e1b0d}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:#9e1b0d}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 #9e1b0d #9e1b0d !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:3px;font-size:.85em}html.theme--documenter-dark .button.is-normal{font-size:15px}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:#8c9b9d;border-color:#dbdee0;box-shadow:none;opacity:.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:#282f2f;border-color:#5e6d6f;color:#dbdee0;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:3px;font-size:.85em}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:#f2f2f2;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:#282f2f;border-left:5px solid #5e6d6f;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;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 #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}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:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}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:.85em}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:#282f2f;border-radius:.4em;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:#fff}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:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:15px;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#5e6d6f}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #5e6d6f 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%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #5e6d6f 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:#375a7f}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:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}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, #375a7f 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#5e6d6f;background-image:linear-gradient(to right, #fff 30%, #5e6d6f 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:.85em}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:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;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:#fff;border-color:#fff;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:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;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:#375a7f;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:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;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:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}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:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}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:#282f2f}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 .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink: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 .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:15px}html.theme--documenter-dark .tags.are-large .tag: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),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink: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 .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{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 .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink: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 .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag: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),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink: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 .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.85em;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 .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.85em}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:15px}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.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 .content kbd: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){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 .content kbd: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){margin-left:0.1875em;margin-right:-0.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink: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 .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.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 .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.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 .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded: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:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;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:15px}html.theme--documenter-dark .title.is-7{font-size:.85em}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;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:15px}html.theme--documenter-dark .subtitle.is-7{font-size:.85em}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:#282f2f;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 .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-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{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-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{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-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{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-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{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,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.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,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.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,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.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,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.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,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.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,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.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}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.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,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.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,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.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,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.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,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.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,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.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,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.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,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.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,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.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,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.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,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.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,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.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,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.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.85em}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{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 .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox{color:#fff;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:#1abc9c;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:#282f2f}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:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}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:#000}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:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}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(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}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:#1d2122}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(40,47,47,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:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}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:#2f4d6d}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(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}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(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}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(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}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(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}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(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}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(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.85em}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:#fff}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.is-loading:after{font-size:.85em}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:#fff;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:#fff}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:#fff}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:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:#282f2f}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:#282f2f}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(236,240,241,0.25);color:#282f2f}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:#282f2f}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#ecf0f1}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:#232829;border-color:transparent;color:#ecf0f1}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(40,47,47,0.25);color:#ecf0f1}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:#1d2122;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;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:#335476;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(55,90,127,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:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;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:#18b193;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(26,188,156,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:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;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:#024470;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(2,76,125,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:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;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:#073;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(0,132,56,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:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}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(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;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:#92190c;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(158,27,13,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:#86170b;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:.85em}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:.4em}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.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:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;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 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;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:#e5eaec;color:#282f2f}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}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:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#ecf0f1;color:#343c3d}html.theme--documenter-dark .file-name{border-color:#5e6d6f;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:#282f2f;display:block;font-size:15px;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:.85em}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:.85em;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}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:.85em;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:15px;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:#5e6d6f}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-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{font-size:.85em}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:#dbdee0;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.is-loading:after{font-size:.85em}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:15px;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}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:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;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:.85em}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:#fff;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);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:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:.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:.75rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #5e6d6f;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:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #5e6d6f}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:#282f2f;border-radius:.4em;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;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:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#5e6d6f;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:.4em}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:.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:.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:.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:#fff;border-radius:.4em;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:#fff}html.theme--documenter-dark .list-item:first-child{border-top-left-radius:.4em;border-top-right-radius:.4em}html.theme--documenter-dark .list-item:last-child{border-bottom-left-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .list-item:not(:last-child){border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .list-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark a.list-item{background-color:#282f2f;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(94,109,111,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(94,109,111,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:15px}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.85em}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:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.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:#282f2f;border-radius:.4em;font-size:15px}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:.85em}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:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff;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:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a;color:#090909}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1;color:#505050}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f;color:#212526}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f8fafc}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;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:#375a7f;color:#2b4159}html.theme--documenter-dark .message.is-link{background-color:#f6fefc}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#0b2f28}html.theme--documenter-dark .message.is-info{background-color:#f5fbff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#033659}html.theme--documenter-dark .message.is-success{background-color:#f5fff9}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#023518}html.theme--documenter-dark .message.is-warning{background-color:#fffcf5}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#3d2e03}html.theme--documenter-dark .message.is-danger{background-color:#fef6f6}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#7a170c}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 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 1em;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:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}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:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}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:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;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:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}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:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@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:#fff}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:#000;color:#fff}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:#fff}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:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:#282f2f}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:#dde4e6;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:#282f2f}@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:#282f2f}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:#dde4e6;color:#282f2f}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:#282f2f}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:#dde4e6;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:#282f2f}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#ecf0f1}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:#ecf0f1}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:#1d2122;color:#ecf0f1}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:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#ecf0f1}@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:#ecf0f1}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:#1d2122;color:#ecf0f1}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:#ecf0f1}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:#1d2122;color:#ecf0f1}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:#282f2f;color:#ecf0f1}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;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:#2f4d6d;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:#2f4d6d;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:#2f4d6d;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:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;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:#17a689;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:#17a689;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:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;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:#023d64;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:#023d64;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:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;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:#006b2d;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:#006b2d;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:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}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:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@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:#fff}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:#946e00;color:#fff}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:#fff}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:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;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:#86170b;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:#86170b;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:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}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 #282f2f}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:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}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:#fff;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;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:#fff;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:rgba(0,0,0,0);color:#1abc9c}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:4rem;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:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;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:#fff;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:rgba(0,0,0,0.2);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:#375a7f;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 - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@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:4rem}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:.4em}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:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}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:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 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:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);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:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;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:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}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:rgba(0,0,0,0)}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:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:15px;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.85em}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:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;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:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}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:#dbdee0;border-color:#dbdee0;box-shadow:none;color:#5e6d6f;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:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;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:15px}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 #5e6d6f;border-left:1px solid #5e6d6f;border-right:1px solid #5e6d6f}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 #5e6d6f}html.theme--documenter-dark .panel-heading{background-color:#282f2f;border-radius:.4em .4em 0 0;color:#f2f2f2;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:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;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:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}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:#282f2f}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:#fff;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:15px;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;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:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;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:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !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:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;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:.4em 0 0 .4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-radius:0 .4em .4em 0}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;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:.85em}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:.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.6666666667%}.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.3333333333%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.6666666667%}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:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .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: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .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:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.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.3333333333%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.6666666667%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.3333333333%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.6666666667%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.3333333333%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.6666666667%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.3333333333%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.6666666667%}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:#fff;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:#fff}}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:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}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:#fff}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:#fff}@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:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;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:#fff}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:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 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, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:#282f2f}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:#282f2f}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(40,47,47,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:#282f2f}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(40,47,47,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:#dde4e6;color:#282f2f}html.theme--documenter-dark .hero.is-light .tabs a{color:#282f2f;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:#282f2f}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:#282f2f;border-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#ecf0f1}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:#ecf0f1}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(236,240,241,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:#ecf0f1}@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:#282f2f}}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(236,240,241,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:#1d2122;color:#ecf0f1}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#ecf0f1;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:#ecf0f1}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 .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{background-color:#ecf0f1;border-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 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, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;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:#375a7f}}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:#2f4d6d;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 .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{background-color:#fff;border-color:#fff;color:#375a7f}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, #214b62 0%, #375a7f 71%, #3a5796 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, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;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:#1abc9c}}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:#17a689;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:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;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:#024c7d}}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:#023d64;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:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;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:#008438}}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:#006b2d;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:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}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:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,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:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;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:#fff}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:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;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:#9e1b0d}}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:#86170b;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:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 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:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,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:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:#282f2f;text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#ecf0f1;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}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:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}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:#f2f2f2}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 pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:15px}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:.85em}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:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f}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:.75rem .75rem;border-bottom:1px solid #5e6d6f}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:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>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:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}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:#f2f2f2}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 pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}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:#f2f2f2}html.theme--documenter-dark .hljs{background: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 li.no-marker{list-style:none}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;overflow-y:hidden}@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:#1f2424;border-bottom:1px solid #5e6d6f;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:.2rem 0rem .4rem #171717;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 #5e6d6f}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 #5e6d6f;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:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:15px;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@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-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;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 #5e6d6f;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:14.25px;margin-left:1em;border-left:1px solid #5e6d6f}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:11.25px;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:#fff;background:#282f2f}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:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}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:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}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 #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:12.75px;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:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@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:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}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:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}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-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-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-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} diff --git a/previews/PR3585/assets/themes/documenter-light.css b/previews/PR3585/assets/themes/documenter-light.css new file mode 100644 index 0000000000..9b9a14b043 --- /dev/null +++ b/previews/PR3585/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable,.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);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}.admonition:not(:last-child),.tabs:not(:last-child),.message:not(:last-child),.list:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.highlight:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-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}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.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}.hero-video,.modal-background,.modal,.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,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-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}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{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:#fff;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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;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:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.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:#222}.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:.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:.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:.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:.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:.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:.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:.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:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !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:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !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:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !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:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !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:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",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:#fff;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:#222;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 #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:.75em;padding-right:.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:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;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:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.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:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !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:#fff;box-shadow:none;color:#fff}.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:#fff}.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 #fff #fff !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:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.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:#000;border-color:transparent;color:#fff}.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:#fff;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:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !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:#fff}.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 #fff #fff !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:#fff;color:#fff}.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:#fff;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:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;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:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.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:#f5f5f5;border-color:#f5f5f5;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !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:#f5f5f5;box-shadow:none;color:#f5f5f5}.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:#f5f5f5}.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 #f5f5f5 #f5f5f5 !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:#f5f5f5}.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:#f5f5f5}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5;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:#f5f5f5;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !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:#f5f5f5}.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 #f5f5f5 #f5f5f5 !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:#f5f5f5;color:#f5f5f5}.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:#f5f5f5;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:#f5f5f5;box-shadow:none;color:#f5f5f5}.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:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;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(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.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:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.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:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !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:#2e63b8;box-shadow:none;color:#2e63b8}.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:#2e63b8}.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 #2e63b8 #2e63b8 !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:#1497ed;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:#1190e3;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:#ffda4a;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:#ffd83e;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:.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:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.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:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;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:.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:#222;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:#f5f5f5;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;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:#222}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.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:.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:#f5f5f5;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:#fff}.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:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:#363636}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#f5f5f5}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-link{background-color:#2e63b8;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:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 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:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 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:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 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, #222 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:.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:#fff;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:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#f5f5f5}.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:#2e63b8;border-color:#2e63b8;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:#222}.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:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.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:#f5f5f5}.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 .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink: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 .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag: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),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{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 .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink: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 .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.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,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:#363636}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#f5f5f5}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink: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),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.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,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded: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:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{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:.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:.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:#f5f5f5;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}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(54,54,54,0.3)}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(54,54,54,0.3)}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-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{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-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{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-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{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-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{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{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}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#363636}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox{color:#6b6b6b;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:#2e63b8;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:#f5f5f5}.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:#fff}.select.is-white select{border-color:#fff}.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:#000}.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:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.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:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.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(46,99,184,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:#1190e3}.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:#ffd83e}.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:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b}.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.is-loading:after{font-size:.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:#fff;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:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.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:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.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:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;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(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;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:#1497ed;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:#1190e3;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:#ffda4a;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:#ffd83e;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:.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.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:#eee;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:#f5f5f5;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:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.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:.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:#6b6b6b}.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-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{font-size:.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.is-loading:after{font-size:.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:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;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:.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:#fff;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#222;max-width:100%;position:relative}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem}.card-image{display:block;position:relative}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);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:.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:#fff;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:.5rem;padding-top:.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:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;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:.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:.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:.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:#fff;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:#222}.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:#2e63b8;color:#fff}a.list-item{background-color:#f5f5f5;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:.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:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;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:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:#363636}.message.is-light .message-body{border-color:#f5f5f5;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:#f5f5f5}.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:#f7f9fd}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#264981}.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:#12537d}.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:#3c3108}.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:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;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:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.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:#f5f5f5;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:#222;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:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;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:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.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:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@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:#fff}.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:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.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:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;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:#f5f5f5;color:#363636}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#f5f5f5}@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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#f5f5f5}}.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:#2e63b8;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:#2958a4;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:#2958a4;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:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;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:#1190e3;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:#1190e3;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:#1190e3;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:#ffd83e;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:#ffd83e;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:#ffd83e;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 #f5f5f5}.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 #f5f5f5}.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:#2e63b8}.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:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;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:#2e63b8;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:#f5f5f5;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:#fff;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:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.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:#fff;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:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.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:rgba(0,0,0,0)}.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:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.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:.25rem;padding-left:.5em;padding-right:.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:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.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:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;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:#f5f5f5;border-radius:4px 4px 0 0;color:#222;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:.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:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;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:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;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:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.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:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !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:#f5f5f5;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:#2e63b8;border-color:#2e63b8;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:.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:.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.3333333333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>.column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>.column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>.column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>.column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-mobile{margin-left:8.3333333333%}.column.is-2-mobile{flex:none;width:16.6666666667%}.column.is-offset-2-mobile{margin-left:16.6666666667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.3333333333%}.column.is-offset-4-mobile{margin-left:33.3333333333%}.column.is-5-mobile{flex:none;width:41.6666666667%}.column.is-offset-5-mobile{margin-left:41.6666666667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.3333333333%}.column.is-offset-7-mobile{margin-left:58.3333333333%}.column.is-8-mobile{flex:none;width:66.6666666667%}.column.is-offset-8-mobile{margin-left:66.6666666667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.3333333333%}.column.is-offset-10-mobile{margin-left:83.3333333333%}.column.is-11-mobile{flex:none;width:91.6666666667%}.column.is-offset-11-mobile{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.3333333333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.6666666667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.6666666667%}.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.3333333333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.3333333333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.6666666667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.6666666667%}.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.3333333333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.3333333333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.6666666667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.6666666667%}.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.3333333333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.3333333333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.6666666667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-touch{margin-left:8.3333333333%}.column.is-2-touch{flex:none;width:16.6666666667%}.column.is-offset-2-touch{margin-left:16.6666666667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.3333333333%}.column.is-offset-4-touch{margin-left:33.3333333333%}.column.is-5-touch{flex:none;width:41.6666666667%}.column.is-offset-5-touch{margin-left:41.6666666667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.3333333333%}.column.is-offset-7-touch{margin-left:58.3333333333%}.column.is-8-touch{flex:none;width:66.6666666667%}.column.is-offset-8-touch{margin-left:66.6666666667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.3333333333%}.column.is-offset-10-touch{margin-left:83.3333333333%}.column.is-11-touch{flex:none;width:91.6666666667%}.column.is-offset-11-touch{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-desktop{margin-left:8.3333333333%}.column.is-2-desktop{flex:none;width:16.6666666667%}.column.is-offset-2-desktop{margin-left:16.6666666667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.3333333333%}.column.is-offset-4-desktop{margin-left:33.3333333333%}.column.is-5-desktop{flex:none;width:41.6666666667%}.column.is-offset-5-desktop{margin-left:41.6666666667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.3333333333%}.column.is-offset-7-desktop{margin-left:58.3333333333%}.column.is-8-desktop{flex:none;width:66.6666666667%}.column.is-offset-8-desktop{margin-left:66.6666666667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.3333333333%}.column.is-offset-10-desktop{margin-left:83.3333333333%}.column.is-11-desktop{flex:none;width:91.6666666667%}.column.is-offset-11-desktop{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-widescreen{margin-left:8.3333333333%}.column.is-2-widescreen{flex:none;width:16.6666666667%}.column.is-offset-2-widescreen{margin-left:16.6666666667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.3333333333%}.column.is-offset-4-widescreen{margin-left:33.3333333333%}.column.is-5-widescreen{flex:none;width:41.6666666667%}.column.is-offset-5-widescreen{margin-left:41.6666666667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.3333333333%}.column.is-offset-7-widescreen{margin-left:58.3333333333%}.column.is-8-widescreen{flex:none;width:66.6666666667%}.column.is-offset-8-widescreen{margin-left:66.6666666667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.3333333333%}.column.is-offset-10-widescreen{margin-left:83.3333333333%}.column.is-11-widescreen{flex:none;width:91.6666666667%}.column.is-offset-11-widescreen{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-fullhd{margin-left:8.3333333333%}.column.is-2-fullhd{flex:none;width:16.6666666667%}.column.is-offset-2-fullhd{margin-left:16.6666666667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.3333333333%}.column.is-offset-4-fullhd{margin-left:33.3333333333%}.column.is-5-fullhd{flex:none;width:41.6666666667%}.column.is-offset-5-fullhd{margin-left:41.6666666667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.3333333333%}.column.is-offset-7-fullhd{margin-left:58.3333333333%}.column.is-8-fullhd{flex:none;width:66.6666666667%}.column.is-offset-8-fullhd{margin-left:66.6666666667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.3333333333%}.column.is-offset-10-fullhd{margin-left:83.3333333333%}.column.is-11-fullhd{flex:none;width:91.6666666667%}.column.is-offset-11-fullhd{margin-left:91.6666666667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .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: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .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:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.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.3333333333%}.tile.is-2{flex:none;width:16.6666666667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.3333333333%}.tile.is-5{flex:none;width:41.6666666667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.3333333333%}.tile.is-8{flex:none;width:66.6666666667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.3333333333%}.tile.is-11{flex:none;width:91.6666666667%}.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:#fff;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:#fff}}.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:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.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:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@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:#000;color:#fff}.hero.is-black .tabs a{color:#fff;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:#fff}.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:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;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:#f5f5f5}}.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:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}@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:#f5f5f5}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#f5f5f5;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:#f5f5f5}.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,.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{background-color:#f5f5f5;border-color:#f5f5f5;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,.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{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:#2e63b8;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:#2e63b8}}.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:#2958a4;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:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 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:#1190e3;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, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 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:#ffd83e;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, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 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:#222}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}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.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:.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:#def0fc;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:#bdf4d1;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:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;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.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);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.5rem .75rem;background-color:#f5f5f5;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:.75rem .75rem;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:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.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}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background: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}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@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:#fff;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:.2rem 0rem .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:#0a0a0a;background-color:#f5f5f5;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}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .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-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#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:.95rem;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:.75rem;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:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#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:.85rem;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:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@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:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}#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}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{background:#F0F0F0;color:#444}.hljs-comment{color:#888888}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-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-operator,.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 .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold} diff --git a/previews/PR3585/assets/themeswap.js b/previews/PR3585/assets/themeswap.js new file mode 100644 index 0000000000..c58e993e3e --- /dev/null +++ b/previews/PR3585/assets/themeswap.js @@ -0,0 +1,66 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Intialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if(window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the browser supports user color preference + var darkPreference = false; + // Check if the users preference is for dark color scheme + if(window.matchMedia('(prefers-color-scheme: dark)').matches === true) { + darkPreference = true; + } + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; var disabled = []; var darkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if(themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + var isprimary = (ss.ownerNode.getAttribute("data-theme-primary") !== null); + // Check if the theme is primary dark theme + var isDarkTheme = (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null); + // If ss is for dark theme then set the value of darkTheme to the name of the theme + if(isDarkTheme) darkTheme = themename; + // If we find a matching theme (and it's not the default), we'll set active to non-null + if(themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if(themename !== theme) disabled.push(ss); + } + if(active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + theme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + else if(darkTheme !== null && darkPreference === true) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + darkTheme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + if (ss.ownerNode.getAttribute("data-theme-name") !== darkTheme) { + ss.disabled = true; + } + }); + } +} +set_theme_from_local_storage(); diff --git a/previews/PR3585/assets/warner.js b/previews/PR3585/assets/warner.js new file mode 100644 index 0000000000..5531c8851b --- /dev/null +++ b/previews/PR3585/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
    Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/previews/PR3585/basedocs/index.html b/previews/PR3585/basedocs/index.html new file mode 100644 index 0000000000..0fa7505109 --- /dev/null +++ b/previews/PR3585/basedocs/index.html @@ -0,0 +1,31 @@ + +Pkg · Pkg.jl

    Pkg

    Pkg is Julia's builtin package manager, and handles operations such as installing, updating and removing packages.

    Note

    What follows is a very brief introduction to Pkg. For more information on Project.toml files, Manifest.toml files, package version compatibility ([compat]), environments, registries, etc., it is highly recommended to read the full manual, which is available here: https://pkgdocs.julialang.org.

    What follows is a quick overview of the basic features of Pkg. It should help new users become familiar with basic Pkg features such as adding and removing packages and working with environments.

    Note

    Some Pkg output is omitted in this section in order to keep this basic guide focused. This will help maintain a good pace and not get bogged down in details. If you require more details, refer to subsequent sections of the Pkg manual.

    Note

    This guide uses the Pkg REPL to execute Pkg commands. For non-interactive use, we recommend the Pkg API. The Pkg API is fully documented in the API Reference section of the Pkg documentation.

    Pkg comes with a REPL. Enter the Pkg REPL by pressing ] from the Julia REPL. To get back to the Julia REPL, press Ctrl+C or backspace (when the REPL cursor is at the beginning of the input).

    Upon entering the Pkg REPL, you should see the following prompt:

    (@v1.9) pkg>

    To add a package, use add:

    (@v1.9) pkg> add Example
    +   Resolving package versions...
    +   Installed Example ─ v0.5.3
    +    Updating `~/.julia/environments/v1.9/Project.toml`
    +  [7876af07] + Example v0.5.3
    +    Updating `~/.julia/environments/v1.9/Manifest.toml`
    +  [7876af07] + Example v0.5.3

    After the package is installed, it can be loaded into the Julia session:

    julia> import Example
    +
    +julia> Example.hello("friend")
    +"Hello, friend"

    We can also specify multiple packages at once to install:

    (@v1.9) pkg> add JSON StaticArrays

    The status command (or the shorter st command) can be used to see installed packages.

    (@v1.9) pkg> st
    +Status `~/.julia/environments/v1.6/Project.toml`
    +  [7876af07] Example v0.5.3
    +  [682c06a0] JSON v0.21.3
    +  [90137ffa] StaticArrays v1.5.9
    Note

    Some Pkg REPL commands have a short and a long version of the command, for example status and st.

    To remove packages, use rm (or remove):

    (@v1.9) pkg> rm JSON StaticArrays

    Use up (or update) to update the installed packages

    (@v1.9) pkg> up

    If you have been following this guide it is likely that the packages installed are at the latest version so up will not do anything. Below we show the status output in the case where we deliberately have installed an old version of the Example package and then upgrade it:

    (@v1.9) pkg> st
    +Status `~/.julia/environments/v1.9/Project.toml`
    +⌃ [7876af07] Example v0.5.1
    +Info Packages marked with ⌃ have new versions available and may be upgradable.
    +
    +(@v1.9) pkg> up
    +    Updating `~/.julia/environments/v1.9/Project.toml`
    +  [7876af07] ↑ Example v0.5.1 ⇒ v0.5.3

    We can see that the status output tells us that there is a newer version available and that up upgrades the package.

    For more information about managing packages, see the Managing Packages section of the documentation.

    Up to this point, we have covered basic package management: adding, updating, and removing packages.

    You may have noticed the (@v1.9) in the REPL prompt. This lets us know that v1.9 is the active environment. Different environments can have different totally different packages and versions installed from another environment. The active environment is the environment that will be modified by Pkg commands such as add, rm and update.

    Let's set up a new environment so we may experiment. To set the active environment, use activate:

    (@v1.9) pkg> activate tutorial
    +[ Info: activating new environment at `~/tutorial/Project.toml`.

    Pkg lets us know we are creating a new environment and that this environment will be stored in the ~/tutorial directory. The path to the environment is created relative to the current working directory of the REPL.

    Pkg has also updated the REPL prompt in order to reflect the new active environment:

    (tutorial) pkg>

    We can ask for information about the active environment by using status:

    (tutorial) pkg> status
    +    Status `~/tutorial/Project.toml`
    +   (empty environment)

    ~/tutorial/Project.toml is the location of the active environment's project file. A project file is a TOML file here Pkg stores the packages that have been explicitly installed. Notice this new environment is empty. Let us add some packages and observe:

    (tutorial) pkg> add Example JSON
    +...
    +
    +(tutorial) pkg> status
    +    Status `~/tutorial/Project.toml`
    +  [7876af07] Example v0.5.3
    +  [682c06a0] JSON v0.21.3

    We can see that the tutorial environment now contains Example and JSON.

    Note

    If you have the same package (at the same version) installed in multiple environments, the package will only be downloaded and stored on the hard drive once. This makes environments very lightweight and effectively free to create. Only using the default environment with a huge number of packages in it is a common beginners mistake in Julia. Learning how to use environments effectively will improve your experience with Julia packages.

    For more information about environments, see the Working with Environments section of the documentation.

    If you are ever stuck, you can ask Pkg for help:

    (@v1.9) pkg> ?

    You should see a list of available commands along with short descriptions. You can ask for more detailed help by specifying a command:

    (@v1.9) pkg> ?develop

    This guide should help you get started with Pkg. Pkg has much more to offer in terms of powerful package management, read the full manual to learn more!

    diff --git a/previews/PR3585/compatibility/index.html b/previews/PR3585/compatibility/index.html new file mode 100644 index 0000000000..595c488d02 --- /dev/null +++ b/previews/PR3585/compatibility/index.html @@ -0,0 +1,46 @@ + +6. Compatibility · Pkg.jl

    6. Compatibility

    Compatibility refers to the ability to restrict the versions of the dependencies that your project is compatible with. If the compatibility for a dependency is not given, the project is assumed to be compatible with all versions of that dependency.

    Compatibility for a dependency is entered in the Project.toml file as for example:

    [compat]
    +julia = "1.6"
    +Example = "0.5"

    After a compatibility entry is put into the project file, up can be used to apply it.

    The format of the version specifier is described in detail below.

    Info

    Use the command compat to edit the compat entries in the Pkg REPL, or manually edit the project file.

    Info

    The rules below apply to the Project.toml file; for registries, see Registry Compat.toml.

    Info

    Note that registration into Julia's General Registry requires each dependency to have a [compat] entry with an upper bound.

    Version specifier format

    Similar to other package managers, the Julia package manager respects semantic versioning (semver), with an exception for leading zeros. As an example, a version specifier given as e.g. 1.2.3 is therefore assumed to be compatible with the versions [1.2.3 - 2.0.0) where ) is a non-inclusive upper bound. More specifically, a version specifier is either given as a caret specifier, e.g. ^1.2.3 or as a tilde specifier, e.g. ~1.2.3. Caret specifiers are the default and hence 1.2.3 == ^1.2.3. The difference between a caret and tilde is described in the next section. The union of multiple version specifiers can be formed by comma separating individual version specifiers, e.g.

    [compat]
    +Example = "1.2, 2"

    will result in [1.2.0, 3.0.0). Note leading zeros are treated differently, e.g. Example = "0.2, 1" would only result in [0.2.0 - 0.3.0) ∪ [1.0.0 - 2.0.0). See the next section for more information on versions with leading zeros.

    Behavior of versions with leading zeros (0.0.x and 0.x.y)

    While the semver specification says that all versions with a major version of 0 (versions before 1.0.0) are incompatible with each other, we have decided to only apply that for when both the major and minor versions are zero. In other words, 0.0.1 and 0.0.2 are considered incompatible. A pre-1.0 version with non-zero minor version (0.a.b with a != 0) is considered compatible with versions with the same minor version and smaller or equal patch versions (0.a.c with c <= b); i.e., the versions 0.2.2 and 0.2.3 are compatible with 0.2.1 and 0.2.0. Versions with a major version of 0 and different minor versions are not considered compatible, so the version 0.3.0 might have breaking changes from 0.2.0. To that end, the [compat] entry:

    [compat]
    +Example = "0.0.1"

    results in a versionbound on Example as [0.0.1, 0.0.2) (which is equivalent to only the version 0.0.1), while the [compat] entry:

    [compat]
    +Example = "0.2.1"

    results in a versionbound on Example as [0.2.1, 0.3.0).

    In particular, a package may set version = "0.2.4" when it has feature additions compared to 0.2.3 as long as it remains backward compatible with 0.2.0. See also The version field.

    Caret specifiers

    A caret (^) specifier allows upgrade that would be compatible according to semver. This is the default behavior if no specifier is used. An updated dependency is considered compatible if the new version does not modify the left-most non zero digit in the version specifier.

    Some examples are shown below.

    [compat]
    +PkgA = "^1.2.3" # [1.2.3, 2.0.0)
    +PkgB = "^1.2"   # [1.2.0, 2.0.0)
    +PkgC = "^1"     # [1.0.0, 2.0.0)
    +PkgD = "^0.2.3" # [0.2.3, 0.3.0)
    +PkgE = "^0.0.3" # [0.0.3, 0.0.4)
    +PkgF = "^0.0"   # [0.0.0, 0.1.0)
    +PkgG = "^0"     # [0.0.0, 1.0.0)

    Tilde specifiers

    A tilde specifier provides more limited upgrade possibilities. When specifying major, minor and patch versions, or when specifying major and minor versions, only the patch version is allowed to change. If you only specify a major version, then both minor and patch versions are allowed to be upgraded (~1 is thus equivalent to ^1). For example:

    [compat]
    +PkgA = "~1.2.3" # [1.2.3, 1.3.0)
    +PkgB = "~1.2"   # [1.2.0, 1.3.0)
    +PkgC = "~1"     # [1.0.0, 2.0.0)
    +PkgD = "~0.2.3" # [0.2.3, 0.3.0)
    +PkgE = "~0.0.3" # [0.0.3, 0.0.4)
    +PkgF = "~0.0"   # [0.0.0, 0.1.0)
    +PkgG = "~0"     # [0.0.0, 1.0.0)

    For all versions with a major version of 0 the tilde and caret specifiers are equivalent.

    Equality specifier

    Equality can be used to specify exact versions:

    [compat]
    +PkgA = "=1.2.3"           # [1.2.3, 1.2.3]
    +PkgA = "=0.10.1, =0.10.3" # 0.10.1 or 0.10.3

    Inequality specifiers

    Inequalities can also be used to specify version ranges:

    [compat]
    +PkgB = ">= 1.2.3" # [1.2.3,  ∞)
    +PkgC = "≥ 1.2.3"  # [1.2.3,  ∞)
    +PkgD = "< 1.2.3"  # [0.0.0, 1.2.3) = [0.0.0, 1.2.2]

    Hyphen specifiers

    Hyphen syntax can also be used to specify version ranges. Make sure that you have a space on both sides of the hyphen.

    [compat]
    +PkgA = "1.2.3 - 4.5.6" # [1.2.3, 4.5.6]
    +PkgA = "0.2.3 - 4.5.6" # [0.2.3, 4.5.6]

    Any unspecified trailing numbers in the first end-point are considered to be zero:

    [compat]
    +PkgA = "1.2 - 4.5.6"   # [1.2.0, 4.5.6]
    +PkgA = "1 - 4.5.6"     # [1.0.0, 4.5.6]
    +PkgA = "0.2 - 4.5.6"   # [0.2.0, 4.5.6]
    +PkgA = "0.2 - 0.5.6"   # [0.2.0, 0.5.6]

    Any unspecified trailing numbers in the second end-point will be considered to be wildcards:

    [compat]
    +PkgA = "1.2.3 - 4.5"   # 1.2.3 - 4.5.* = [1.2.3, 4.6.0)
    +PkgA = "1.2.3 - 4"     # 1.2.3 - 4.*.* = [1.2.3, 5.0.0)
    +PkgA = "1.2 - 4.5"     # 1.2.0 - 4.5.* = [1.2.0, 4.6.0)
    +PkgA = "1.2 - 4"       # 1.2.0 - 4.*.* = [1.2.0, 5.0.0)
    +PkgA = "1 - 4.5"       # 1.0.0 - 4.5.* = [1.0.0, 4.6.0)
    +PkgA = "1 - 4"         # 1.0.0 - 4.*.* = [1.0.0, 5.0.0)
    +PkgA = "0.2.3 - 4.5"   # 0.2.3 - 4.5.* = [0.2.3, 4.6.0)
    +PkgA = "0.2.3 - 4"     # 0.2.3 - 4.*.* = [0.2.3, 5.0.0)
    +PkgA = "0.2 - 4.5"     # 0.2.0 - 4.5.* = [0.2.0, 4.6.0)
    +PkgA = "0.2 - 4"       # 0.2.0 - 4.*.* = [0.2.0, 5.0.0)
    +PkgA = "0.2 - 0.5"     # 0.2.0 - 0.5.* = [0.2.0, 0.6.0)
    +PkgA = "0.2 - 0"       # 0.2.0 - 0.*.* = [0.2.0, 1.0.0)

    Fixing conflicts

    Version conflicts were introduced previously with an example of a conflict arising in a package D used by two other packages, B and C. Our analysis of the error message revealed that B is using an outdated version of D. To fix it, the first thing to try is to pkg> dev B so that you can modify B and its compatibility requirements. If you open its Project.toml file in an editor, you would probably notice something like

    [compat]
    +D = "0.1"

    Usually the first step is to modify this to something like

    [compat]
    +D = "0.1, 0.2"

    This indicates that B is compatible with both versions 0.1 and version 0.2; if you pkg> up this would fix the package error. However, there is one major concern you need to address first: perhaps there was an incompatible change in v0.2 of D that breaks B. Before proceeding further, you should update all packages and then run B's tests, scanning the output of pkg> test B to be sure that v0.2 of D is in fact being used. (It is possible that an additional dependency of D pins it to v0.1, and you wouldn't want to be misled into thinking that you had tested B on the newer version.) If the new version was used and the tests still pass, you can assume that B didn't need any further updating to accommodate v0.2 of D; you can safely submit this change as a pull request to B so that a new release is made. If instead an error is thrown, it indicates that B requires more extensive updates to be compatible with the latest version of D; those updates will need to be completed before it becomes possible to use both A and B simultaneously. You can, though, continue to use them independently of one another.

    diff --git a/previews/PR3585/creating-packages/index.html b/previews/PR3585/creating-packages/index.html new file mode 100644 index 0000000000..9cba2230dc --- /dev/null +++ b/previews/PR3585/creating-packages/index.html @@ -0,0 +1,163 @@ + +5. Creating Packages · Pkg.jl

    5. Creating Packages

    Generating files for a package

    Note

    The PkgTemplates package offers an easy, repeatable, and customizable way to generate the files for a new package. It can also generate files needed for Documentation, CI, etc. We recommend that you use PkgTemplates for creating new packages instead of using the minimal pkg> generate functionality described below.

    To generate the bare minimum files for a new package, use pkg> generate.

    (@v1.8) pkg> generate HelloWorld

    This creates a new project HelloWorld in a subdirectory by the same name, with the following files (visualized with the external tree command):

    shell> tree HelloWorld/
    +HelloWorld/
    +├── Project.toml
    +└── src
    +    └── HelloWorld.jl
    +
    +2 directories, 2 files

    The Project.toml file contains the name of the package, its unique UUID, its version, the authors and potential dependencies:

    name = "HelloWorld"
    +uuid = "b4cd1eb8-1e24-11e8-3319-93036a3eb9f3"
    +version = "0.1.0"
    +authors = ["Some One <someone@email.com>"]
    +
    +[deps]

    The content of src/HelloWorld.jl is:

    module HelloWorld
    +
    +greet() = print("Hello World!")
    +
    +end # module

    We can now activate the project by using the path to the directory where it is installed, and load the package:

    pkg> activate ./HelloWorld
    +
    +julia> import HelloWorld
    +
    +julia> HelloWorld.greet()
    +Hello World!

    For the rest of the tutorial we enter inside the directory of the project, for convenience:

    julia> cd("HelloWorld")

    Adding dependencies to the project

    Let’s say we want to use the standard library package Random and the registered package JSON in our project. We simply add these packages (note how the prompt now shows the name of the newly generated project, since we activated it):

    (HelloWorld) pkg> add Random JSON
    +   Resolving package versions...
    +    Updating `~/HelloWorld/Project.toml`
    +  [682c06a0] + JSON v0.21.3
    +  [9a3f8284] + Random
    +    Updating `~/HelloWorld/Manifest.toml`
    +  [682c06a0] + JSON v0.21.3
    +  [69de0a69] + Parsers v2.4.0
    +  [ade2ca70] + Dates
    + ...

    Both Random and JSON got added to the project’s Project.toml file, and the resulting dependencies got added to the Manifest.toml file. The resolver has installed each package with the highest possible version, while still respecting the compatibility that each package enforces on its dependencies.

    We can now use both Random and JSON in our project. Changing src/HelloWorld.jl to

    module HelloWorld
    +
    +import Random
    +import JSON
    +
    +greet() = print("Hello World!")
    +greet_alien() = print("Hello ", Random.randstring(8))
    +
    +end # module

    and reloading the package, the new greet_alien function that uses Random can be called:

    julia> HelloWorld.greet_alien()
    +Hello aT157rHV

    Adding a build step to the package

    The build step is executed the first time a package is installed or when explicitly invoked with build. A package is built by executing the file deps/build.jl.

    julia> mkpath("deps");
    +
    +julia> write("deps/build.jl",
    +             """
    +             println("I am being built...")
    +             """);
    +
    +(HelloWorld) pkg> build
    +  Building HelloWorld → `deps/build.log`
    + Resolving package versions...
    +
    +julia> print(readchomp("deps/build.log"))
    +I am being built...

    If the build step fails, the output of the build step is printed to the console

    julia> write("deps/build.jl",
    +             """
    +             error("Ooops")
    +             """);
    +
    +(HelloWorld) pkg> build
    +    Building HelloWorld → `~/HelloWorld/deps/build.log`
    +ERROR: Error building `HelloWorld`:
    +ERROR: LoadError: Ooops
    +Stacktrace:
    + [1] error(s::String)
    +   @ Base ./error.jl:35
    + [2] top-level scope
    +   @ ~/HelloWorld/deps/build.jl:1
    + [3] include(fname::String)
    +   @ Base.MainInclude ./client.jl:476
    + [4] top-level scope
    +   @ none:5
    +in expression starting at /home/kc/HelloWorld/deps/build.jl:1
    Warning

    A build step should generally not create or modify any files in the package directory. If you need to store some files from the build step, use the Scratch.jl package.

    Adding tests to the package

    When a package is tested the file test/runtests.jl is executed:

    julia> mkpath("test");
    +
    +julia> write("test/runtests.jl",
    +             """
    +             println("Testing...")
    +             """);
    +
    +(HelloWorld) pkg> test
    +   Testing HelloWorld
    + Resolving package versions...
    +Testing...
    +   Testing HelloWorld tests passed

    Tests are run in a new Julia process, where the package itself, and any test-specific dependencies, are available, see below.

    Warning

    Tests should generally not create or modify any files in the package directory. If you need to store some files from the build step, use the Scratch.jl package.

    Test-specific dependencies

    There are two ways of adding test-specific dependencies (dependencies that are not dependencies of the package but will still be available to load when the package is tested).

    target based test specific dependencies

    Using this method of adding test-specific dependencies, the packages are added under an [extras] section and to a test target, e.g. to add Markdown and Test as test dependencies, add the following:

    [extras]
    +Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a"
    +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
    +
    +[targets]
    +test = ["Markdown", "Test"]

    to the Project.toml file. There are no other "targets" than test.

    test/Project.toml file test specific dependencies

    Note

    The exact interaction between Project.toml, test/Project.toml and their corresponding Manifest.tomls are not fully worked out and may be subject to change in future versions. The old method of adding test-specific dependencies, described in the next section, will therefore be supported throughout all Julia 1.X releases.

    is given by test/Project.toml. Thus, when running tests, this will be the active project, and only dependencies to the test/Project.toml project can be used. Note that Pkg will add the tested package itself implicitly.

    Note

    If no test/Project.toml exists Pkg will use the target based test specific dependencies.

    To add a test-specific dependency, i.e. a dependency that is available only when testing, it is thus enough to add this dependency to the test/Project.toml project. This can be done from the Pkg REPL by activating this environment, and then use add as one normally does. Let's add the Test standard library as a test dependency:

    (HelloWorld) pkg> activate ./test
    +[ Info: activating environment at `~/HelloWorld/test/Project.toml`.
    +
    +(test) pkg> add Test
    + Resolving package versions...
    +  Updating `~/HelloWorld/test/Project.toml`
    +  [8dfed614] + Test
    +  Updating `~/HelloWorld/test/Manifest.toml`
    +  [...]

    We can now use Test in the test script and we can see that it gets installed when testing:

    julia> write("test/runtests.jl",
    +             """
    +             using Test
    +             @test 1 == 1
    +             """);
    +
    +(test) pkg> activate .
    +
    +(HelloWorld) pkg> test
    +   Testing HelloWorld
    + Resolving package versions...
    +  Updating `/var/folders/64/76tk_g152sg6c6t0b4nkn1vw0000gn/T/tmpPzUPPw/Project.toml`
    +  [d8327f2a] + HelloWorld v0.1.0 [`~/.julia/dev/Pkg/HelloWorld`]
    +  [8dfed614] + Test
    +  Updating `/var/folders/64/76tk_g152sg6c6t0b4nkn1vw0000gn/T/tmpPzUPPw/Manifest.toml`
    +  [d8327f2a] + HelloWorld v0.1.0 [`~/.julia/dev/Pkg/HelloWorld`]
    +   Testing HelloWorld tests passed```

    Compatibility on dependencies

    Every dependency should in general have a compatibility constraint on it. This is an important topic so there is a separate chapter about it: Compatibility.

    Weak dependencies

    Note

    This is a somewhat advanced usage of Pkg which can be skipped for people new to Julia and Julia packages.

    Compat

    The described feature requires Julia 1.9+.

    A weak dependency is a dependency that will not automatically install when the package is installed but you can still control what versions of that package are allowed to be installed by setting compatibility on it. These are listed in the project file under the [weakdeps] section:

    [weakdeps]
    +SomePackage = "b3785f31-9d33-4cdf-bc73-f646780f1739"
    +
    +[compat]
    +SomePackage = "1.2"

    The current usage of this is almost solely limited to "extensions" which is described in the next section.

    Conditional loading of code in packages (Extensions)

    Note

    This is a somewhat advanced usage of Pkg which can be skipped for people new to Julia and Julia packages.

    Compat

    The described feature requires Julia 1.9+.

    Sometimes one wants to make two or more packages work well together, but may be reluctant (perhaps due to increased load times) to make one an unconditional dependency of the other. A package extension is a module in a file (similar to a package) that is automatically loaded when some other set of packages are loaded into the Julia session. This is very similar to functionality that the external package Requires.jl provides, but which is now available directly through Julia, and provides added benefits such as being able to precompile the extension.

    A useful application of extensions could be for a plotting package that should be able to plot objects from a wide variety of different Julia packages. Adding all those different Julia packages as dependencies of the plotting package could be expensive since they would end up getting loaded even if they were never used. Instead, the code required to plot objects for specific packages can be put into separate files (extensions) and these are loaded only when the packages that define the type(s) we want to plot are loaded.

    Below is an example of how the code can be structured for a use case in which a Plotting package wants to be able to display objects defined in the external package Contour. The file and folder structure shown below is found in the Plotting package.

    Project.toml:

    name = "Plotting"
    +version = "0.1.0"
    +uuid = "..."
    +
    +[weakdeps]
    +Contour = "d38c429a-6771-53c6-b99e-75d170b6e991"
    +
    +[extensions]
    +# name of extension to the left
    +# extension dependencies required to load the extension to the right
    +# use a list for multiple extension dependencies
    +PlottingContourExt = "Contour"
    +
    +[compat]
    +Contour = "0.6.2"

    src/Plotting.jl:

    module Plotting
    +
    +function plot(x::Vector)
    +    # Some functionality for plotting a vector here
    +end
    +
    +end # module

    ext/PlottingContourExt.jl (can also be in ext/PlottingContourExt/PlottingContourExt.jl):

    module PlottingContourExt # Should be same name as the file (just like a normal package)
    +
    +using Plotting, Contour
    +
    +function Plotting.plot(c::Contour.ContourCollection)
    +    # Some functionality for plotting a contour here
    +end
    +
    +end # module

    Extensions can have any arbitrary name (here PlottingContourExt), but using something similar to the format of this example that makes the extended functionality and dependency of the extension clear is likely a good idea.

    A user that depends only on Plotting will not pay the cost of the "extension" inside the PlottingContourExt module. It is only when the Contour package actually gets loaded that the PlottingContourExt extension is loaded and provides the new functionality.

    If one considers PlottingContourExt as a completely separate package, it could be argued that defining Plotting.plot(c::Contour.ContourCollection) is type piracy since PlottingContourExt owns neither the method Plotting.plot nor the type Contour.ContourCollection. However, for extensions, it is ok to assume that the extension owns the methods in its parent package. In fact, this form of type piracy is one of the most standard use cases for extensions.

    Compat

    Often you will put the extension dependencies into the test target so they are loaded when running e.g. Pkg.test(). On earlier Julia versions this requires you to also put the package in the [extras] section. This is unfortunate but the project verifier on older Julia versions will complain if this is not done.

    Note

    If you use a manifest generated by a Julia version that does not know about extensions with a Julia version that does know about them, the extensions will not load. This is because the manifest lacks some information that tells Julia when it should load these packages. So make sure you use a manifest generated at least the Julia version you are using.

    Backwards compatibility

    This section discusses various methods for using extensions on Julia versions that support them, while simultaneously providing similar functionality on older Julia versions.

    Requires.jl

    This section is relevant if you are currently using Requires.jl but want to transition to using extensions (while still having Requires be used on Julia versions that do not support extensions). This is done by making the following changes (using the example above):

    • Add the following to the package file. This makes it so that Requires.jl loads and inserts the callback only when extensions are not supported

      # This symbol is only defined on Julia versions that support extensions
      +if !isdefined(Base, :get_extension)
      +using Requires
      +end
      +
      +@static if !isdefined(Base, :get_extension)
      +function __init__()
      +    @require Contour = "d38c429a-6771-53c6-b99e-75d170b6e991" include("../ext/PlottingContourExt.jl")
      +end
      +end

      or if you have other things in your __init__() function:

      if !isdefined(Base, :get_extension)
      +using Requires
      +end
      +
      +function __init__()
      +    # Other init functionality here
      +
      +    @static if !isdefined(Base, :get_extension)
      +        @require Contour = "d38c429a-6771-53c6-b99e-75d170b6e991" include("../ext/PlottingContourExt.jl")
      +    end
      +end
    • Make the following change in the conditionally-loaded code:

      isdefined(Base, :get_extension) ? (using Contour) : (using ..Contour)
    • Add Requires to [weakdeps] in your Project.toml file, so that it is listed in both [deps] and [weakdeps]. Julia 1.9+ knows to not install it as a regular dependency, whereas earlier versions will consider it a dependency.

    The package should now work with Requires.jl on Julia versions before extensions were introduced and with extensions on more recent Julia versions.

    Transition from normal dependency to extension

    This section is relevant if you have a normal dependency that you want to transition be an extension (while still having the dependency be a normal dependency on Julia versions that do not support extensions). This is done by making the following changes (using the example above):

    • Make sure that the package is both in the [deps] and [weakdeps] section. Newer Julia versions will ignore dependencies in [deps] that are also in [weakdeps].
    • Add the following to your main package file (typically at the bottom):
      if !isdefined(Base, :get_extension)
      +  include("../ext/PlottingContourExt.jl")
      +end

    Using an extension while supporting older Julia versions

    In the case where one wants to use an extension (without worrying about the feature of the extension begin available on older Julia versions) while still supporting older Julia versions the packages under [weakdeps] should be duplicated into [extras]. This is an unfortunate duplication, but without doing this the project verifier under older Julia versions will throw an error if it finds packages under [compat] that is not listed in [extras].

    Package naming guidelines

    Package names should be sensible to most Julia users, even to those who are not domain experts. The following guidelines apply to the General registry but may be useful for other package registries as well.

    Since the General registry belongs to the entire community, people may have opinions about your package name when you publish it, especially if it's ambiguous or can be confused with something other than what it is. Usually, you will then get suggestions for a new name that may fit your package better.

    1. Avoid jargon. In particular, avoid acronyms unless there is minimal possibility of confusion.

      • It's ok to say USA if you're talking about the USA.
      • It's not ok to say PMA, even if you're talking about positive mental attitude.
    2. Avoid using Julia in your package name or prefixing it with Ju.

      • It is usually clear from context and to your users that the package is a Julia package.
      • Package names already have a .jl extension, which communicates to users that Package.jl is a Julia package.
      • Having Julia in the name can imply that the package is connected to, or endorsed by, contributors to the Julia language itself.
    3. Packages that provide most of their functionality in association with a new type should have pluralized names.

      • DataFrames provides the DataFrame type.
      • BloomFilters provides the BloomFilter type.
      • In contrast, JuliaParser provides no new type, but instead new functionality in the JuliaParser.parse() function.
    4. Err on the side of clarity, even if clarity seems long-winded to you.

      • RandomMatrices is a less ambiguous name than RndMat or RMT, even though the latter are shorter.
    5. A less systematic name may suit a package that implements one of several possible approaches to its domain.

      • Julia does not have a single comprehensive plotting package. Instead, Gadfly, PyPlot, Winston and other packages each implement a unique approach based on a particular design philosophy.
      • In contrast, SortingAlgorithms provides a consistent interface to use many well-established sorting algorithms.
    6. Packages that wrap external libraries or programs should be named after those libraries or programs.

      • CPLEX.jl wraps the CPLEX library, which can be identified easily in a web search.
      • MATLAB.jl provides an interface to call the MATLAB engine from within Julia.
    7. Avoid naming a package closely to an existing package

      • Websocket is too close to WebSockets and can be confusing to users. Rather use a new name such as SimpleWebsockets.

    Registering packages

    Once a package is ready it can be registered with the General Registry (see also the FAQ). Currently, packages are submitted via Registrator. In addition to Registrator, TagBot helps manage the process of tagging releases.

    Best Practices

    Packages should avoid mutating their own state (writing to files within their package directory). Packages should, in general, not assume that they are located in a writable location (e.g. if installed as part of a system-wide depot) or even a stable one (e.g. if they are bundled into a system image by PackageCompiler.jl). To support the various use cases in the Julia package ecosystem, the Pkg developers have created a number of auxiliary packages and techniques to help package authors create self-contained, immutable, and relocatable packages:

    • Artifacts can be used to bundle chunks of data alongside your package, or even allow them to be downloaded on-demand. Prefer artifacts over attempting to open a file via a path such as joinpath(@__DIR__, "data", "my_dataset.csv") as this is non-relocatable. Once your package has been precompiled, the result of @__DIR__ will have been baked into your precompiled package data, and if you attempt to distribute this package, it will attempt to load files at the wrong location. Artifacts can be bundled and accessed easily using the artifact"name" string macro.

    • Scratch.jl provides the notion of "scratch spaces", mutable containers of data for packages. Scratch spaces are designed for data caches that are completely managed by a package and should be removed when the package itself is uninstalled. For important user-generated data, packages should continue to write out to a user-specified path that is not managed by Julia or Pkg.

    • Preferences.jl allows packages to read and write preferences to the top-level Project.toml. These preferences can be read at runtime or compile-time, to enable or disable different aspects of package behavior. Packages previously would write out files to their own package directories to record options set by the user or environment, but this is highly discouraged now that Preferences is available.

    diff --git a/previews/PR3585/environments/index.html b/previews/PR3585/environments/index.html new file mode 100644 index 0000000000..d4998a7091 --- /dev/null +++ b/previews/PR3585/environments/index.html @@ -0,0 +1,78 @@ + +4. Working with Environment · Pkg.jl

    4. Working with Environment

    The following discusses Pkg's interaction with environments. For more on the role, environments play in code loading, including the "stack" of environments from which code can be loaded, see this section in the Julia manual.

    Creating your own environments

    So far we have added packages to the default environment at ~/.julia/environments/v1.8. It is however easy to create other, independent, projects. This approach has the benefit of allowing you to check in a Project.toml, and even a Manifest.toml if you wish, into version control (e.g. git) alongside your code. It should be pointed out that when two projects use the same package at the same version, the content of this package is not duplicated. In order to create a new project, create a directory for it and then activate that directory to make it the "active project", which package operations manipulate:

    (@v1.8) pkg> activate MyProject
    +Activating new environment at `~/MyProject/Project.toml`
    +
    +(MyProject) pkg> st
    +    Status `~/MyProject/Project.toml` (empty project)

    Note that the REPL prompt changes when the new project is activated. Until a package is added, there are no files in this environment and the directory to the environment might not even be created:

    julia> isdir("MyProject")
    +false
    +
    +(MyProject) pkg> add Example
    +   Resolving package versions...
    +   Installed Example ─ v0.5.3
    +    Updating `~/MyProject/Project.toml`
    +  [7876af07] + Example v0.5.3
    +    Updating `~~/MyProject/Manifest.toml`
    +  [7876af07] + Example v0.5.3
    +Precompiling environment...
    +  1 dependency successfully precompiled in 2 seconds
    +
    +julia> readdir("MyProject")
    +2-element Vector{String}:
    + "Manifest.toml"
    + "Project.toml"
    +
    +julia> print(read(joinpath("MyProject", "Project.toml"), String))
    +[deps]
    +Example = "7876af07-990d-54b4-ab0e-23690620f79a"
    +
    +julia> print(read(joinpath("MyProject", "Manifest.toml"), String))
    +# This file is machine-generated - editing it directly is not advised
    +
    +julia_version = "1.8.2"
    +manifest_format = "2.0"
    +project_hash = "2ca1c6c58cb30e79e021fb54e5626c96d05d5fdc"
    +
    +[[deps.Example]]
    +git-tree-sha1 = "46e44e869b4d90b96bd8ed1fdcf32244fddfb6cc"
    +uuid = "7876af07-990d-54b4-ab0e-23690620f79a"
    +version = "0.5.3"

    This new environment is completely separate from the one we used earlier. See Project.toml and Manifest.toml for a more detailed explanation.

    Using someone else's project

    Simply clone their project using e.g. git clone, cd to the project directory and call

    shell> git clone https://github.com/JuliaLang/Example.jl.git
    +Cloning into 'Example.jl'...
    +...
    +
    +(@v1.8) pkg> activate Example.jl
    +Activating project at `~/Example.jl`
    +
    +(Example) pkg> instantiate
    +  No Changes to `~/Example.jl/Project.toml`
    +  No Changes to `~/Example.jl/Manifest.toml`

    If the project contains a manifest, this will install the packages in the same state that is given by that manifest. Otherwise, it will resolve the latest versions of the dependencies compatible with the project.

    Note that activate by itself does not install missing dependencies. If you only have a Project.toml, a Manifest.toml must be generated by "resolving" the environment, then any missing packages must be installed and precompiled. instantiate does all this for you.

    If you already have a resolved Manifest.toml, then you will still need to ensure that the packages are installed and with the correct versions. Again instantiate does this for you.

    In short, instantiate is your friend to make sure an environment is ready to use. If there's nothing to do, instantiate does nothing.

    Specifying project on startup

    Instead of using activate from within Julia, you can specify the project on startup using the --project=<path> flag. For example, to run a script from the command line using the environment in the current directory you can run

    $ julia --project=. myscript.jl

    Temporary environments

    Temporary environments make it easy to start an environment from a blank slate to test a package or set of packages, and have Pkg automatically delete the environment when you're done. For instance, when writing a bug report, you may want to test your minimal reproducible example in a 'clean' environment to ensure it's actually reproducible as written. You might also want a scratch space to try out a new package, or a sandbox to resolve version conflicts between several incompatible packages.

    (@v1.8) pkg> activate --temp # requires Julia 1.5 or later
    +  Activating new environment at `/var/folders/34/km3mmt5930gc4pzq1d08jvjw0000gn/T/jl_a31egx/Project.toml`
    +
    +(jl_a31egx) pkg> add Example
    +    Updating registry at `~/.julia/registries/General`
    +   Resolving package versions...
    +    Updating `/private/var/folders/34/km3mmt5930gc4pzq1d08jvjw0000gn/T/jl_a31egx/Project.toml`
    +  [7876af07] + Example v0.5.3
    +    Updating `/private/var/folders/34/km3mmt5930gc4pzq1d08jvjw0000gn/T/jl_a31egx/Manifest.toml`
    +  [7876af07] + Example v0.5.3

    Shared environments

    A "shared" environment is simply an environment that exists in ~/.julia/environments. The default v1.8 environment is therefore a shared environment:

    (@v1.8) pkg> st
    +Status `~/.julia/environments/v1.8/Project.toml`

    Shared environments can be activated with the --shared flag to activate:

    (@v1.8) pkg> activate --shared mysharedenv
    +  Activating project at `~/.julia/environments/mysharedenv`
    +
    +(@mysharedenv) pkg>

    Shared environments have a @ before their name in the Pkg REPL prompt.

    Environment Precompilation

    Before a package can be imported, Julia will "precompile" the source code into an intermediate more efficient cache on disc. This precompilation can be triggered via code loading if the un-imported package is new or has changed since the last cache

    julia> using Example
    +[ Info: Precompiling Example [7876af07-990d-54b4-ab0e-23690620f79a]

    or using Pkg's precompile option, which can precompile the entire environment, or a given dependency, and do so in parallel, which can be significantly faster than the code-load route above.

    (@v1.8) pkg> precompile
    +Precompiling environment...
    +  23 dependencies successfully precompiled in 36 seconds

    However, neither of these should be routinely required thanks to Pkg's automatic precompilation.

    Automatic Precompilation

    By default, any package that is added to a project or updated in a Pkg action will be automatically precompiled, along with its dependencies.

    (@v1.8) pkg> add Images
    +   Resolving package versions...
    +    Updating `~/.julia/environments/v1.9/Project.toml`
    +  [916415d5] + Images v0.25.2
    +    Updating `~/.julia/environments/v1.9/Manifest.toml`
    +    ...
    +Precompiling environment...
    +  Progress [===================>                     ]  45/97
    +  ✓ NaNMath
    +  ✓ IntervalSets
    +  ◐ CoordinateTransformations
    +  ◑ ArnoldiMethod
    +  ◑ IntegralArrays
    +  ◒ RegionTrees
    +  ◐ ChangesOfVariables
    +  ◓ PaddedViews

    The exception is the develop command, which neither builds nor precompiles the package. When that happens is left up to the user to decide.

    If a given package version errors during auto-precompilation, Pkg will remember for the following times it automatically tries and will skip that package with a brief warning. Manual precompilation can be used to force these packages to be retried, as pkg> precompile will always retry all packages.

    To disable the auto-precompilation, set ENV["JULIA_PKG_PRECOMPILE_AUTO"]=0.

    Precompiling new versions of loaded packages

    If a package that has been updated is already loaded in the session, the precompilation process will go ahead and precompile the new version, and any packages that depend on it, but will note that the package cannot be used until session restart.

    diff --git a/previews/PR3585/getting-started/index.html b/previews/PR3585/getting-started/index.html new file mode 100644 index 0000000000..1729eab8e1 --- /dev/null +++ b/previews/PR3585/getting-started/index.html @@ -0,0 +1,31 @@ + +2. Getting Started · Pkg.jl

    2. Getting Started

    What follows is a quick overview of the basic features of Pkg. It should help new users become familiar with basic Pkg features such as adding and removing packages and working with environments.

    Note

    Some Pkg output is omitted in this section in order to keep this basic guide focused. This will help maintain a good pace and not get bogged down in details. If you require more details, refer to subsequent sections of the Pkg manual.

    Note

    This guide uses the Pkg REPL to execute Pkg commands. For non-interactive use, we recommend the Pkg API. The Pkg API is fully documented in the API Reference section of the Pkg documentation.

    Basic Usage

    Pkg comes with a REPL. Enter the Pkg REPL by pressing ] from the Julia REPL. To get back to the Julia REPL, press Ctrl+C or backspace (when the REPL cursor is at the beginning of the input).

    Upon entering the Pkg REPL, you should see the following prompt:

    (@v1.9) pkg>

    To add a package, use add:

    (@v1.9) pkg> add Example
    +   Resolving package versions...
    +   Installed Example ─ v0.5.3
    +    Updating `~/.julia/environments/v1.9/Project.toml`
    +  [7876af07] + Example v0.5.3
    +    Updating `~/.julia/environments/v1.9/Manifest.toml`
    +  [7876af07] + Example v0.5.3

    After the package is installed, it can be loaded into the Julia session:

    julia> import Example
    +
    +julia> Example.hello("friend")
    +"Hello, friend"

    We can also specify multiple packages at once to install:

    (@v1.9) pkg> add JSON StaticArrays

    The status command (or the shorter st command) can be used to see installed packages.

    (@v1.9) pkg> st
    +Status `~/.julia/environments/v1.6/Project.toml`
    +  [7876af07] Example v0.5.3
    +  [682c06a0] JSON v0.21.3
    +  [90137ffa] StaticArrays v1.5.9
    Note

    Some Pkg REPL commands have a short and a long version of the command, for example status and st.

    To remove packages, use rm (or remove):

    (@v1.9) pkg> rm JSON StaticArrays

    Use up (or update) to update the installed packages

    (@v1.9) pkg> up

    If you have been following this guide it is likely that the packages installed are at the latest version so up will not do anything. Below we show the status output in the case where we deliberately have installed an old version of the Example package and then upgrade it:

    (@v1.9) pkg> st
    +Status `~/.julia/environments/v1.9/Project.toml`
    +⌃ [7876af07] Example v0.5.1
    +Info Packages marked with ⌃ have new versions available and may be upgradable.
    +
    +(@v1.9) pkg> up
    +    Updating `~/.julia/environments/v1.9/Project.toml`
    +  [7876af07] ↑ Example v0.5.1 ⇒ v0.5.3

    We can see that the status output tells us that there is a newer version available and that up upgrades the package.

    For more information about managing packages, see the Managing Packages section of the documentation.

    Getting Started with Environments

    Up to this point, we have covered basic package management: adding, updating, and removing packages.

    You may have noticed the (@v1.9) in the REPL prompt. This lets us know that v1.9 is the active environment. Different environments can have different totally different packages and versions installed from another environment. The active environment is the environment that will be modified by Pkg commands such as add, rm and update.

    Let's set up a new environment so we may experiment. To set the active environment, use activate:

    (@v1.9) pkg> activate tutorial
    +[ Info: activating new environment at `~/tutorial/Project.toml`.

    Pkg lets us know we are creating a new environment and that this environment will be stored in the ~/tutorial directory. The path to the environment is created relative to the current working directory of the REPL.

    Pkg has also updated the REPL prompt in order to reflect the new active environment:

    (tutorial) pkg>

    We can ask for information about the active environment by using status:

    (tutorial) pkg> status
    +    Status `~/tutorial/Project.toml`
    +   (empty environment)

    ~/tutorial/Project.toml is the location of the active environment's project file. A project file is a TOML file here Pkg stores the packages that have been explicitly installed. Notice this new environment is empty. Let us add some packages and observe:

    (tutorial) pkg> add Example JSON
    +...
    +
    +(tutorial) pkg> status
    +    Status `~/tutorial/Project.toml`
    +  [7876af07] Example v0.5.3
    +  [682c06a0] JSON v0.21.3

    We can see that the tutorial environment now contains Example and JSON.

    Note

    If you have the same package (at the same version) installed in multiple environments, the package will only be downloaded and stored on the hard drive once. This makes environments very lightweight and effectively free to create. Only using the default environment with a huge number of packages in it is a common beginners mistake in Julia. Learning how to use environments effectively will improve your experience with Julia packages.

    For more information about environments, see the Working with Environments section of the documentation.

    Asking for Help

    If you are ever stuck, you can ask Pkg for help:

    (@v1.9) pkg> ?

    You should see a list of available commands along with short descriptions. You can ask for more detailed help by specifying a command:

    (@v1.9) pkg> ?develop

    This guide should help you get started with Pkg. Pkg has much more to offer in terms of powerful package management, read the full manual to learn more!

    diff --git a/previews/PR3585/glossary/index.html b/previews/PR3585/glossary/index.html new file mode 100644 index 0000000000..8c434ad0a1 --- /dev/null +++ b/previews/PR3585/glossary/index.html @@ -0,0 +1,2 @@ + +9. Glossary · Pkg.jl

    9. Glossary

    Project: a source tree with a standard layout, including a src directory for the main body of Julia code, a test directory for testing the project, a docs directory for documentation files, and optionally a deps directory for a build script and its outputs. A project will typically also have a project file and may optionally have a manifest file:

    • Project file: a file in the root directory of a project, named Project.toml (or JuliaProject.toml), describing metadata about the project, including its name, UUID (for packages), authors, license, and the names and UUIDs of packages and libraries that it depends on.

    • Manifest file: a file in the root directory of a project, named Manifest.toml (or JuliaManifest.toml), describing a complete dependency graph and exact versions of each package and library used by a project.

    Package: a project which provides reusable functionality that can be used by other Julia projects via import X or using X. A package should have a project file with a uuid entry giving its package UUID. This UUID is used to identify the package in projects that depend on it.

    Note

    For legacy reasons, it is possible to load a package without a project file or UUID from the REPL or the top-level of a script. It is not possible, however, to load a package without a project file or UUID from a project with them. Once you've loaded from a project file, everything needs a project file and UUID.

    Application: a project which provides standalone functionality not intended to be reused by other Julia projects. For example a web application or a command-line utility, or simulation/analytics code accompanying a scientific paper. An application may have a UUID but does not need one. An application may also set and change the global configurations of packages it depends on. Packages, on the other hand, may not change the global state of their dependencies since that could conflict with the configuration of the main application.

    Note

    Projects vs. Packages vs. Applications:

    1. Project is an umbrella term: packages and applications are kinds of projects.
    2. Packages should have UUIDs, applications can have UUIDs but don't need them.
    3. Applications can provide global configuration, whereas packages cannot.

    Environment: the combination of the top-level name map provided by a project file combined with the dependency graph and map from packages to their entry points provided by a manifest file. For more detail see the manual section on code loading.

    • Explicit environment: an environment in the form of an explicit project file and an optional corresponding manifest file together in a directory. If the manifest file is absent then the implied dependency graph and location maps are empty.

    • Implicit environment: an environment provided as a directory (without a project file or manifest file) containing packages with entry points of the form X.jl, X.jl/src/X.jl or X/src/X.jl. The top-level name map is implied by these entry points. The dependency graph is implied by the existence of project files inside of these package directories, e.g. X.jl/Project.toml or X/Project.toml. The dependencies of the X package are the dependencies in the corresponding project file if there is one. The location map is implied by the entry points themselves.

    Registry: a source tree with a standard layout recording metadata about a registered set of packages, the tagged versions of them which are available, and which versions of packages are compatible or incompatible with each other. A registry is indexed by package name and UUID, and has a directory for each registered package providing the following metadata about it:

    • name – e.g. DataFrames
    • UUID – e.g. a93c6f00-e57d-5684-b7b6-d8193f3e46c0
    • repository – e.g. https://github.com/JuliaData/DataFrames.jl.git
    • versions – a list of all registered version tags

    For each registered version of a package, the following information is provided:

    • its semantic version number – e.g. v1.2.3
    • its git tree SHA-1 hash – e.g. 7ffb18ea3245ef98e368b02b81e8a86543a11103
    • a map from names to UUIDs of dependencies
    • which versions of other packages it is compatible/incompatible with

    Dependencies and compatibility are stored in a compressed but human-readable format using ranges of package versions.

    Depot: a directory on a system where various package-related resources live, including:

    • environments: shared named environments (e.g. v1.0, devtools)
    • clones: bare clones of package repositories
    • compiled: cached compiled package images (.ji files)
    • config: global configuration files (e.g. startup.jl)
    • dev: default directory for package development
    • logs: log files (e.g. manifest_usage.toml, repl_history.jl)
    • packages: installed package versions
    • registries: clones of registries (e.g. General)

    Load path: a stack of environments where package identities, their dependencies, and entry points are searched for. The load path is controlled in Julia by the LOAD_PATH global variable which is populated at startup based on the value of the JULIA_LOAD_PATH environment variable. The first entry is your primary environment, often the current project, while later entries provide additional packages one may want to use from the REPL or top-level scripts.

    Depot path: a stack of depot locations where the package manager, as well as Julia's code loading mechanisms, look for registries, installed packages, named environments, repo clones, cached compiled package images, and configuration files. The depot path is controlled by the Julia DEPOT_PATH global variable which is populated at startup based on the value of the JULIA_DEPOT_PATH environment variable. The first entry is the “user depot” and should be writable by and owned by the current user. The user depot is where: registries are cloned, new package versions are installed, named environments are created and updated, package repositories are cloned, newly compiled package image files are saved, log files are written, development packages are checked out by default, and global configuration data is saved. Later entries in the depot path are treated as read-only and are appropriate for registries, packages, etc. installed and managed by system administrators.

    diff --git a/previews/PR3585/index.html b/previews/PR3585/index.html new file mode 100644 index 0000000000..ed8ad8a0c2 --- /dev/null +++ b/previews/PR3585/index.html @@ -0,0 +1,2 @@ + +1. Introduction · Pkg.jl

    1. Introduction

    Welcome to the documentation for Pkg, Julia's package manager. The documentation covers many things, for example managing package installations, developing packages, working with package registries and more.

    Throughout the manual the REPL interface to Pkg, the Pkg REPL mode, is used in the examples. There is also a functional API, which is preferred when not working interactively. This API is documented in the API Reference section.

    Background and Design

    Unlike traditional package managers, which install and manage a single global set of packages, Pkg is designed around “environments”: independent sets of packages that can be local to an individual project or shared and selected by name. The exact set of packages and versions in an environment is captured in a manifest file which can be checked into a project repository and tracked in version control, significantly improving reproducibility of projects. If you’ve ever tried to run code you haven’t used in a while only to find that you can’t get anything to work because you’ve updated or uninstalled some of the packages your project was using, you’ll understand the motivation for this approach. In Pkg, since each project maintains its own independent set of package versions, you’ll never have this problem again. Moreover, if you check out a project on a new system, you can simply materialize the environment described by its manifest file and immediately be up and running with a known-good set of dependencies.

    Since environments are managed and updated independently from each other, “dependency hell” is significantly alleviated in Pkg. If you want to use the latest and greatest version of some package in a new project but you’re stuck on an older version in a different project, that’s no problem – since they have separate environments they can just use different versions, which are both installed at the same time in different locations on your system. The location of each package version is canonical, so when environments use the same versions of packages, they can share installations, avoiding unnecessary duplication of the package. Old package versions that are no longer used by any environments are periodically “garbage collected” by the package manager.

    Pkg’s approach to local environments may be familiar to people who have used Python’s virtualenv or Ruby’s bundler. In Julia, instead of hacking the language’s code loading mechanisms to support environments, we have the benefit that Julia natively understands them. In addition, Julia environments are “stackable”: you can overlay one environment with another and thereby have access to additional packages outside of the primary environment. This makes it easy to work on a project, which provides the primary environment, while still having access from the REPL to all your usual dev tools like profilers, debuggers, and so on, just by having an environment including these dev tools later in the load path.

    Last but not least, Pkg is designed to support federated package registries. This means that it allows multiple registries managed by different parties to interact seamlessly. In particular, this includes private registries which can live behind corporate firewalls. You can install and update your own packages from a private registry with exactly the same tools and workflows that you use to install and manage official Julia packages. If you urgently need to apply a hotfix for a public package that’s critical to your company’s product, you can tag a private version of it in your company’s internal registry and get a fix to your developers and ops teams quickly and easily without having to wait for an upstream patch to be accepted and published. Once an official fix is published, however, you can just upgrade your dependencies and you'll be back on an official release again.

    diff --git a/previews/PR3585/managing-packages/index.html b/previews/PR3585/managing-packages/index.html new file mode 100644 index 0000000000..6f2b172baa --- /dev/null +++ b/previews/PR3585/managing-packages/index.html @@ -0,0 +1,147 @@ + +3. Managing Packages · Pkg.jl

    3. Managing Packages

    Adding packages

    There are two ways of adding packages, either using the add command or the dev command. The most frequently used is add and its usage is described first.

    Adding registered packages

    In the Pkg REPL, packages can be added with the add command followed by the name of the package, for example:

    (@v1.8) pkg> add JSON
    +  Installing known registries into `~/`
    +   Resolving package versions...
    +   Installed Parsers ─ v2.4.0
    +   Installed JSON ──── v0.21.3
    +    Updating `~/.julia/environments/v1.8/Project.toml`
    +  [682c06a0] + JSON v0.21.3
    +    Updating `~/environments/v1.9/Manifest.toml`
    +  [682c06a0] + JSON v0.21.3
    +  [69de0a69] + Parsers v2.4.0
    +  [ade2ca70] + Dates
    +  [a63ad114] + Mmap
    +  [de0858da] + Printf
    +  [4ec0a83e] + Unicode
    +Precompiling environment...
    +  2 dependencies successfully precompiled in 2 seconds

    Here we added the package Example to the current environment (which is the default @v1.8 environment). In this example, we are using a fresh Julia installation, and this is our first time adding a package using Pkg. By default, Pkg installs the General registry and uses this registry to look up packages requested for inclusion in the current environment. The status update shows a short form of the package UUID to the left, then the package name, and the version. Finally, the newly installed packages are "precompiled".

    It is possible to add multiple packages in one command as pkg> add A B C.

    The status output contains the packages you have added yourself, in this case, JSON:

    (@v1.8) pkg> st
    +    Status `~/.julia/environments/v1.8/Project.toml`
    +  [682c06a0] JSON v0.21.3

    The manifest status shows all the packages in the environment, including recursive dependencies:

    (@v1.8) pkg> st -m
    +Status `~/environments/v1.9/Manifest.toml`
    +  [682c06a0] JSON v0.21.3
    +  [69de0a69] Parsers v2.4.0
    +  [ade2ca70] Dates
    +  [a63ad114] Mmap
    +  [de0858da] Printf
    +  [4ec0a83e] Unicode

    Since standard libraries (e.g. Dates) are shipped with Julia, they do not have a version.

    After a package is added to the project, it can be loaded in Julia:

    julia> using JSON
    +
    +julia> JSON.json(Dict("foo" => [1, "bar"])) |> print
    +{"foo":[1,"bar"]}
    Note

    Only packages that have been added with add can be loaded (which are packages that are shown when using st in the Pkg REPL). Packages that are pulled in only as dependencies (for example the Parsers package above) can not be loaded.

    A specific version of a package can be installed by appending a version after a @ symbol to the package name:

    (@v1.8) pkg> add JSON@0.21.1
    +   Resolving package versions...
    +    Updating `~/.julia/environments/v1.8/Project.toml`
    +⌃ [682c06a0] + JSON v0.21.1
    +    Updating `~/environments/v1.9/Manifest.toml`
    +⌃ [682c06a0] + JSON v0.21.1
    +⌅ [69de0a69] + Parsers v1.1.2
    +  [ade2ca70] + Dates
    +  [a63ad114] + Mmap
    +  [de0858da] + Printf
    +  [4ec0a83e] + Unicode
    +        Info Packages marked with ⌃ and ⌅ have new versions available, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`

    As seen above, Pkg gives some information when a package is not installed at its latest version.

    If not all three numbers are given for the version, for example, 0.21, then the latest registered version of 0.21.x would be installed.

    If a branch (or a certain commit) of Example has a hotfix that is not yet included in a registered version, we can explicitly track that branch (or commit) by appending #branchname (or #commitSHA1) to the package name:

    (@v1.8) pkg> add Example#master
    +     Cloning git-repo `https://github.com/JuliaLang/Example.jl.git`
    +   Resolving package versions...
    +    Updating `~/.julia/environments/v1.8/Project.toml`
    +  [7876af07] + Example v0.5.4 `https://github.com/JuliaLang/Example.jl.git#master`
    +    Updating `~/environments/v1.9/Manifest.toml`
    +  [7876af07] + Example v0.5.4 `https://github.com/JuliaLang/Example.jl.git#master`

    The status output now shows that we are tracking the master branch of Example. When updating packages, updates are pulled from that branch.

    Note

    If we would specify a commit id instead of a branch name, e.g. add Example#025cf7e, then we would effectively "pin" the package to that commit. This is because the commit id always points to the same thing unlike a branch, which may be updated.

    To go back to tracking the registry version of Example, the command free is used:

    (@v1.8) pkg> free Example
    +   Resolving package versions...
    +   Installed Example ─ v0.5.3
    +    Updating `~/.julia/environments/v1.8/Project.toml`
    +  [7876af07] ~ Example v0.5.4 `https://github.com/JuliaLang/Example.jl.git#master` ⇒ v0.5.3
    +    Updating `~/environments/v1.9/Manifest.toml`
    +  [7876af07] ~ Example v0.5.4 `https://github.com/JuliaLang/Example.jl.git#master` ⇒ v0.5.3

    Adding unregistered packages

    If a package is not in a registry, it can be added by specifying a URL to the Git repository:

    (@v1.8) pkg> add https://github.com/fredrikekre/ImportMacros.jl
    +     Cloning git-repo `https://github.com/fredrikekre/ImportMacros.jl`
    +   Resolving package versions...
    +    Updating `~/.julia/environments/v1.8/Project.toml`
    +  [92a963f6] + ImportMacros v1.0.0 `https://github.com/fredrikekre/ImportMacros.jl#master`
    +    Updating `~/environments/v1.9/Manifest.toml`
    +  [92a963f6] + ImportMacros v1.0.0 `https://github.com/fredrikekre/ImportMacros.jl#master`

    The dependencies of the unregistered package (here MacroTools) got installed. For unregistered packages, we could have given a branch name (or commit SHA1) to track using #, just like for registered packages.

    If you want to add a package using the SSH-based git protocol, you have to use quotes because the URL contains a @. For example,

    (@v1.8) pkg> add "git@github.com:fredrikekre/ImportMacros.jl.git"
    +    Cloning git-repo `git@github.com:fredrikekre/ImportMacros.jl.git`
    +   Updating registry at `~/.julia/registries/General`
    +  Resolving package versions...
    +Updating `~/.julia/environments/v1/Project.toml`
    +  [92a963f6] + ImportMacros v1.0.0 `git@github.com:fredrikekre/ImportMacros.jl.git#master`
    +Updating `~/.julia/environments/v1/Manifest.toml`
    +  [92a963f6] + ImportMacros v1.0.0 `git@github.com:fredrikekre/ImportMacros.jl.git#master`

    Adding a package in a subdirectory of a repository

    If the package you want to add by URL is not in the root of the repository, then you need pass that subdirectory using :. For instance, to add the SnoopCompileCore package in the SnoopCompile repository:

    pkg> add https://github.com/timholy/SnoopCompile.jl.git:SnoopCompileCore
    +    Cloning git-repo `https://github.com/timholy/SnoopCompile.jl.git`
    +   Resolving package versions...
    +    Updating `~/.julia/environments/v1.8/Project.toml`
    +  [e2b509da] + SnoopCompileCore v2.9.0 `https://github.com/timholy/SnoopCompile.jl.git:SnoopCompileCore#master`
    +    Updating `~/.julia/environments/v1.8/Manifest.toml`
    +  [e2b509da] + SnoopCompileCore v2.9.0 `https://github.com/timholy/SnoopCompile.jl.git:SnoopCompileCore#master`
    +  [9e88b42a] + Serialization

    Adding a local package

    Instead of giving a URL of a git repo to add we could instead have given a local path to a git repo. This works similar to adding a URL. The local repository will be tracked (at some branch) and updates from that local repo are pulled when packages are updated.

    Warning

    Note that tracking a package through add is distinct from develop (which is described in the next session). When using add on a local git repository, changes to files in the local package repository will not immediately be reflected when loading that package. The changes would have to be committed and the packages updated in order to pull in the changes. In the majority of cases, you want to use develop on a local path, not add.

    Developing packages

    By only using add your environment always has a "reproducible state", in other words, as long as the repositories and registries used are still accessible it is possible to retrieve the exact state of all the dependencies in the environment. This has the advantage that you can send your environment (Project.toml and Manifest.toml) to someone else and they can Pkg.instantiate that environment in the same state as you had it locally. However, when you are developing a package, it is more convenient to load packages at their current state at some path. For this reason, the dev command exists.

    Let's try to dev a registered package:

    (@v1.8) pkg> dev Example
    +  Updating git-repo `https://github.com/JuliaLang/Example.jl.git`
    +   Resolving package versions...
    +    Updating `~/.julia/environments/v1.8/Project.toml`
    +  [7876af07] + Example v0.5.4 `~/.julia/dev/Example`
    +    Updating `~/.julia/environments/v1.8/Manifest.toml`
    +  [7876af07] + Example v0.5.4 `~/.julia/dev/Example`

    The dev command fetches a full clone of the package to ~/.julia/dev/ (the path can be changed by setting the environment variable JULIA_PKG_DEVDIR, the default being joinpath(DEPOT_PATH[1],"dev")). When importing Example julia will now import it from ~/.julia/dev/Example and whatever local changes have been made to the files in that path are consequently reflected in the code loaded. When we used add we said that we tracked the package repository; we here say that we track the path itself. Note the package manager will never touch any of the files at a tracked path. It is therefore up to you to pull updates, change branches, etc. If we try to dev a package at some branch that already exists at ~/.julia/dev/ the package manager will simply re-use the existing path. If dev is used on a local path, that path to that package is recorded and used when loading that package. The path will be recorded relative to the project file, unless it is given as an absolute path.

    Let's try modify the file at ~/.julia/dev/Example/src/Example.jl and add a simple function:

    plusone(x::Int) = x + 1

    Now we can go back to the Julia REPL and load the package and run the new function:

    julia> import Example
    +[ Info: Precompiling Example [7876af07-990d-54b4-ab0e-23690620f79a]
    +
    +julia> Example.plusone(1)
    +2
    Warning

    A package can only be loaded once per Julia session. If you have run import Example in the current Julia session, you will have to restart Julia to see the changes to Example. Revise.jl can make this process significantly more pleasant, but setting it up is beyond the scope of this guide.

    To stop tracking a path and use the registered version again, use free:

    (@v1.8) pkg> free Example
    +   Resolving package versions...
    +    Updating `~/.julia/environments/v1.8/Project.toml`
    +  [7876af07] ~ Example v0.5.4 `~/.julia/dev/Example` ⇒ v0.5.3
    +    Updating `~/.julia/environments/v1.8/Manifest.toml`
    +  [7876af07] ~ Example v0.5.4 `~/.julia/dev/Example` ⇒ v0.5.3

    It should be pointed out that by using dev your project is now inherently stateful. Its state depends on the current content of the files at the path and the manifest cannot be "instantiated" by someone else without knowing the exact content of all the packages that are tracking a path.

    Note that if you add a dependency to a package that tracks a local path, the Manifest (which contains the whole dependency graph) will become out of sync with the actual dependency graph. This means that the package will not be able to load that dependency since it is not recorded in the Manifest. To synchronize the Manifest, use the REPL command resolve.

    In addition to absolute paths, add and dev can accept relative paths to packages. In this case, the relative path from the active project to the package is stored. This approach is useful when the relative location of tracked dependencies is more important than their absolute location. For example, the tracked dependencies can be stored inside of the active project directory. The whole directory can be moved and Pkg will still be able to find the dependencies because their path relative to the active project is preserved even though their absolute path has changed.

    Removing packages

    Packages can be removed from the current project by using pkg> rm Package. This will only remove packages that exist in the project; to remove a package that only exists as a dependency use pkg> rm --manifest DepPackage. Note that this will remove all packages that (recursively) depend on DepPackage.

    Updating packages

    When new versions of packages are released, it is a good idea to update. Simply calling up will try to update all the dependencies of the project to the latest compatible version. Sometimes this is not what you want. You can specify a subset of the dependencies to upgrade by giving them as arguments to up, e.g:

    (@v1.8) pkg> up Example

    This will only allow Example do upgrade. If you also want to allow dependencies of Example to upgrade (with the exception of packages that are in the project) you can pass the --preserve=direct flag.

    (@v1.8) pkg> up --preserve=direct Example

    And if you also want to allow dependencies of Example that are also in the project to upgrade, you can use --preserve=none:

    (@v1.8) pkg> up --preserve=none Example

    Pinning a package

    A pinned package will never be updated. A package can be pinned using pin, for example:

    (@v1.8) pkg> pin Example
    + Resolving package versions...
    +  Updating `~/.julia/environments/v1.8/Project.toml`
    +  [7876af07] ~ Example v0.5.3 ⇒ v0.5.3 ⚲
    +  Updating `~/.julia/environments/v1.8/Manifest.toml`
    +  [7876af07] ~ Example v0.5.3 ⇒ v0.5.3 ⚲

    Note the pin symbol showing that the package is pinned. Removing the pin is done using free

    (@v1.8) pkg> free Example
    +  Updating `~/.julia/environments/v1.8/Project.toml`
    +  [7876af07] ~ Example v0.5.3 ⚲ ⇒ v0.5.3
    +  Updating `~/.julia/environments/v1.8/Manifest.toml`
    +  [7876af07] ~ Example v0.5.3 ⚲ ⇒ v0.5.3

    Testing packages

    The tests for a package can be run using test command:

    (@v1.8) pkg> test Example
    +...
    +   Testing Example
    +   Testing Example tests passed

    Building packages

    The build step of a package is automatically run when a package is first installed. The output of the build process is directed to a file. To explicitly run the build step for a package, the build command is used:

    (@v1.8) pkg> build IJulia
    +    Building Conda ─→ `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/6e47d11ea2776bc5627421d59cdcc1296c058071/build.log`
    +    Building IJulia → `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/98ab633acb0fe071b671f6c1785c46cd70bb86bd/build.log`
    +
    +julia> print(read(joinpath(homedir(), ".julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/98ab633acb0fe071b671f6c1785c46cd70bb86bd/build.log"), String))
    +[ Info: Installing Julia kernelspec in /home/kc/.local/share/jupyter/kernels/julia-1.8

    Interpreting and resolving version conflicts

    An environment consists of a set of mutually-compatible packages. Sometimes, you can find yourself in a situation in which two packages you'd like to use simultaneously have incompatible requirements. In such cases you'll get an "Unsatisfiable requirements" error:

    pkg> add A
    +Unsatisfiable requirements detected for package D [756980fe]:
    + D [756980fe] log:
    + ├─possible versions are: 0.1.0-0.2.1 or uninstalled
    + ├─restricted by compatibility requirements with B [f4259836] to versions: 0.1.0
    + │ └─B [f4259836] log:
    + │   ├─possible versions are: 1.0.0 or uninstalled
    + │   └─restricted to versions * by an explicit requirement, leaving only versions: 1.0.0
    + └─restricted by compatibility requirements with C [c99a7cb2] to versions: 0.2.0 — no versions left
    +   └─C [c99a7cb2] log:
    +     ├─possible versions are: 0.1.0-0.2.0 or uninstalled
    +     └─restricted by compatibility requirements with A [29c70717] to versions: 0.2.0
    +       └─A [29c70717] log:
    +         ├─possible versions are: 1.0.0 or uninstalled
    +         └─restricted to versions * by an explicit requirement, leaving only versions: 1.0.0

    This message means that a package named D has a version conflict. Even if you have never added D directly, this kind of error can arise if D is required by other packages that you are trying to use.

    Note

    When tackling these conflicts, first consider that the bigger a project gets, the more likely this is to happen. Using targeted projects for a given task is highly recommended, and removing unused dependencies is a good first step when hitting these issues. For instance, a common pitfall is having more than a few packages in your default (i.e. (@1.8)) environment, and using that as an environment for all tasks you're using julia for. It's better to create a dedicated project for the task you're working on, and keep the dependencies there minimal. To read more see Working with Environments

    The error message has a lot of crucial information. It may be easiest to interpret piecewise:

    Unsatisfiable requirements detected for package D [756980fe]:
    + D [756980fe] log:
    + ├─possible versions are: [0.1.0, 0.2.0-0.2.1] or uninstalled

    means that D has three released versions, v0.1.0, v0.2.0, and v0.2.1. You also have the option of not having it installed at all. Each of these options might have different implications for the set of other packages that can be installed.

    Crucially, notice the stroke characters (vertical and horizontal lines) and their indentation. Together, these connect messages to specific packages. For instance the right stroke of ├─ indicates that the message to its right (possible versions...) is connected to the package pointed to by its vertical stroke (D). This same principle applies to the next line:

     ├─restricted by compatibility requirements with B [f4259836] to versions: 0.1.0

    The vertical stroke here is also aligned under D, and thus this message is in reference to D. Specifically, there's some other package B that depends on version v0.1.0 of D. Notice that this is not the newest version of D.

    Next comes some information about B:

     │ └─B [f4259836] log:
    + │   ├─possible versions are: 1.0.0 or uninstalled
    + │   └─restricted to versions * by an explicit requirement, leaving only versions 1.0.0

    The two lines below the first have a vertical stroke that aligns with B, and thus they provide information about B. They tell you that B has just one release, v1.0.0. You've not specified a particular version of B (restricted to versions * means that any version will do), but the explicit requirement means that you've asked for B to be part of your environment, for example by pkg> add B. You might have asked for B previously, and the requirement is still active.

    The conflict becomes clear with the line

    └─restricted by compatibility requirements with C [c99a7cb2] to versions: 0.2.0 — no versions left

    Here again, the vertical stroke aligns with D: this means that D is also required by another package, C. C requires v0.2.0 of D, and this conflicts with B's need for v0.1.0 of D. This explains the conflict.

    But wait, you might ask, what is C and why do I need it at all? The next few lines introduce the problem:

       └─C [c99a7cb2] log:
    +     ├─possible versions are: [0.1.0-0.1.1, 0.2.0] or uninstalled
    +     └─restricted by compatibility requirements with A [29c70717] to versions: 0.2.0

    These provide more information about C, revealing that it has 3 released versions: v0.1.0, v0.1.1, and v0.2.0. Moreover, C is required by another package A. Indeed, A's requirements are such that we need v0.2.0 of C. A's origin is revealed on the next lines:

           └─A [29c70717] log:
    +         ├─possible versions are: 1.0.0 or uninstalled
    +         └─restricted to versions * by an explicit requirement, leaving only versions 1.0.0

    So we can see that A was explicitly required, and in this case, it's because we were trying toadd` it to our environment.

    In summary, we explicitly asked to use A and B, but this gave a conflict for D. The reason was that B and C require conflicting versions of D. Even though C isn't something we asked for explicitly, it was needed by A.

    To fix such errors, you have a number of options:

    • try updating your packages. It's possible the developers of these packages have recently released new versions that are mutually compatible.
    • remove either A or B from your environment. Perhaps B is left over from something you were previously working on, and you don't need it anymore. If you don't need A and B at the same time, this is the easiest way to fix the problem.
    • try reporting your conflict. In this case, we were able to deduce that B requires an outdated version of D. You could thus report an issue in the development repository of B.jl asking for an updated version.
    • try fixing the problem yourself. This becomes easier once you understand Project.toml files and how they declare their compatibility requirements. We'll return to this example in Fixing conflicts.

    Garbage collecting old, unused packages

    As packages are updated and projects are deleted, installed package versions and artifacts that were once used will inevitably become old and not used from any existing project. Pkg keeps a log of all projects used so it can go through the log and see exactly which projects still exist and what packages/artifacts those projects used. If a package or artifact is not marked as used by any project, it is added to a list of orphaned packages. Packages and artifacts that are in the orphan list for 30 days without being used again are deleted from the system on the next garbage collection. This timing is configurable via the collect_delay keyword argument to Pkg.gc(). A value of 0 will cause anything currently not in use to be collected immediately, skipping the orphans list entirely; If you are short on disk space and want to clean out as many unused packages and artifacts as possible, you may want to try this, but if you need these versions again, you will have to download them again. To run a typical garbage collection with default arguments, simply use the gc command at the pkg> REPL:

    (@v1.8) pkg> gc
    +    Active manifests at:
    +        `~/BinaryProvider/Manifest.toml`
    +        ...
    +        `~/Compat.jl/Manifest.toml`
    +    Active artifacts:
    +        `~/src/MyProject/Artifacts.toml`
    +
    +    Deleted ~/.julia/packages/BenchmarkTools/1cAj: 146.302 KiB
    +    Deleted ~/.julia/packages/Cassette/BXVB: 795.557 KiB
    +   ...
    +   Deleted `~/.julia/artifacts/e44cdf2579a92ad5cbacd1cddb7414c8b9d2e24e` (152.253 KiB)
    +   Deleted `~/.julia/artifacts/f2df5266567842bbb8a06acca56bcabf813cd73f` (21.536 MiB)
    +
    +   Deleted 36 package installations (113.205 MiB)
    +   Deleted 15 artifact installations (20.759 GiB)

    Note that only packages in ~/.julia/packages are deleted.

    Offline Mode

    In offline mode, Pkg tries to do as much as possible without connecting to internet. For example, when adding a package Pkg only considers versions that are already downloaded in version resolution.

    To work in offline mode use import Pkg; Pkg.offline(true) or set the environment variable JULIA_PKG_OFFLINE to "true".

    Pkg client/server

    When you add a new registered package, usually three things would happen:

    1. update registries,
    2. download the source code of the package,
    3. if not available, download artifacts required by the package.

    The General registry and most packages in it are developed on GitHub, while the artifacts data are hosted on various platforms. When the network connection to GitHub and AWS S3 is not stable, it is usually not a good experience to install or update packages. Fortunately, the pkg client/server feature improves the experience in the sense that:

    1. If set, the pkg client would first try to download data from the pkg server,
    2. if that fails, then it falls back to downloading from the original sources (e.g., GitHub).

    By default, the client makes upto 8 concurrent requests to the server. This can set by the environment variable JULIA_PKG_CONCURRENT_DOWNLOADS.

    Since Julia 1.5, https://pkg.julialang.org provided by the JuliaLang organization is used as the default pkg server. In most cases, this should be transparent, but users can still set/unset a pkg server upstream via the environment variable JULIA_PKG_SERVER.

    # manually set it to some pkg server
    +julia> ENV["JULIA_PKG_SERVER"] = "pkg.julialang.org"
    +"pkg.julialang.org"
    +
    +# unset to always download data from original sources
    +julia> ENV["JULIA_PKG_SERVER"] = ""
    +""

    For clarification, some sources are not provided by Pkg server

    • packages/registries fetched via git
      • ]add https://github.com/JuliaLang/Example.jl.git
      • ]add Example#v0.5.3 (Note that this is different from ]add Example@0.5.3)
      • ]registry add https://github.com/JuliaRegistries/General.git, including registries installed by Julia before 1.4.
    • artifacts without download info
    Note

    If you have a new registry installed via pkg server, then it's impossible for old Julia versions to update the registry because Julia before 1.4 doesn't know how to fetch new data. Hence, for users that frequently switch between multiple Julia versions, it is recommended to still use git-controlled registries.

    For the deployment of pkg server, please refer to PkgServer.jl.

    diff --git a/previews/PR3585/registries/index.html b/previews/PR3585/registries/index.html new file mode 100644 index 0000000000..98fbc80e6c --- /dev/null +++ b/previews/PR3585/registries/index.html @@ -0,0 +1,30 @@ + +7. Registries · Pkg.jl

    7. Registries

    Registries contain information about packages, such as available releases and dependencies, and where they can be downloaded. The General registry is the default one, and is installed automatically if there are no other registries installed.

    Managing registries

    Registries can be added, removed and updated from either the Pkg REPL or by using the functional API. In this section we will describe the REPL interface. The registry API is documented in the Registry API Reference section.

    Adding registries

    A custom registry can be added with the registry add command from the Pkg REPL. Usually this will be done with a URL to the registry.

    If a custom registry has been installed causing the General registry to not be automatically installed, it is easy to add it manually: be added automatically. In that case, we can simply add the General

    pkg> registry add General

    and now all the packages registered in General are available for e.g. adding. To see which registries are currently installed you can use the registry status (or registry st) command

    pkg> registry st
    +Registry Status
    + [23338594] General (https://github.com/JuliaRegistries/General.git)

    Registries are always added to the user depot, which is the first entry in DEPOT_PATH (cf. the Glossary section).

    Registries from a package server

    It is possible for a package server to be advertising additional available package registries. When Pkg runs with a clean Julia depot (e.g. after a fresh install), with a custom package server configured with JULIA_PKG_SERVER, it will automatically add all such available registries. If the depot already has some registries installed (e.g. General), the additional ones can easily be installed with the no-argument registry add command.

    Removing registries

    Registries can be removed with the registry remove (or registry rm) command. Here we remove the General registry

    pkg> registry rm General
    +  Removing registry `General` from ~/.julia/registries/General
    +
    +pkg> registry st
    +Registry Status
    +  (no registries found)

    In case there are multiple registries named General installed you have to disambiguate with the uuid, just as when manipulating packages, e.g.

    pkg> registry rm General=23338594-aafe-5451-b93e-139f81909106
    +  Removing registry `General` from ~/.julia/registries/General

    Updating registries

    The registry update (or registry up) command is available to update registries. Here we update the General registry:

    pkg> registry up General
    +  Updating registry at `~/.julia/registries/General`
    +  Updating git-repo `https://github.com/JuliaRegistries/General`

    and to update all installed registries just do:

    pkg> registry up
    +  Updating registry at `~/.julia/registries/General`
    +  Updating git-repo `https://github.com/JuliaRegistries/General`

    Registries automatically update once per session when a package operation is performed so it rarely has to be done manually.

    Registry format

    In a registry, each package gets its own directory; in that directory are the following files: Compat.toml, Deps.toml, Package.toml, and Versions.toml. The formats of these files are described below.

    Registry Compat.toml

    The Compat.toml file has a series of blocks specifying version numbers, with a set of dependencies listed below. For example, part of such a file might look like this:

    ["0.8-0.8.3"]
    +DependencyA = "0.4-0.5"
    +DependencyB = "0.3-0.5"
    +
    +["0.8.2-0.8.5"]
    +DependencyC = "0.7-0"

    Dependencies that are unchanged across a range of versions are grouped together in these blocks. The interpretation of these ranges is given by the comment after each line below:

    "0.7-0.8"  # [0.7.0, 0.9.0)
    +"0.7-0"    # [0.7.0, 1.0.0)
    +"0.8.6-0"  # [0.8.6, 1.0.0)
    +"0.7-*"    # [0.7.0, ∞)

    So for this package, versions [0.8.0, 0.8.3] depend on versions [0.4.0, 0.6.0) of DependencyA and version [0.3.0, 0.6.0) of DependencyB. Meanwhile, it is also true that versions [0.8.2, 0.8.5] require specific versions of DependencyC (so that all three are required for versions 0.8.2 and 0.8.3).

    Registry flavors

    The default Pkg Server (pkg.julialang.org) offers two different "flavors" of registry.

    Julia 1.8

    Registry flavors are only available starting with Julia 1.8.

    • conservative: suitable for most users; all packages and artifacts in this registry flavor are available from the Pkg Server, with no need to download from other sources
    • eager: this registry offers the latest versions of packages, even if the Pkg and Storage Servers have not finished processing them; thus, some packages and artifacts may not be available from the Pkg Server, and thus may need to be downloaded from other sources (such as GitHub)

    The default registry flavor is conservative. We recommend that most users stick to the conservative flavor unless they know that they need to use the eager flavor.

    To select the eager flavor:

    ENV["JULIA_PKG_SERVER_REGISTRY_PREFERENCE"] = "eager"
    +
    +import Pkg
    +
    +Pkg.Registry.update()

    To select the conservative flavor:

    ENV["JULIA_PKG_SERVER_REGISTRY_PREFERENCE"] = "conservative"
    +
    +import Pkg
    +
    +Pkg.Registry.update()

    Creating and maintaining registries

    Pkg only provides client facilities for registries, rather than functionality to create or maintain them. However, Registrator.jl and LocalRegistry.jl provide ways to create and update registries, and RegistryCI.jl provides automated testing and merging functionality for maintaining a registry.

    diff --git a/previews/PR3585/repl/index.html b/previews/PR3585/repl/index.html new file mode 100644 index 0000000000..58d178cf15 --- /dev/null +++ b/previews/PR3585/repl/index.html @@ -0,0 +1,229 @@ + +11. REPL Mode Reference · Pkg.jl

    11. REPL Mode Reference

    This section describes available commands in the Pkg REPL. The Pkg REPL mode is mostly meant for interactive use, and for non-interactive use it is recommended to use the functional API, see API Reference.

    package commands

    +
    + + add + + — + REPL command +
    +
    add [--preserve=<opt>] pkg[=uuid] [@version] [#rev] ...

    Add package pkg to the current project file. If pkg could refer to multiple different packages, specifying uuid allows you to disambiguate. @version optionally allows specifying which versions of packages to add. Version specifications are of the form @1, @1.2 or @1.2.3, allowing any version with a prefix that matches, or ranges thereof, such as @1.2-3.4.5. A git revision can be specified by #branch or #commit.

    If a local path is used as an argument to add, the path needs to be a git repository. The project will then track that git repository just like it would track a remote repository online. If the package is not located at the top of the git repository, a subdirectory can be specified with path:subdir/path.

    Pkg resolves the set of packages in your environment using a tiered approach. The --preserve command line option allows you to key into a specific tier in the resolve algorithm. The following table describes the command line arguments to --preserve (in order of strictness).

    ArgumentDescription
    installedLike all except also only add versions that are already installed
    allPreserve the state of all existing dependencies (including recursive dependencies)
    directPreserve the state of all existing direct dependencies
    semverPreserve semver-compatible versions of direct dependencies
    noneDo not attempt to preserve any version information
    tiered_installedLike tiered except first try to add only installed versions
    tieredUse the tier that will preserve the most version information while
    allowing version resolution to succeed (this is the default)

    Note: To make the default strategy tiered_installed set the env var JULIA_PKG_PRESERVE_TIERED_INSTALLED to true.

    After the installation of new packages the project will be precompiled. For more information see pkg> ?precompile.

    With the installed strategy the newly added packages will likely already be precompiled, but if not this may be because either the combination of package versions resolved in this environment has not been resolved and precompiled before, or the precompile cache has been deleted by the LRU cache storage (see JULIA_MAX_NUM_PRECOMPILE_FILES).

    Examples

    pkg> add Example
    +pkg> add --preserve=all Example
    +pkg> add Example@0.5
    +pkg> add Example#master
    +pkg> add Example#c37b675
    +pkg> add https://github.com/JuliaLang/Example.jl#master
    +pkg> add git@github.com:JuliaLang/Example.jl.git
    +pkg> add "git@github.com:JuliaLang/Example.jl.git"#master
    +pkg> add https://github.com/Company/MonoRepo:juliapkgs/Package.jl
    +pkg> add Example=7876af07-990d-54b4-ab0e-23690620f79a
    +
    +
    + + build + + — + REPL command +
    +
    build [-v|--verbose] pkg[=uuid] ...

    Run the build script in deps/build.jl for pkg and all of its dependencies in depth-first recursive order. If no packages are given, run the build scripts for all packages in the manifest. The -v/--verbose option redirects build output to stdout/stderr instead of the build.log file. The startup.jl file is disabled during building unless julia is started with --startup-file=yes.

    +
    +
    + + compat + + — + REPL command +
    +
    compat [pkg] [compat_string]

    Edit project [compat] entries directly, or via an interactive menu by not specifying any arguments. When directly editing use tab to complete the package name and any existing compat entry. Specifying a package with a blank compat entry will remove the entry. After changing compat entries a resolve will be attempted to check whether the current environment is compliant with the new compat rules.

    +
    +
    + + develop + + — + REPL command +
    +
    [dev|develop] [--preserve=<opt>] [--shared|--local] pkg[=uuid] ...
    +[dev|develop] [--preserve=<opt>] path

    Make a package available for development. If pkg is an existing local path, that path will be recorded in the manifest and used. Otherwise, a full git clone of pkg is made. The location of the clone is controlled by the --shared (default) and --local arguments. The --shared location defaults to ~/.julia/dev, but can be controlled with the JULIA_PKG_DEVDIR environment variable.

    When --local is given, the clone is placed in a dev folder in the current project. This is not supported for paths, only registered packages.

    This operation is undone by free.

    The preserve strategies offered by add are also available via the preserve argument. See add for more information.

    Examples

    pkg> develop Example
    +pkg> develop https://github.com/JuliaLang/Example.jl
    +pkg> develop ~/mypackages/Example
    +pkg> develop --local Example
    +
    +
    + + free + + — + REPL command +
    +
    free pkg[=uuid] ...
    +free [--all]

    Free pinned packages, which allows it to be upgraded or downgraded again. If the package is checked out (see help develop) then this command makes the package no longer being checked out. Specifying --all will free all dependencies (direct and indirect).

    +
    +
    + + generate + + — + REPL command +
    +
    generate pkgname

    Create a minimal project called pkgname in the current folder. For more featureful package creation, please see PkgTemplates.jl.

    +
    +
    + + pin + + — + REPL command +
    +
    pin pkg[=uuid] ...
    +pin [--all]

    Pin packages to given versions, or the current version if no version is specified. A pinned package has its version fixed and will not be upgraded or downgraded. A pinned package has the symbol next to its version in the status list.. Specifying --all will pin all dependencies (direct and indirect).

    Examples

    pkg> pin Example
    +pkg> pin Example@0.5.0
    +pkg> pin Example=7876af07-990d-54b4-ab0e-23690620f79a@0.5.0
    +pkg> pin --all
    +
    +
    + + remove + + — + REPL command +
    +
    [rm|remove] [-p|--project] pkg[=uuid] ...
    +[rm|remove] [-p|--project] [--all]

    Remove package pkg from the project file. Since the name pkg can only refer to one package in a project this is unambiguous, but you can specify a uuid anyway, and the command is ignored, with a warning, if package name and UUID do not match. When a package is removed from the project file, it may still remain in the manifest if it is required by some other package in the project. Project mode operation is the default, so passing -p or --project is optional unless it is preceded by the -m or --manifest options at some earlier point. All packages can be removed by passing --all.

    [rm|remove] [-m|--manifest] pkg[=uuid] ...
    +[rm|remove] [-m|--manifest] [--all]

    Remove package pkg from the manifest file. If the name pkg refers to multiple packages in the manifest, uuid disambiguates it. Removing a package from the manifest forces the removal of all packages that depend on it, as well as any no-longer-necessary manifest packages due to project package removals. All packages can be removed by passing --all.

    +
    +
    + + test + + — + REPL command +
    +
    test [--coverage] pkg[=uuid] ...

    Run the tests for package pkg. This is done by running the file test/runtests.jl in the package directory. The option --coverage can be used to run the tests with coverage enabled. The startup.jl file is disabled during testing unless julia is started with --startup-file=yes.

    +
    +
    + + update + + — + REPL command +
    +
    [up|update] [-p|--project]  [opts] pkg[=uuid] [@version] ...
    +[up|update] [-m|--manifest] [opts] pkg[=uuid] [@version] ...
    +
    +opts: --major | --minor | --patch | --fixed
    +      --preserve=<all/direct/none>

    Update pkg within the constraints of the indicated version specifications. These specifications are of the form @1, @1.2 or @1.2.3, allowing any version with a prefix that matches, or ranges thereof, such as @1.2-3.4.5. In --project mode, package specifications only match project packages, while in --manifest mode they match any manifest package. Bound level options force the following packages to be upgraded only within the current major, minor, patch version; if the --fixed upgrade level is given, then the following packages will not be upgraded at all.

    After any package updates the project will be precompiled. For more information see pkg> ?precompile.

    +

    registry commands

    +
    + + registry add + + — + REPL command +
    +
    registry add reg...

    Add package registries reg... to the user depot. Without arguments it adds known registries, i.e. the General registry and registries served by the configured package server.

    Examples

    pkg> registry add General
    +pkg> registry add https://www.my-custom-registry.com
    +pkg> registry add
    +
    +
    + + registry remove + + — + REPL command +
    +
    registry [rm|remove] reg...

    Remove package registries reg....

    Examples

    pkg> registry [rm|remove] General
    +
    +
    + + registry status + + — + REPL command +
    +
    registry [st|status]

    Display information about installed registries.

    Examples

    pkg> registry status
    +
    +
    + + registry update + + — + REPL command +
    +
    registry [up|update]
    +registry [up|update] reg...

    Update package registries reg.... If no registries are specified all registries will be updated.

    Examples

    pkg> registry up
    +pkg> registry up General
    +

    Other commands

    +
    + + activate + + — + REPL command +
    +
    activate
    +activate [--shared] path
    +activate --temp

    Activate the environment at the given path, or use the first project found in LOAD_PATH if no path is specified. The active environment is the environment that is modified by executing package commands. When the option --shared is given, path will be assumed to be a directory name and searched for in the environments folders of the depots in the depot stack. In case no such environment exists in any of the depots, it will be placed in the first depot of the stack. Use the --temp option to create temporary environments which are removed when the julia process is exited.

    +
    +
    + + gc + + — + REPL command +
    +
    gc [-v|--verbose] [--all]

    Free disk space by garbage collecting packages not used for a significant time. The --all option will garbage collect all packages which can not be immediately reached from any existing project. Use verbose mode for detailed output.

    +
    +
    + + help + + — + REPL command +
    +
    [?|help]

    List available commands along with short descriptions.

    [?|help] cmd

    If cmd is a partial command, display help for all subcommands. If cmd is a full command, display help for cmd.

    +
    +
    + + instantiate + + — + REPL command +
    +
    instantiate [-v|--verbose]
    +instantiate [-v|--verbose] [-m|--manifest]
    +instantiate [-v|--verbose] [-p|--project]

    Download all the dependencies for the current project at the version given by the project's manifest. If no manifest exists or the --project option is given, resolve and download the dependencies compatible with the project.

    After packages have been installed the project will be precompiled. For more information see pkg> ?precompile.

    +
    +
    + + precompile + + — + REPL command +
    +
    precompile
    +precompile pkgs...

    Precompile all or specified dependencies of the project in parallel. The startup.jl file is disabled during precompilation unless julia is started with --startup-file=yes.

    Errors will only throw when precompiling the top-level dependencies, given that not all manifest dependencies may be loaded by the top-level dependencies on the given system.

    This method is called automatically after any Pkg action that changes the manifest. Any packages that have previously errored during precompilation won't be retried in auto mode until they have changed. To disable automatic precompilation set the environment variable JULIA_PKG_PRECOMPILE_AUTO=0. To manually control the number of tasks used set the environment variable JULIA_NUM_PRECOMPILE_TASKS.

    +
    +
    + + resolve + + — + REPL command +
    +
    resolve

    Resolve the project i.e. run package resolution and update the Manifest. This is useful in case the dependencies of developed packages have changed causing the current Manifest to be out of sync.

    +
    +
    + + status + + — + REPL command +
    +
    [st|status] [-d|--diff] [-o|--outdated] [pkgs...]
    +[st|status] [-d|--diff] [-o|--outdated] [-p|--project] [pkgs...]
    +[st|status] [-d|--diff] [-o|--outdated] [-m|--manifest] [pkgs...]
    +[st|status] [-d|--diff] [-e|--extensions] [-p|--project] [pkgs...]
    +[st|status] [-d|--diff] [-e|--extensions] [-m|--manifest] [pkgs...]
    +[st|status] [-c|--compat] [pkgs...]

    Show the status of the current environment. Packages marked with have new versions that may be installed, e.g. via pkg> up. Those marked with have new versions available, but cannot be installed due to compatibility constraints. To see why use pkg> status --outdated which shows any packages that are not at their latest version and if any packages are holding them back.

    Use pkg> status --extensions to show dependencies with extensions and what extension dependencies of those that are currently loaded.

    In --project mode (default), the status of the project file is summarized. In --manifest mode the output also includes the recursive dependencies of added packages given in the manifest. If there are any packages listed as arguments the output will be limited to those packages. The --diff option will, if the environment is in a git repository, limit the output to the difference as compared to the last git commit. The --compat option alone shows project compat entries.

    Julia 1.8

    The and indicators were added in Julia 1.8. The --outdated and --compat options require at least Julia 1.8.

    +
    diff --git a/previews/PR3585/search/index.html b/previews/PR3585/search/index.html new file mode 100644 index 0000000000..9c3657e6d7 --- /dev/null +++ b/previews/PR3585/search/index.html @@ -0,0 +1,2 @@ + +Search · Pkg.jl

    Loading search...

      diff --git a/previews/PR3585/search_index.js b/previews/PR3585/search_index.js new file mode 100644 index 0000000000..4c78d153d7 --- /dev/null +++ b/previews/PR3585/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"basedocs/","page":"Pkg","title":"Pkg","text":"EditURL = \"https://github.com/JuliaLang/Pkg.jl/blob/master/docs/src/basedocs.md\"","category":"page"},{"location":"basedocs/#Pkg","page":"Pkg","title":"Pkg","text":"","category":"section"},{"location":"basedocs/","page":"Pkg","title":"Pkg","text":"Pkg is Julia's builtin package manager, and handles operations such as installing, updating and removing packages.","category":"page"},{"location":"basedocs/","page":"Pkg","title":"Pkg","text":"note: Note\nWhat follows is a very brief introduction to Pkg. For more information on Project.toml files, Manifest.toml files, package version compatibility ([compat]), environments, registries, etc., it is highly recommended to read the full manual, which is available here: https://pkgdocs.julialang.org.","category":"page"},{"location":"basedocs/","page":"Pkg","title":"Pkg","text":"import Markdown\nfile = joinpath(Sys.STDLIB, \"Pkg\", \"docs\", \"src\", \"getting-started.md\")\nstr = read(file, String)\nstr = replace(str, r\"^#.*$\"m => \"\")\nstr = replace(str, \"[API Reference](@ref)\" => \"[API Reference](https://pkgdocs.julialang.org/v1/api/)\")\nstr = replace(str, \"(@ref Working-with-Environments)\" => \"(https://pkgdocs.julialang.org/v1/environments/)\")\nstr = replace(str, \"(@ref Managing-Packages)\" => \"(https://pkgdocs.julialang.org/v1/managing-packages/)\")\nMarkdown.parse(str)","category":"page"},{"location":"artifacts/#Artifacts","page":"8. Artifacts","title":"8. Artifacts","text":"","category":"section"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"Pkg can install and manage containers of data that are not Julia packages. These containers can contain platform-specific binaries, datasets, text, or any other kind of data that would be convenient to place within an immutable, life-cycled datastore. These containers, (called \"Artifacts\") can be created locally, hosted anywhere, and automatically downloaded and unpacked upon installation of your Julia package. This mechanism is also used to provide the binary dependencies for packages built with BinaryBuilder.jl.","category":"page"},{"location":"artifacts/#Basic-Usage","page":"8. Artifacts","title":"Basic Usage","text":"","category":"section"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"Pkg artifacts are declared in an Artifacts.toml file, which can be placed in your current directory or in the root of your package. Currently, Pkg supports downloading of tarfiles (which can be compressed) from a URL. Following is a minimal Artifacts.toml file which will permit the downloading of a socrates.tar.gz file from github.com. In this example, a single artifact, given the name socrates, is defined.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"# a simple Artifacts.toml file\n[socrates]\ngit-tree-sha1 = \"43563e7631a7eafae1f9f8d9d332e3de44ad7239\"\n\n [[socrates.download]]\n url = \"https://github.com/staticfloat/small_bin/raw/master/socrates.tar.gz\"\n sha256 = \"e65d2f13f2085f2c279830e863292312a72930fee5ba3c792b14c33ce5c5cc58\"","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"If this Artifacts.toml file is placed in your current directory, then socrates.tar.gz can be downloaded, unpacked and used with artifact\"socrates\". Since this tarball contains a folder bin, and a text file named socrates within that folder, we could access the content of that file as follows.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"using Pkg.Artifacts\n\nrootpath = artifact\"socrates\"\nopen(joinpath(rootpath, \"bin\", \"socrates\")) do file\n println(read(file, String))\nend","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"If you have an existing tarball that is accessible via a url, it could also be accessed in this manner. To create the Artifacts.toml you must compute two hashes: the sha256 hash of the download file, and the git-tree-sha1 of the unpacked content. These can be computed as follows.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"using Tar, Inflate, SHA\n\nfilename = \"socrates.tar.gz\"\nprintln(\"sha256: \", bytes2hex(open(sha256, filename)))\nprintln(\"git-tree-sha1: \", Tar.tree_hash(IOBuffer(inflate_gzip(filename))))","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"To access this artifact from within a package you create, place the Artifacts.toml at the root of your package, adjacent to Project.toml. Then, make sure to add Pkg in your deps and set julia = \"1.3\" or higher in your compat section.","category":"page"},{"location":"artifacts/#Artifacts.toml-files","page":"8. Artifacts","title":"Artifacts.toml files","text":"","category":"section"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"Pkg provides an API for working with artifacts, as well as a TOML file format for recording artifact usage in your packages, and to automate downloading of artifacts at package install time. Artifacts can always be referred to by content hash, but are typically accessed by a name that is bound to a content hash in an Artifacts.toml file that lives in a project's source tree.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"note: Note\nIt is possible to use the alternate name JuliaArtifacts.toml, similar to how it is possible to use JuliaProject.toml and JuliaManifest.toml instead of Project.toml and Manifest.toml, respectively.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"An example Artifacts.toml file is shown here:","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"# Example Artifacts.toml file\n[socrates]\ngit-tree-sha1 = \"43563e7631a7eafae1f9f8d9d332e3de44ad7239\"\nlazy = true\n\n [[socrates.download]]\n url = \"https://github.com/staticfloat/small_bin/raw/master/socrates.tar.gz\"\n sha256 = \"e65d2f13f2085f2c279830e863292312a72930fee5ba3c792b14c33ce5c5cc58\"\n\n [[socrates.download]]\n url = \"https://github.com/staticfloat/small_bin/raw/master/socrates.tar.bz2\"\n sha256 = \"13fc17b97be41763b02cbb80e9d048302cec3bd3d446c2ed6e8210bddcd3ac76\"\n\n[[c_simple]]\narch = \"x86_64\"\ngit-tree-sha1 = \"4bdf4556050cb55b67b211d4e78009aaec378cbc\"\nlibc = \"musl\"\nos = \"linux\"\n\n [[c_simple.download]]\n sha256 = \"411d6befd49942826ea1e59041bddf7dbb72fb871bb03165bf4e164b13ab5130\"\n url = \"https://github.com/JuliaBinaryWrappers/c_simple_jll.jl/releases/download/c_simple+v1.2.3+0/c_simple.v1.2.3.x86_64-linux-musl.tar.gz\"\n\n[[c_simple]]\narch = \"x86_64\"\ngit-tree-sha1 = \"51264dbc770cd38aeb15f93536c29dc38c727e4c\"\nos = \"macos\"\n\n [[c_simple.download]]\n sha256 = \"6c17d9e1dc95ba86ec7462637824afe7a25b8509cc51453f0eb86eda03ed4dc3\"\n url = \"https://github.com/JuliaBinaryWrappers/c_simple_jll.jl/releases/download/c_simple+v1.2.3+0/c_simple.v1.2.3.x86_64-apple-darwin14.tar.gz\"\n\n[processed_output]\ngit-tree-sha1 = \"1c223e66f1a8e0fae1f9fcb9d3f2e3ce48a82200\"","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"This Artifacts.toml binds three artifacts; one named socrates, one named c_simple and one named processed_output. The single required piece of information for an artifact is its git-tree-sha1. Because artifacts are addressed only by their content hash, the purpose of an Artifacts.toml file is to provide metadata about these artifacts, such as binding a human-readable name to a content hash, providing information about where an artifact may be downloaded from, or even binding a single name to multiple hashes, keyed by platform-specific constraints such as operating system or libgfortran version.","category":"page"},{"location":"artifacts/#Artifact-types-and-properties","page":"8. Artifacts","title":"Artifact types and properties","text":"","category":"section"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"In the above example, the socrates artifact showcases a platform-independent artifact with multiple download locations. When downloading and installing the socrates artifact, URLs will be attempted in order until one succeeds. The socrates artifact is marked as lazy, which means that it will not be automatically downloaded when the containing package is installed, but rather will be downloaded on-demand when the package first attempts to use it.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"The c_simple artifact showcases a platform-dependent artifact, where each entry in the c_simple array contains keys that help the calling package choose the appropriate download based on the particulars of the host machine. Note that each artifact contains both a git-tree-sha1 and a sha256 for each download entry. This is to ensure that the downloaded tarball is secure before attempting to unpack it, as well as enforcing that all tarballs must expand to the same overall tree hash.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"The processed_output artifact contains no download stanza, and so cannot be installed. An artifact such as this would be the result of code that was previously run, generating a new artifact and binding the resultant hash to a name within this project.","category":"page"},{"location":"artifacts/#Using-Artifacts","page":"8. Artifacts","title":"Using Artifacts","text":"","category":"section"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"Artifacts can be manipulated using convenient APIs exposed from the Pkg.Artifacts namespace. As a motivating example, let us imagine that we are writing a package that needs to load the Iris machine learning dataset. While we could just download the dataset during a build step into the package directory, and many packages currently do precisely this, that has some significant drawbacks:","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"First, it modifies the package directory, making package installation stateful, which we want to avoid. In the future, we would like to reach the point where packages can be installed completely read-only, instead of being able to modify themselves after installation.\nSecond, the downloaded data is not shared across different versions of our package. If we have three different versions of the package installed for use by various projects, then we need three different copies of the data, even if it hasn't changed between those versions. Moreover, each time we upgrade or downgrade the package unless we do something clever (and probably brittle), we have to download the data again.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"With artifacts, we will instead check to see if our iris artifact already exists on-disk and only if it doesn't will we download and install it, after which we can bind the result into our Artifacts.toml file:","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"using Pkg.Artifacts\n\n# This is the path to the Artifacts.toml we will manipulate\nartifact_toml = joinpath(@__DIR__, \"Artifacts.toml\")\n\n# Query the `Artifacts.toml` file for the hash bound to the name \"iris\"\n# (returns `nothing` if no such binding exists)\niris_hash = artifact_hash(\"iris\", artifact_toml)\n\n# If the name was not bound, or the hash it was bound to does not exist, create it!\nif iris_hash == nothing || !artifact_exists(iris_hash)\n # create_artifact() returns the content-hash of the artifact directory once we're finished creating it\n iris_hash = create_artifact() do artifact_dir\n # We create the artifact by simply downloading a few files into the new artifact directory\n iris_url_base = \"https://archive.ics.uci.edu/ml/machine-learning-databases/iris\"\n download(\"$(iris_url_base)/iris.data\", joinpath(artifact_dir, \"iris.csv\"))\n download(\"$(iris_url_base)/bezdekIris.data\", joinpath(artifact_dir, \"bezdekIris.csv\"))\n download(\"$(iris_url_base)/iris.names\", joinpath(artifact_dir, \"iris.names\"))\n end\n\n # Now bind that hash within our `Artifacts.toml`. `force = true` means that if it already exists,\n # just overwrite with the new content-hash. Unless the source files change, we do not expect\n # the content hash to change, so this should not cause unnecessary version control churn.\n bind_artifact!(artifact_toml, \"iris\", iris_hash)\nend\n\n# Get the path of the iris dataset, either newly created or previously generated.\n# this should be something like `~/.julia/artifacts/dbd04e28be047a54fbe9bf67e934be5b5e0d357a`\niris_dataset_path = artifact_path(iris_hash)","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"For the specific use case of using artifacts that were previously bound, we have the shorthand notation artifact\"name\" which will automatically search for the Artifacts.toml file contained within the current package, look up the given artifact by name, install it if it is not yet installed, then return the path to that given artifact. An example of this shorthand notation is given below:","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"using Pkg.Artifacts\n\n# For this to work, an `Artifacts.toml` file must be in the current working directory\n# (or in the root of the current package) and must define a mapping for the \"iris\"\n# artifact. If it does not exist on-disk, it will be downloaded.\niris_dataset_path = artifact\"iris\"","category":"page"},{"location":"artifacts/#The-Pkg.Artifacts-API","page":"8. Artifacts","title":"The Pkg.Artifacts API","text":"","category":"section"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"The Artifacts API is broken up into three levels: hash-aware functions, name-aware functions and utility functions.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"Hash-aware functions deal with content-hashes and essentially nothing else. These methods allow you to query whether an artifact exists, what its path is, verify that an artifact satisfies its content hash on-disk, etc. Hash-aware functions include: artifact_exists(), artifact_path(), remove_artifact(), verify_artifact() and archive_artifact(). Note that in general you should not use remove_artifact() and should instead use Pkg.gc() to cleanup artifact installations.\nName-aware functions deal with bound names within an Artifacts.toml file, and as such, typically require both a path to an Artifacts.toml file as well as the artifact name. Name-aware functions include: artifact_meta(), artifact_hash(), bind_artifact!(), unbind_artifact!(), download_artifact() and ensure_artifact_installed().\nUtility functions deal with miscellaneous aspects of artifact life, such as create_artifact(), ensure_all_artifacts_installed(), and even the @artifact_str string macro.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"For a full listing of docstrings and methods, see the Artifacts Reference section.","category":"page"},{"location":"artifacts/#Overriding-artifact-locations","page":"8. Artifacts","title":"Overriding artifact locations","text":"","category":"section"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"It is occasionally necessary to be able to override the location and content of an artifact. A common use case is a computing environment where certain versions of a binary dependency must be used, regardless of what version of this dependency a package was published with. While a typical Julia configuration would download, unpack and link against a generic library, a system administrator may wish to disable this and instead use a library already installed on the local machine. To enable this, Pkg supports a per-depot Overrides.toml file placed within the artifacts depot directory (e.g. ~/.julia/artifacts/Overrides.toml for the default user depot) that can override the location of an artifact either by content-hash or by package UUID and bound artifact name. Additionally, the destination location can be either an absolute path, or a replacement artifact content hash. This allows sysadmins to create their own artifacts which they can then use by overriding other packages to use the new artifact.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"# Override single hash to an absolute path\n78f35e74ff113f02274ce60dab6e92b4546ef806 = \"/path/to/replacement\"\n\n# Override single hash to new artifact content-hash\n683942669b4639019be7631caa28c38f3e1924fe = \"d826e316b6c0d29d9ad0875af6ca63bf67ed38c3\"\n\n# Override package bindings by specifying the package UUID and bound artifact name\n# For demonstration purposes we assume this package is called `Foo`\n[d57dbccd-ca19-4d82-b9b8-9d660942965b]\nlibfoo = \"/path/to/libfoo\"\nlibbar = \"683942669b4639019be7631caa28c38f3e1924fe\"","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"Due to the layered nature of Pkg depots, multiple Overrides.toml files may be in effect at once. This allows the \"inner\" Overrides.toml files to override the overrides placed within the \"outer\" Overrides.toml files. To remove an override and re-enable default location logic for an artifact, insert an entry mapping to the empty string:","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"78f35e74ff113f02274ce60dab6e92b4546ef806 = \"/path/to/new/replacement\"\n683942669b4639019be7631caa28c38f3e1924fe = \"\"\n\n[d57dbccd-ca19-4d82-b9b8-9d660942965b]\nlibfoo = \"\"","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"If the two Overrides.toml snippets as given above are layered on top of each other, the end result will be mapping the content-hash 78f35e74ff113f02274ce60dab6e92b4546ef806 to \"/path/to/new/replacement\", and mapping Foo.libbar to the artifact identified by the content-hash 683942669b4639019be7631caa28c38f3e1924fe. Note that while that hash was previously overridden, it is no longer, and therefore Foo.libbar will look directly at locations such as ~/.julia/artifacts/683942669b4639019be7631caa28c38f3e1924fe.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"Most methods that are affected by overrides can ignore overrides by setting honor_overrides=false as a keyword argument within them. For UUID/name-based overrides to work, Artifacts.toml files must be loaded with the knowledge of the UUID of the loading package. This is deduced automatically by the artifacts\"\" string macro, however, if you are for some reason manually using the Pkg.Artifacts API within your package and you wish to honor overrides, you must provide the package UUID to API calls like artifact_meta() and ensure_artifact_installed() via the pkg_uuid keyword argument.","category":"page"},{"location":"artifacts/#Extending-Platform-Selection","page":"8. Artifacts","title":"Extending Platform Selection","text":"","category":"section"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"compat: Julia 1.7\nPkg's extended platform selection requires at least Julia 1.7, and is considered experimental.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"New in Julia 1.6, Platform objects can have extended attributes applied to them, allowing artifacts to be tagged with things such as CUDA driver version compatibility, microarchitectural compatibility, julia version compatibility and more! Note that this feature is considered experimental and may change in the future. If you as a package developer find yourself needing this feature, please get in contact with us so it can evolve for the benefit of the whole ecosystem. In order to support artifact selection at Pkg.add() time, Pkg will run the specially-named file /.pkg/select_artifacts.jl, passing the current platform triplet as the first argument. This artifact selection script should print a TOML-serialized dictionary representing the artifacts that this package needs according to the given platform, and perform any inspection of the system as necessary to auto-detect platform capabilities if they are not explicitly provided by the given platform triplet. The format of the dictionary should match that returned from Artifacts.select_downloadable_artifacts(), and indeed most packages should simply call that function with an augmented Platform object. An example artifact selection hook definition might look like the following, split across two files:","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"# .pkg/platform_augmentation.jl\nusing Libdl, Base.BinaryPlatforms\nfunction augment_platform!(p::Platform)\n # If this platform object already has a `cuda` tag set, don't augment\n if haskey(p, \"cuda\")\n return p\n end\n\n # Open libcuda explicitly, so it gets `dlclose()`'ed after we're done\n dlopen(\"libcuda\") do lib\n # find symbol to ask for driver version; if we can't find it, just silently continue\n cuDriverGetVersion = dlsym(lib, \"cuDriverGetVersion\"; throw_error=false)\n if cuDriverGetVersion !== nothing\n # Interrogate CUDA driver for driver version:\n driverVersion = Ref{Cint}()\n ccall(cuDriverGetVersion, UInt32, (Ptr{Cint},), driverVersion)\n\n # Store only the major version\n p[\"cuda\"] = div(driverVersion, 1000)\n end\n end\n\n # Return possibly-altered `Platform` object\n return p\nend","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"using TOML, Artifacts, Base.BinaryPlatforms\ninclude(\"./platform_augmentation.jl\")\nartifacts_toml = joinpath(dirname(@__DIR__), \"Artifacts.toml\")\n\n# Get \"target triplet\" from ARGS, if given (defaulting to the host triplet otherwise)\ntarget_triplet = get(ARGS, 1, Base.BinaryPlatforms.host_triplet())\n\n# Augment this platform object with any special tags we require\nplatform = augment_platform!(HostPlatform(parse(Platform, target_triplet)))\n\n# Select all downloadable artifacts that match that platform\nartifacts = select_downloadable_artifacts(artifacts_toml; platform)\n\n# Output the result to `stdout` as a TOML dictionary\nTOML.print(stdout, artifacts)","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"In this hook definition, our platform augmentation routine opens a system library (libcuda), searches it for a symbol to give us the CUDA driver version, then embeds the major version of that version number into the cuda property of the Platform object we are augmenting. While it is not critical for this code to actually attempt to close the loaded library (as it will most likely be opened again by the CUDA package immediately after the package operations are completed) it is best practice to make hooks as lightweight and transparent as possible, as they may be used by other Pkg utilities in the future. In your own package, you should also use augmented platform objects when using the @artifact_str macro, as follows:","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"include(\"../.pkg/platform_augmentation.jl\")\n\nfunction __init__()\n p = augment_platform!(HostPlatform())\n global my_artifact_dir = @artifact_str(\"MyArtifact\", p)\nend","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"This ensures that the same artifact is used by your code as Pkg attempted to install.","category":"page"},{"location":"artifacts/","page":"8. Artifacts","title":"8. Artifacts","text":"Artifact selection hooks are only allowed to use Base, Artifacts, Libdl, and TOML. They are not allowed to use any other standard libraries, and they are not allowed to use any packages (including the package to which they belong).","category":"page"},{"location":"toml-files/#Project-and-Manifest","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Two files that are central to Pkg are Project.toml and Manifest.toml. Project.toml and Manifest.toml are written in TOML (hence the .toml extension) and include information about dependencies, versions, package names, UUIDs etc.","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"note: Note\nThe Project.toml and Manifest.toml files are not only used by the package manager; they are also used by Julia's code loading, and determine e.g. what using Example should do. For more details see the section about Code Loading in the Julia manual.","category":"page"},{"location":"toml-files/#Project.toml","page":"10. Project.toml and Manifest.toml","title":"Project.toml","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The project file describes the project on a high level, for example, the package/project dependencies and compatibility constraints are listed in the project file. The file entries are described below.","category":"page"},{"location":"toml-files/#The-authors-field","page":"10. Project.toml and Manifest.toml","title":"The authors field","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"For a package, the optional authors field is a list of strings describing the package authors, in the form NAME . For example:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"authors = [\"Some One \",\n \"Foo Bar \"]","category":"page"},{"location":"toml-files/#The-name-field","page":"10. Project.toml and Manifest.toml","title":"The name field","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The name of the package/project is determined by the name field, for example:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"name = \"Example\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The name must be a valid identifier (a sequence of Unicode characters that does not start with a number and is neither true nor false). For packages, it is recommended to follow the package naming guidelines. The name field is mandatory for packages.","category":"page"},{"location":"toml-files/#The-uuid-field","page":"10. Project.toml and Manifest.toml","title":"The uuid field","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"uuid is a string with a universally unique identifier for the package/project, for example:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"uuid = \"7876af07-990d-54b4-ab0e-23690620f79a\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The uuid field is mandatory for packages.","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"note: Note\nIt is recommended that UUIDs.uuid4() is used to generate random UUIDs.","category":"page"},{"location":"toml-files/#The-version-field","page":"10. Project.toml and Manifest.toml","title":"The version field","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"version is a string with the version number for the package/project. It should consist of three numbers, major version, minor version, and patch number, separated with a ., for example:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"version = \"1.2.5\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Julia uses Semantic Versioning (SemVer) and the version field should follow SemVer. The basic rules are:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Before 1.0.0, anything goes, but when you make breaking changes the minor version should be incremented.\nAfter 1.0.0 only make breaking changes when incrementing the major version.\nAfter 1.0.0 no new public API should be added without incrementing the minor version. This includes, in particular, new types, functions, methods, and method overloads, from Base or other packages.","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"See also the section on Compatibility.","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Note that Pkg.jl deviates from the SemVer specification when it comes to versions pre-1.0.0. See the section on pre-1.0 behavior for more details.","category":"page"},{"location":"toml-files/#The-[deps]-section","page":"10. Project.toml and Manifest.toml","title":"The [deps] section","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"All dependencies of the package/project are listed in the [deps] section. Each dependency is listed as a name-uuid pair, for example:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[deps]\nExample = \"7876af07-990d-54b4-ab0e-23690620f79a\"\nTest = \"8dfed614-e22c-5e08-85e1-65c5234f0b40\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Typically it is not needed to manually add entries to the [deps] section; this is instead handled by Pkg operations such as add.","category":"page"},{"location":"toml-files/#The-[compat]-section","page":"10. Project.toml and Manifest.toml","title":"The [compat] section","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Compatibility constraints for the dependencies listed under [deps] can be listed in the [compat] section. Example:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[deps]\nExample = \"7876af07-990d-54b4-ab0e-23690620f79a\"\n\n[compat]\nExample = \"1.2\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The Compatibility section describes the different possible compatibility constraints in detail. It is also possible to list constraints on julia itself, although julia is not listed as a dependency in the [deps] section:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[compat]\njulia = \"1.1\"","category":"page"},{"location":"toml-files/#Manifest.toml","page":"10. Project.toml and Manifest.toml","title":"Manifest.toml","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The manifest file is an absolute record of the state of the packages in the environment. It includes exact information about (direct and indirect) dependencies of the project. Given a Project.toml + Manifest.toml pair, it is possible to instantiate the exact same package environment, which is very useful for reproducibility. For the details, see Pkg.instantiate.","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"note: Note\nThe Manifest.toml file is generated and maintained by Pkg and, in general, this file should never be modified manually.","category":"page"},{"location":"toml-files/#Manifest.toml-entries","page":"10. Project.toml and Manifest.toml","title":"Manifest.toml entries","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"There are three top-level entries in the manifest which could look like this:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"julia_version = \"1.8.2\"\nmanifest_format = \"2.0\"\nproject_hash = \"4d9d5b552a1236d3c1171abf88d59da3aaac328a\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"This shows the Julia version the manifest was created on, the \"format\" of the manifest and a hash of the project file, so that it is possible to see when the manifest is stale compared to the project file.","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Each dependency has its own section in the manifest file, and its content varies depending on how the dependency was added to the environment. Every dependency section includes a combination of the following entries:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"uuid: the UUID for the dependency, for example uuid = \"7876af07-990d-54b4-ab0e-23690620f79a\".\ndeps: a vector listing the dependencies of the dependency, for example deps = [\"Example\", \"JSON\"].\nversion: a version number, for example version = \"1.2.6\".\npath: a file path to the source code, for example path = /home/user/Example.\nrepo-url: a URL to the repository where the source code was found, for example repo-url = \"https://github.com/JuliaLang/Example.jl.git\".\nrepo-rev: a git revision, for example a branch repo-rev = \"master\" or a commit repo-rev = \"66607a62a83cb07ab18c0b35c038fcd62987c9b1\".\ngit-tree-sha1: a content hash of the source tree, for example git-tree-sha1 = \"ca3820cc4e66f473467d912c4b2b3ae5dc968444\".","category":"page"},{"location":"toml-files/#Added-package","page":"10. Project.toml and Manifest.toml","title":"Added package","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"When a package is added from a package registry, for example by invoking pkg> add Example or with a specific version pkg> add Example@1.2, the resulting Manifest.toml entry looks like:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[[deps.Example]]\ndeps = [\"DependencyA\", \"DependencyB\"]\ngit-tree-sha1 = \"8eb7b4d4ca487caade9ba3e85932e28ce6d6e1f8\"\nuuid = \"7876af07-990d-54b4-ab0e-23690620f79a\"\nversion = \"1.2.3\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Note, in particular, that no repo-url is present, since that information is included in the registry where this package was found.","category":"page"},{"location":"toml-files/#Added-package-by-branch","page":"10. Project.toml and Manifest.toml","title":"Added package by branch","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The resulting dependency section when adding a package specified by a branch, e.g. pkg> add Example#master or pkg> add https://github.com/JuliaLang/Example.jl.git, looks like:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[[deps.Example]]\ndeps = [\"DependencyA\", \"DependencyB\"]\ngit-tree-sha1 = \"54c7a512469a38312a058ec9f429e1db1f074474\"\nrepo-rev = \"master\"\nrepo-url = \"https://github.com/JuliaLang/Example.jl.git\"\nuuid = \"7876af07-990d-54b4-ab0e-23690620f79a\"\nversion = \"1.2.4\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Note that both the branch we are tracking (master) and the remote repository url (\"https://github.com/JuliaLang/Example.jl.git\") are stored in the manifest.","category":"page"},{"location":"toml-files/#Added-package-by-commit","page":"10. Project.toml and Manifest.toml","title":"Added package by commit","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The resulting dependency section when adding a package specified by a commit, e.g. pkg> add Example#cf6ba6cc0be0bb5f56840188563579d67048be34, looks like:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[[deps.Example]]\ndeps = [\"DependencyA\", \"DependencyB\"]\ngit-tree-sha1 = \"54c7a512469a38312a058ec9f429e1db1f074474\"\nrepo-rev = \"cf6ba6cc0be0bb5f56840188563579d67048be34\"\nrepo-url = \"https://github.com/JuliaLang/Example.jl.git\"\nuuid = \"7876af07-990d-54b4-ab0e-23690620f79a\"\nversion = \"1.2.4\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The only difference from tracking a branch is the content of repo-rev.","category":"page"},{"location":"toml-files/#Developed-package","page":"10. Project.toml and Manifest.toml","title":"Developed package","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The resulting dependency section when adding a package with develop, e.g. pkg> develop Example or pkg> develop /path/to/local/folder/Example, looks like:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[[deps.Example]]\ndeps = [\"DependencyA\", \"DependencyB\"]\npath = \"/home/user/.julia/dev/Example/\"\nuuid = \"7876af07-990d-54b4-ab0e-23690620f79a\"\nversion = \"1.2.4\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Note that the path to the source code is included, and changes made to that source tree is directly reflected.","category":"page"},{"location":"toml-files/#Pinned-package","page":"10. Project.toml and Manifest.toml","title":"Pinned package","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Pinned packages are also recorded in the manifest file; the resulting dependency section e.g. pkg> add Example; pin Example looks like:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[[deps.Example]]\ndeps = [\"DependencyA\", \"DependencyB\"]\ngit-tree-sha1 = \"54c7a512469a38312a058ec9f429e1db1f074474\"\npinned = true\nuuid = \"7876af07-990d-54b4-ab0e-23690620f79a\"\nversion = \"1.2.4\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"The only difference is the addition of the pinned = true entry.","category":"page"},{"location":"toml-files/#Multiple-packages-with-the-same-name","page":"10. Project.toml and Manifest.toml","title":"Multiple packages with the same name","text":"","category":"section"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"Julia differentiates packages based on UUID, which means that the name alone is not enough to identify a package. It is possible to have multiple packages in the same environment with the same name, but with different UUID. In such a situation the Manifest.toml file looks a bit different. Consider for example the situation where you have added A and B to your environment, and the Project.toml file looks as follows:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[deps]\nA = \"ead4f63c-334e-11e9-00e6-e7f0a5f21b60\"\nB = \"edca9bc6-334e-11e9-3554-9595dbb4349c\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"If A now depends on B = \"f41f7b98-334e-11e9-1257-49272045fb24\", i.e. another package named B there will be two different B packages in the Manifest.toml file. In this case, the full Manifest.toml file, with git-tree-sha1 and version fields removed for clarity, looks like this:","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"[[deps.A]]\nuuid = \"ead4f63c-334e-11e9-00e6-e7f0a5f21b60\"\n\n [deps.A.deps]\n B = \"f41f7b98-334e-11e9-1257-49272045fb24\"\n\n[[deps.B]]\nuuid = \"f41f7b98-334e-11e9-1257-49272045fb24\"\n[[deps.B]]\nuuid = \"edca9bc6-334e-11e9-3554-9595dbb4349c\"","category":"page"},{"location":"toml-files/","page":"10. Project.toml and Manifest.toml","title":"10. Project.toml and Manifest.toml","text":"There is now an array of the two B packages, and the [deps] section for A has been expanded to be explicit about which B package A depends on.","category":"page"},{"location":"compatibility/#Compatibility","page":"6. Compatibility","title":"6. Compatibility","text":"","category":"section"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Compatibility refers to the ability to restrict the versions of the dependencies that your project is compatible with. If the compatibility for a dependency is not given, the project is assumed to be compatible with all versions of that dependency.","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Compatibility for a dependency is entered in the Project.toml file as for example:","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\njulia = \"1.6\"\nExample = \"0.5\"","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"After a compatibility entry is put into the project file, up can be used to apply it.","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"The format of the version specifier is described in detail below.","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"info: Info\nUse the command compat to edit the compat entries in the Pkg REPL, or manually edit the project file.","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"info: Info\nThe rules below apply to the Project.toml file; for registries, see Registry Compat.toml.","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"info: Info\nNote that registration into Julia's General Registry requires each dependency to have a [compat] entry with an upper bound.","category":"page"},{"location":"compatibility/#Version-specifier-format","page":"6. Compatibility","title":"Version specifier format","text":"","category":"section"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Similar to other package managers, the Julia package manager respects semantic versioning (semver), with an exception for leading zeros. As an example, a version specifier given as e.g. 1.2.3 is therefore assumed to be compatible with the versions [1.2.3 - 2.0.0) where ) is a non-inclusive upper bound. More specifically, a version specifier is either given as a caret specifier, e.g. ^1.2.3 or as a tilde specifier, e.g. ~1.2.3. Caret specifiers are the default and hence 1.2.3 == ^1.2.3. The difference between a caret and tilde is described in the next section. The union of multiple version specifiers can be formed by comma separating individual version specifiers, e.g.","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nExample = \"1.2, 2\"","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"will result in [1.2.0, 3.0.0). Note leading zeros are treated differently, e.g. Example = \"0.2, 1\" would only result in [0.2.0 - 0.3.0) ∪ [1.0.0 - 2.0.0). See the next section for more information on versions with leading zeros.","category":"page"},{"location":"compatibility/#compat-pre-1.0","page":"6. Compatibility","title":"Behavior of versions with leading zeros (0.0.x and 0.x.y)","text":"","category":"section"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"While the semver specification says that all versions with a major version of 0 (versions before 1.0.0) are incompatible with each other, we have decided to only apply that for when both the major and minor versions are zero. In other words, 0.0.1 and 0.0.2 are considered incompatible. A pre-1.0 version with non-zero minor version (0.a.b with a != 0) is considered compatible with versions with the same minor version and smaller or equal patch versions (0.a.c with c <= b); i.e., the versions 0.2.2 and 0.2.3 are compatible with 0.2.1 and 0.2.0. Versions with a major version of 0 and different minor versions are not considered compatible, so the version 0.3.0 might have breaking changes from 0.2.0. To that end, the [compat] entry:","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nExample = \"0.0.1\"","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"results in a versionbound on Example as [0.0.1, 0.0.2) (which is equivalent to only the version 0.0.1), while the [compat] entry:","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nExample = \"0.2.1\"","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"results in a versionbound on Example as [0.2.1, 0.3.0).","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"In particular, a package may set version = \"0.2.4\" when it has feature additions compared to 0.2.3 as long as it remains backward compatible with 0.2.0. See also The version field.","category":"page"},{"location":"compatibility/#Caret-specifiers","page":"6. Compatibility","title":"Caret specifiers","text":"","category":"section"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"A caret (^) specifier allows upgrade that would be compatible according to semver. This is the default behavior if no specifier is used. An updated dependency is considered compatible if the new version does not modify the left-most non zero digit in the version specifier.","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Some examples are shown below.","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nPkgA = \"^1.2.3\" # [1.2.3, 2.0.0)\nPkgB = \"^1.2\" # [1.2.0, 2.0.0)\nPkgC = \"^1\" # [1.0.0, 2.0.0)\nPkgD = \"^0.2.3\" # [0.2.3, 0.3.0)\nPkgE = \"^0.0.3\" # [0.0.3, 0.0.4)\nPkgF = \"^0.0\" # [0.0.0, 0.1.0)\nPkgG = \"^0\" # [0.0.0, 1.0.0)","category":"page"},{"location":"compatibility/#Tilde-specifiers","page":"6. Compatibility","title":"Tilde specifiers","text":"","category":"section"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"A tilde specifier provides more limited upgrade possibilities. When specifying major, minor and patch versions, or when specifying major and minor versions, only the patch version is allowed to change. If you only specify a major version, then both minor and patch versions are allowed to be upgraded (~1 is thus equivalent to ^1). For example:","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nPkgA = \"~1.2.3\" # [1.2.3, 1.3.0)\nPkgB = \"~1.2\" # [1.2.0, 1.3.0)\nPkgC = \"~1\" # [1.0.0, 2.0.0)\nPkgD = \"~0.2.3\" # [0.2.3, 0.3.0)\nPkgE = \"~0.0.3\" # [0.0.3, 0.0.4)\nPkgF = \"~0.0\" # [0.0.0, 0.1.0)\nPkgG = \"~0\" # [0.0.0, 1.0.0)","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"For all versions with a major version of 0 the tilde and caret specifiers are equivalent.","category":"page"},{"location":"compatibility/#Equality-specifier","page":"6. Compatibility","title":"Equality specifier","text":"","category":"section"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Equality can be used to specify exact versions:","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nPkgA = \"=1.2.3\" # [1.2.3, 1.2.3]\nPkgA = \"=0.10.1, =0.10.3\" # 0.10.1 or 0.10.3","category":"page"},{"location":"compatibility/#Inequality-specifiers","page":"6. Compatibility","title":"Inequality specifiers","text":"","category":"section"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Inequalities can also be used to specify version ranges:","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nPkgB = \">= 1.2.3\" # [1.2.3, ∞)\nPkgC = \"≥ 1.2.3\" # [1.2.3, ∞)\nPkgD = \"< 1.2.3\" # [0.0.0, 1.2.3) = [0.0.0, 1.2.2]","category":"page"},{"location":"compatibility/#Hyphen-specifiers","page":"6. Compatibility","title":"Hyphen specifiers","text":"","category":"section"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Hyphen syntax can also be used to specify version ranges. Make sure that you have a space on both sides of the hyphen.","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nPkgA = \"1.2.3 - 4.5.6\" # [1.2.3, 4.5.6]\nPkgA = \"0.2.3 - 4.5.6\" # [0.2.3, 4.5.6]","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Any unspecified trailing numbers in the first end-point are considered to be zero:","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nPkgA = \"1.2 - 4.5.6\" # [1.2.0, 4.5.6]\nPkgA = \"1 - 4.5.6\" # [1.0.0, 4.5.6]\nPkgA = \"0.2 - 4.5.6\" # [0.2.0, 4.5.6]\nPkgA = \"0.2 - 0.5.6\" # [0.2.0, 0.5.6]","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Any unspecified trailing numbers in the second end-point will be considered to be wildcards:","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nPkgA = \"1.2.3 - 4.5\" # 1.2.3 - 4.5.* = [1.2.3, 4.6.0)\nPkgA = \"1.2.3 - 4\" # 1.2.3 - 4.*.* = [1.2.3, 5.0.0)\nPkgA = \"1.2 - 4.5\" # 1.2.0 - 4.5.* = [1.2.0, 4.6.0)\nPkgA = \"1.2 - 4\" # 1.2.0 - 4.*.* = [1.2.0, 5.0.0)\nPkgA = \"1 - 4.5\" # 1.0.0 - 4.5.* = [1.0.0, 4.6.0)\nPkgA = \"1 - 4\" # 1.0.0 - 4.*.* = [1.0.0, 5.0.0)\nPkgA = \"0.2.3 - 4.5\" # 0.2.3 - 4.5.* = [0.2.3, 4.6.0)\nPkgA = \"0.2.3 - 4\" # 0.2.3 - 4.*.* = [0.2.3, 5.0.0)\nPkgA = \"0.2 - 4.5\" # 0.2.0 - 4.5.* = [0.2.0, 4.6.0)\nPkgA = \"0.2 - 4\" # 0.2.0 - 4.*.* = [0.2.0, 5.0.0)\nPkgA = \"0.2 - 0.5\" # 0.2.0 - 0.5.* = [0.2.0, 0.6.0)\nPkgA = \"0.2 - 0\" # 0.2.0 - 0.*.* = [0.2.0, 1.0.0)","category":"page"},{"location":"compatibility/#Fixing-conflicts","page":"6. Compatibility","title":"Fixing conflicts","text":"","category":"section"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Version conflicts were introduced previously with an example of a conflict arising in a package D used by two other packages, B and C. Our analysis of the error message revealed that B is using an outdated version of D. To fix it, the first thing to try is to pkg> dev B so that you can modify B and its compatibility requirements. If you open its Project.toml file in an editor, you would probably notice something like","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nD = \"0.1\"","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"Usually the first step is to modify this to something like","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"[compat]\nD = \"0.1, 0.2\"","category":"page"},{"location":"compatibility/","page":"6. Compatibility","title":"6. Compatibility","text":"This indicates that B is compatible with both versions 0.1 and version 0.2; if you pkg> up this would fix the package error. However, there is one major concern you need to address first: perhaps there was an incompatible change in v0.2 of D that breaks B. Before proceeding further, you should update all packages and then run B's tests, scanning the output of pkg> test B to be sure that v0.2 of D is in fact being used. (It is possible that an additional dependency of D pins it to v0.1, and you wouldn't want to be misled into thinking that you had tested B on the newer version.) If the new version was used and the tests still pass, you can assume that B didn't need any further updating to accommodate v0.2 of D; you can safely submit this change as a pull request to B so that a new release is made. If instead an error is thrown, it indicates that B requires more extensive updates to be compatible with the latest version of D; those updates will need to be completed before it becomes possible to use both A and B simultaneously. You can, though, continue to use them independently of one another.","category":"page"},{"location":"getting-started/#**2.**-Getting-Started","page":"2. Getting Started","title":"2. Getting Started","text":"","category":"section"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"What follows is a quick overview of the basic features of Pkg. It should help new users become familiar with basic Pkg features such as adding and removing packages and working with environments.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"note: Note\nSome Pkg output is omitted in this section in order to keep this basic guide focused. This will help maintain a good pace and not get bogged down in details. If you require more details, refer to subsequent sections of the Pkg manual.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"note: Note\nThis guide uses the Pkg REPL to execute Pkg commands. For non-interactive use, we recommend the Pkg API. The Pkg API is fully documented in the API Reference section of the Pkg documentation.","category":"page"},{"location":"getting-started/#Basic-Usage","page":"2. Getting Started","title":"Basic Usage","text":"","category":"section"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"Pkg comes with a REPL. Enter the Pkg REPL by pressing ] from the Julia REPL. To get back to the Julia REPL, press Ctrl+C or backspace (when the REPL cursor is at the beginning of the input).","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"Upon entering the Pkg REPL, you should see the following prompt:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg>","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"To add a package, use add:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg> add Example\n Resolving package versions...\n Installed Example ─ v0.5.3\n Updating `~/.julia/environments/v1.9/Project.toml`\n [7876af07] + Example v0.5.3\n Updating `~/.julia/environments/v1.9/Manifest.toml`\n [7876af07] + Example v0.5.3","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"After the package is installed, it can be loaded into the Julia session:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"julia> import Example\n\njulia> Example.hello(\"friend\")\n\"Hello, friend\"","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"We can also specify multiple packages at once to install:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg> add JSON StaticArrays","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"The status command (or the shorter st command) can be used to see installed packages.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg> st\nStatus `~/.julia/environments/v1.6/Project.toml`\n [7876af07] Example v0.5.3\n [682c06a0] JSON v0.21.3\n [90137ffa] StaticArrays v1.5.9","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"note: Note\nSome Pkg REPL commands have a short and a long version of the command, for example status and st.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"To remove packages, use rm (or remove):","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg> rm JSON StaticArrays","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"Use up (or update) to update the installed packages","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg> up","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"If you have been following this guide it is likely that the packages installed are at the latest version so up will not do anything. Below we show the status output in the case where we deliberately have installed an old version of the Example package and then upgrade it:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg> st\nStatus `~/.julia/environments/v1.9/Project.toml`\n⌃ [7876af07] Example v0.5.1\nInfo Packages marked with ⌃ have new versions available and may be upgradable.\n\n(@v1.9) pkg> up\n Updating `~/.julia/environments/v1.9/Project.toml`\n [7876af07] ↑ Example v0.5.1 ⇒ v0.5.3","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"We can see that the status output tells us that there is a newer version available and that up upgrades the package.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"For more information about managing packages, see the Managing Packages section of the documentation.","category":"page"},{"location":"getting-started/#Getting-Started-with-Environments","page":"2. Getting Started","title":"Getting Started with Environments","text":"","category":"section"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"Up to this point, we have covered basic package management: adding, updating, and removing packages.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"You may have noticed the (@v1.9) in the REPL prompt. This lets us know that v1.9 is the active environment. Different environments can have different totally different packages and versions installed from another environment. The active environment is the environment that will be modified by Pkg commands such as add, rm and update.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"Let's set up a new environment so we may experiment. To set the active environment, use activate:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg> activate tutorial\n[ Info: activating new environment at `~/tutorial/Project.toml`.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"Pkg lets us know we are creating a new environment and that this environment will be stored in the ~/tutorial directory. The path to the environment is created relative to the current working directory of the REPL.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"Pkg has also updated the REPL prompt in order to reflect the new active environment:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(tutorial) pkg>","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"We can ask for information about the active environment by using status:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(tutorial) pkg> status\n Status `~/tutorial/Project.toml`\n (empty environment)","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"~/tutorial/Project.toml is the location of the active environment's project file. A project file is a TOML file here Pkg stores the packages that have been explicitly installed. Notice this new environment is empty. Let us add some packages and observe:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(tutorial) pkg> add Example JSON\n...\n\n(tutorial) pkg> status\n Status `~/tutorial/Project.toml`\n [7876af07] Example v0.5.3\n [682c06a0] JSON v0.21.3","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"We can see that the tutorial environment now contains Example and JSON.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"note: Note\nIf you have the same package (at the same version) installed in multiple environments, the package will only be downloaded and stored on the hard drive once. This makes environments very lightweight and effectively free to create. Only using the default environment with a huge number of packages in it is a common beginners mistake in Julia. Learning how to use environments effectively will improve your experience with Julia packages.","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"For more information about environments, see the Working with Environments section of the documentation.","category":"page"},{"location":"getting-started/#Asking-for-Help","page":"2. Getting Started","title":"Asking for Help","text":"","category":"section"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"If you are ever stuck, you can ask Pkg for help:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg> ?","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"You should see a list of available commands along with short descriptions. You can ask for more detailed help by specifying a command:","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"(@v1.9) pkg> ?develop","category":"page"},{"location":"getting-started/","page":"2. Getting Started","title":"2. Getting Started","text":"This guide should help you get started with Pkg. Pkg has much more to offer in terms of powerful package management, read the full manual to learn more!","category":"page"},{"location":"registries/#**7.**-Registries","page":"7. Registries","title":"7. Registries","text":"","category":"section"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"Registries contain information about packages, such as available releases and dependencies, and where they can be downloaded. The General registry is the default one, and is installed automatically if there are no other registries installed.","category":"page"},{"location":"registries/#Managing-registries","page":"7. Registries","title":"Managing registries","text":"","category":"section"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"Registries can be added, removed and updated from either the Pkg REPL or by using the functional API. In this section we will describe the REPL interface. The registry API is documented in the Registry API Reference section.","category":"page"},{"location":"registries/#Adding-registries","page":"7. Registries","title":"Adding registries","text":"","category":"section"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"A custom registry can be added with the registry add command from the Pkg REPL. Usually this will be done with a URL to the registry.","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"If a custom registry has been installed causing the General registry to not be automatically installed, it is easy to add it manually: be added automatically. In that case, we can simply add the General","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"pkg> registry add General","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"and now all the packages registered in General are available for e.g. adding. To see which registries are currently installed you can use the registry status (or registry st) command","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"pkg> registry st\nRegistry Status\n [23338594] General (https://github.com/JuliaRegistries/General.git)","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"Registries are always added to the user depot, which is the first entry in DEPOT_PATH (cf. the Glossary section).","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"note: Registries from a package server\nIt is possible for a package server to be advertising additional available package registries. When Pkg runs with a clean Julia depot (e.g. after a fresh install), with a custom package server configured with JULIA_PKG_SERVER, it will automatically add all such available registries. If the depot already has some registries installed (e.g. General), the additional ones can easily be installed with the no-argument registry add command.","category":"page"},{"location":"registries/#Removing-registries","page":"7. Registries","title":"Removing registries","text":"","category":"section"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"Registries can be removed with the registry remove (or registry rm) command. Here we remove the General registry","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"pkg> registry rm General\n Removing registry `General` from ~/.julia/registries/General\n\npkg> registry st\nRegistry Status\n (no registries found)","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"In case there are multiple registries named General installed you have to disambiguate with the uuid, just as when manipulating packages, e.g.","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"pkg> registry rm General=23338594-aafe-5451-b93e-139f81909106\n Removing registry `General` from ~/.julia/registries/General","category":"page"},{"location":"registries/#Updating-registries","page":"7. Registries","title":"Updating registries","text":"","category":"section"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"The registry update (or registry up) command is available to update registries. Here we update the General registry:","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"pkg> registry up General\n Updating registry at `~/.julia/registries/General`\n Updating git-repo `https://github.com/JuliaRegistries/General`","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"and to update all installed registries just do:","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"pkg> registry up\n Updating registry at `~/.julia/registries/General`\n Updating git-repo `https://github.com/JuliaRegistries/General`","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"Registries automatically update once per session when a package operation is performed so it rarely has to be done manually.","category":"page"},{"location":"registries/#Registry-format","page":"7. Registries","title":"Registry format","text":"","category":"section"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"In a registry, each package gets its own directory; in that directory are the following files: Compat.toml, Deps.toml, Package.toml, and Versions.toml. The formats of these files are described below.","category":"page"},{"location":"registries/#Registry-Compat.toml","page":"7. Registries","title":"Registry Compat.toml","text":"","category":"section"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"The Compat.toml file has a series of blocks specifying version numbers, with a set of dependencies listed below. For example, part of such a file might look like this:","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"[\"0.8-0.8.3\"]\nDependencyA = \"0.4-0.5\"\nDependencyB = \"0.3-0.5\"\n\n[\"0.8.2-0.8.5\"]\nDependencyC = \"0.7-0\"","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"Dependencies that are unchanged across a range of versions are grouped together in these blocks. The interpretation of these ranges is given by the comment after each line below:","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"\"0.7-0.8\" # [0.7.0, 0.9.0)\n\"0.7-0\" # [0.7.0, 1.0.0)\n\"0.8.6-0\" # [0.8.6, 1.0.0)\n\"0.7-*\" # [0.7.0, ∞)","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"So for this package, versions [0.8.0, 0.8.3] depend on versions [0.4.0, 0.6.0) of DependencyA and version [0.3.0, 0.6.0) of DependencyB. Meanwhile, it is also true that versions [0.8.2, 0.8.5] require specific versions of DependencyC (so that all three are required for versions 0.8.2 and 0.8.3).","category":"page"},{"location":"registries/#Registry-flavors","page":"7. Registries","title":"Registry flavors","text":"","category":"section"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"The default Pkg Server (pkg.julialang.org) offers two different \"flavors\" of registry.","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"compat: Julia 1.8\nRegistry flavors are only available starting with Julia 1.8.","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"conservative: suitable for most users; all packages and artifacts in this registry flavor are available from the Pkg Server, with no need to download from other sources\neager: this registry offers the latest versions of packages, even if the Pkg and Storage Servers have not finished processing them; thus, some packages and artifacts may not be available from the Pkg Server, and thus may need to be downloaded from other sources (such as GitHub)","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"The default registry flavor is conservative. We recommend that most users stick to the conservative flavor unless they know that they need to use the eager flavor.","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"To select the eager flavor:","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"ENV[\"JULIA_PKG_SERVER_REGISTRY_PREFERENCE\"] = \"eager\"\n\nimport Pkg\n\nPkg.Registry.update()","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"To select the conservative flavor:","category":"page"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"ENV[\"JULIA_PKG_SERVER_REGISTRY_PREFERENCE\"] = \"conservative\"\n\nimport Pkg\n\nPkg.Registry.update()","category":"page"},{"location":"registries/#Creating-and-maintaining-registries","page":"7. Registries","title":"Creating and maintaining registries","text":"","category":"section"},{"location":"registries/","page":"7. Registries","title":"7. Registries","text":"Pkg only provides client facilities for registries, rather than functionality to create or maintain them. However, Registrator.jl and LocalRegistry.jl provide ways to create and update registries, and RegistryCI.jl provides automated testing and merging functionality for maintaining a registry.","category":"page"},{"location":"glossary/#Glossary","page":"9. Glossary","title":"9. Glossary","text":"","category":"section"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Project: a source tree with a standard layout, including a src directory for the main body of Julia code, a test directory for testing the project, a docs directory for documentation files, and optionally a deps directory for a build script and its outputs. A project will typically also have a project file and may optionally have a manifest file:","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Project file: a file in the root directory of a project, named Project.toml (or JuliaProject.toml), describing metadata about the project, including its name, UUID (for packages), authors, license, and the names and UUIDs of packages and libraries that it depends on.\nManifest file: a file in the root directory of a project, named Manifest.toml (or JuliaManifest.toml), describing a complete dependency graph and exact versions of each package and library used by a project.","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Package: a project which provides reusable functionality that can be used by other Julia projects via import X or using X. A package should have a project file with a uuid entry giving its package UUID. This UUID is used to identify the package in projects that depend on it.","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"note: Note\nFor legacy reasons, it is possible to load a package without a project file or UUID from the REPL or the top-level of a script. It is not possible, however, to load a package without a project file or UUID from a project with them. Once you've loaded from a project file, everything needs a project file and UUID.","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Application: a project which provides standalone functionality not intended to be reused by other Julia projects. For example a web application or a command-line utility, or simulation/analytics code accompanying a scientific paper. An application may have a UUID but does not need one. An application may also set and change the global configurations of packages it depends on. Packages, on the other hand, may not change the global state of their dependencies since that could conflict with the configuration of the main application.","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"note: Note\nProjects vs. Packages vs. Applications:Project is an umbrella term: packages and applications are kinds of projects.\nPackages should have UUIDs, applications can have UUIDs but don't need them.\nApplications can provide global configuration, whereas packages cannot.","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Environment: the combination of the top-level name map provided by a project file combined with the dependency graph and map from packages to their entry points provided by a manifest file. For more detail see the manual section on code loading.","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Explicit environment: an environment in the form of an explicit project file and an optional corresponding manifest file together in a directory. If the manifest file is absent then the implied dependency graph and location maps are empty.\nImplicit environment: an environment provided as a directory (without a project file or manifest file) containing packages with entry points of the form X.jl, X.jl/src/X.jl or X/src/X.jl. The top-level name map is implied by these entry points. The dependency graph is implied by the existence of project files inside of these package directories, e.g. X.jl/Project.toml or X/Project.toml. The dependencies of the X package are the dependencies in the corresponding project file if there is one. The location map is implied by the entry points themselves.","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Registry: a source tree with a standard layout recording metadata about a registered set of packages, the tagged versions of them which are available, and which versions of packages are compatible or incompatible with each other. A registry is indexed by package name and UUID, and has a directory for each registered package providing the following metadata about it:","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"name – e.g. DataFrames\nUUID – e.g. a93c6f00-e57d-5684-b7b6-d8193f3e46c0\nrepository – e.g. https://github.com/JuliaData/DataFrames.jl.git\nversions – a list of all registered version tags","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"For each registered version of a package, the following information is provided:","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"its semantic version number – e.g. v1.2.3\nits git tree SHA-1 hash – e.g. 7ffb18ea3245ef98e368b02b81e8a86543a11103\na map from names to UUIDs of dependencies\nwhich versions of other packages it is compatible/incompatible with","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Dependencies and compatibility are stored in a compressed but human-readable format using ranges of package versions.","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Depot: a directory on a system where various package-related resources live, including:","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"environments: shared named environments (e.g. v1.0, devtools)\nclones: bare clones of package repositories\ncompiled: cached compiled package images (.ji files)\nconfig: global configuration files (e.g. startup.jl)\ndev: default directory for package development\nlogs: log files (e.g. manifest_usage.toml, repl_history.jl)\npackages: installed package versions\nregistries: clones of registries (e.g. General)","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Load path: a stack of environments where package identities, their dependencies, and entry points are searched for. The load path is controlled in Julia by the LOAD_PATH global variable which is populated at startup based on the value of the JULIA_LOAD_PATH environment variable. The first entry is your primary environment, often the current project, while later entries provide additional packages one may want to use from the REPL or top-level scripts.","category":"page"},{"location":"glossary/","page":"9. Glossary","title":"9. Glossary","text":"Depot path: a stack of depot locations where the package manager, as well as Julia's code loading mechanisms, look for registries, installed packages, named environments, repo clones, cached compiled package images, and configuration files. The depot path is controlled by the Julia DEPOT_PATH global variable which is populated at startup based on the value of the JULIA_DEPOT_PATH environment variable. The first entry is the “user depot” and should be writable by and owned by the current user. The user depot is where: registries are cloned, new package versions are installed, named environments are created and updated, package repositories are cloned, newly compiled package image files are saved, log files are written, development packages are checked out by default, and global configuration data is saved. Later entries in the depot path are treated as read-only and are appropriate for registries, packages, etc. installed and managed by system administrators.","category":"page"},{"location":"api/#API-Reference","page":"12. API Reference","title":"12. API Reference","text":"","category":"section"},{"location":"api/","page":"12. API Reference","title":"12. API Reference","text":"This section describes the functional API for interacting with Pkg.jl. It is recommended to use the functional API, rather than the Pkg REPL mode, for non-interactive usage, for example in scripts.","category":"page"},{"location":"api/#General-API-Reference","page":"12. API Reference","title":"General API Reference","text":"","category":"section"},{"location":"api/","page":"12. API Reference","title":"12. API Reference","text":"Certain options are generally useful and can be specified in any API call. You can specify these options by setting keyword arguments.","category":"page"},{"location":"api/#Redirecting-output","page":"12. API Reference","title":"Redirecting output","text":"","category":"section"},{"location":"api/","page":"12. API Reference","title":"12. API Reference","text":"Use the io::IOBuffer keyword argument to redirect Pkg output. For example, Pkg.add(\"Example\"; io=devnull) will discard any output produced by the add call.","category":"page"},{"location":"api/#Package-API-Reference","page":"12. API Reference","title":"Package API Reference","text":"","category":"section"},{"location":"api/","page":"12. API Reference","title":"12. API Reference","text":"In the Pkg REPL mode, packages (with associated version, UUID, URL etc) are parsed from strings, for example \"Package#master\",\"Package@v0.1\", \"www.mypkg.com/MyPkg#my/feature\".","category":"page"},{"location":"api/","page":"12. API Reference","title":"12. API Reference","text":"In the functional API, it is possible to use strings as arguments for simple commands (like Pkg.add([\"PackageA\", \"PackageB\"]), but more complicated commands, which e.g. specify URLs or version range, require the use of a more structured format over strings. This is done by creating an instance of PackageSpec which is passed in to functions.","category":"page"},{"location":"api/","page":"12. API Reference","title":"12. API Reference","text":"Pkg.add\nPkg.develop\nPkg.activate\nPkg.rm\nPkg.update\nPkg.test\nPkg.build\nPkg.pin\nPkg.free\nPkg.instantiate\nPkg.resolve\nPkg.gc\nPkg.status\nPkg.compat\nPkg.precompile\nPkg.offline\nPkg.why\nPkg.dependencies\nPkg.respect_sysimage_versions\nPkg.project\nPkg.undo\nPkg.redo\nPkg.setprotocol!\nPackageSpec\nPackageMode\nUpgradeLevel","category":"page"},{"location":"api/#Pkg.add","page":"12. API Reference","title":"Pkg.add","text":"Pkg.add(pkg::Union{String, Vector{String}}; preserve=PRESERVE_TIERED, installed=false)\nPkg.add(pkg::Union{PackageSpec, Vector{PackageSpec}}; preserve=PRESERVE_TIERED, installed=false)\n\nAdd a package to the current project. This package will be available by using the import and using keywords in the Julia REPL, and if the current project is a package, also inside that package.\n\nResolution Tiers\n\nPkg resolves the set of packages in your environment using a tiered algorithm. The preserve keyword argument allows you to key into a specific tier in the resolve algorithm. The following table describes the argument values for preserve (in order of strictness):\n\nValue Description\nPRESERVE_ALL_INSTALLED Like PRESERVE_ALL and only add those already installed\nPRESERVE_ALL Preserve the state of all existing dependencies (including recursive dependencies)\nPRESERVE_DIRECT Preserve the state of all existing direct dependencies\nPRESERVE_SEMVER Preserve semver-compatible versions of direct dependencies\nPRESERVE_NONE Do not attempt to preserve any version information\nPRESERVE_TIERED_INSTALLED Like PRESERVE_TIERED except PRESERVE_ALL_INSTALLED is tried first\nPRESERVE_TIERED Use the tier that will preserve the most version information while\n allowing version resolution to succeed (this is the default)\n\nnote: Note\nTo change the default strategy to PRESERVE_TIERED_INSTALLED set the env var JULIA_PKG_PRESERVE_TIERED_INSTALLED to true.\n\nAfter the installation of new packages the project will be precompiled. For more information see pkg> ?precompile.\n\nWith the PRESERVE_ALL_INSTALLED strategy the newly added packages will likely already be precompiled, but if not this may be because either the combination of package versions resolved in this environment has not been resolved and precompiled before, or the precompile cache has been deleted by the LRU cache storage (see JULIA_MAX_NUM_PRECOMPILE_FILES).\n\ncompat: Julia 1.9\nThe PRESERVE_TIERED_INSTALLED and PRESERVE_ALL_INSTALLED strategies requires at least Julia 1.9.\n\nExamples\n\nPkg.add(\"Example\") # Add a package from registry\nPkg.add(\"Example\"; preserve=Pkg.PRESERVE_ALL) # Add the `Example` package and strictly preserve existing dependencies\nPkg.add(name=\"Example\", version=\"0.3\") # Specify version; latest release in the 0.3 series\nPkg.add(name=\"Example\", version=\"0.3.1\") # Specify version; exact release\nPkg.add(url=\"https://github.com/JuliaLang/Example.jl\", rev=\"master\") # From url to remote gitrepo\nPkg.add(url=\"/remote/mycompany/juliapackages/OurPackage\") # From path to local gitrepo\nPkg.add(url=\"https://github.com/Company/MonoRepo\", subdir=\"juliapkgs/Package.jl)\") # With subdir\n\nAfter the installation of new packages the project will be precompiled. See more at Environment Precompilation.\n\nSee also PackageSpec, Pkg.develop.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.develop","page":"12. API Reference","title":"Pkg.develop","text":"Pkg.develop(pkg::Union{String, Vector{String}}; io::IO=stderr, preserve=PRESERVE_TIERED, installed=false)\nPkg.develop(pkgs::Union{PackageSpec, Vector{PackageSpec}}; io::IO=stderr, preserve=PRESERVE_TIERED, installed=false)\n\nMake a package available for development by tracking it by path. If pkg is given with only a name or by a URL, the package will be downloaded to the location specified by the environment variable JULIA_PKG_DEVDIR, with joinpath(DEPOT_PATH[1],\"dev\") being the default.\n\nIf pkg is given as a local path, the package at that path will be tracked.\n\nThe preserve strategies offered by Pkg.add are also available via the preserve kwarg. See Pkg.add for more information.\n\nExamples\n\n# By name\nPkg.develop(\"Example\")\n\n# By url\nPkg.develop(url=\"https://github.com/JuliaLang/Compat.jl\")\n\n# By path\nPkg.develop(path=\"MyJuliaPackages/Package.jl\")\n\nSee also PackageSpec, Pkg.add.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.activate","page":"12. API Reference","title":"Pkg.activate","text":"Pkg.activate([s::String]; shared::Bool=false, io::IO=stderr)\nPkg.activate(; temp::Bool=false, shared::Bool=false, io::IO=stderr)\n\nActivate the environment at s. The active environment is the environment that is modified by executing package commands. The logic for what path is activated is as follows:\n\nIf shared is true, the first existing environment named s from the depots in the depot stack will be activated. If no such environment exists, create and activate that environment in the first depot.\nIf temp is true this will create and activate a temporary environment which will be deleted when the julia process is exited.\nIf s is an existing path, then activate the environment at that path.\nIf s is a package in the current project and s is tracking a path, then activate the environment at the tracked path.\nOtherwise, s is interpreted as a non-existing path, which is then activated.\n\nIf no argument is given to activate, then use the first project found in LOAD_PATH.\n\nExamples\n\nPkg.activate()\nPkg.activate(\"local/path\")\nPkg.activate(\"MyDependency\")\nPkg.activate(; temp=true)\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.rm","page":"12. API Reference","title":"Pkg.rm","text":"Pkg.rm(pkg::Union{String, Vector{String}}; mode::PackageMode = PKGMODE_PROJECT)\nPkg.rm(pkg::Union{PackageSpec, Vector{PackageSpec}}; mode::PackageMode = PKGMODE_PROJECT)\n\nRemove a package from the current project. If mode is equal to PKGMODE_MANIFEST also remove it from the manifest including all recursive dependencies of pkg.\n\nSee also PackageSpec, PackageMode.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.update","page":"12. API Reference","title":"Pkg.update","text":"Pkg.update(; level::UpgradeLevel=UPLEVEL_MAJOR, mode::PackageMode = PKGMODE_PROJECT, preserve::PreserveLevel)\nPkg.update(pkg::Union{String, Vector{String}})\nPkg.update(pkg::Union{PackageSpec, Vector{PackageSpec}})\n\nIf no positional argument is given, update all packages in the manifest if mode is PKGMODE_MANIFEST and packages in both manifest and project if mode is PKGMODE_PROJECT. If no positional argument is given, level can be used to control by how much packages are allowed to be upgraded (major, minor, patch, fixed).\n\nIf packages are given as positional arguments, the preserve argument can be used to control what other packages are allowed to update:\n\nPRESERVE_ALL (default): Only allow pkg to update.\nPRESERVE_DIRECT: Only allow pkg and indirect dependencies that are not a direct dependency in the project to update.\nPRESERVE_NONE: Allow pkg and all its indirect dependencies to update.\n\nAfter any package updates the project will be precompiled. See more at Environment Precompilation.\n\nSee also PackageSpec, PackageMode, UpgradeLevel.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.test","page":"12. API Reference","title":"Pkg.test","text":"Pkg.test(; kwargs...)\nPkg.test(pkg::Union{String, Vector{String}; kwargs...)\nPkg.test(pkgs::Union{PackageSpec, Vector{PackageSpec}}; kwargs...)\n\nKeyword arguments:\n\ncoverage::Bool=false: enable or disable generation of coverage statistics.\nallow_reresolve::Bool=true: allow Pkg to reresolve the package versions in the test environment\njulia_args::Union{Cmd, Vector{String}}: options to be passed the test process.\ntest_args::Union{Cmd, Vector{String}}: test arguments (ARGS) available in the test process.\n\ncompat: Julia 1.9\nallow_reresolve requires at least Julia 1.9.\n\nRun the tests for package pkg, or for the current project (which thus needs to be a package) if no positional argument is given to Pkg.test. A package is tested by running its test/runtests.jl file.\n\nThe tests are run by generating a temporary environment with only the pkg package and its (recursive) dependencies in it. If a manifest file exists and the allow_reresolve keyword argument is set to false, the versions in the manifest file are used. Otherwise a feasible set of packages is resolved and installed.\n\nDuring the tests, test-specific dependencies are active, which are given in the project file as e.g.\n\n[extras]\nTest = \"8dfed614-e22c-5e08-85e1-65c5234f0b40\"\n\n[targets]\ntest = [\"Test\"]\n\nThe tests are executed in a new process with check-bounds=yes and by default startup-file=no. If using the startup file (~/.julia/config/startup.jl) is desired, start julia with --startup-file=yes. Inlining of functions during testing can be disabled (for better coverage accuracy) by starting julia with --inline=no.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.build","page":"12. API Reference","title":"Pkg.build","text":"Pkg.build(; verbose = false, io::IO=stderr)\nPkg.build(pkg::Union{String, Vector{String}}; verbose = false, io::IO=stderr)\nPkg.build(pkgs::Union{PackageSpec, Vector{PackageSpec}}; verbose = false, io::IO=stderr)\n\nRun the build script in deps/build.jl for pkg and all of its dependencies in depth-first recursive order. If no argument is given to build, the current project is built, which thus needs to be a package. This function is called automatically on any package that gets installed for the first time. verbose = true prints the build output to stdout/stderr instead of redirecting to the build.log file.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.pin","page":"12. API Reference","title":"Pkg.pin","text":"Pkg.pin(pkg::Union{String, Vector{String}}; io::IO=stderr, all_pkgs::Bool=false)\nPkg.pin(pkgs::Union{PackageSpec, Vector{PackageSpec}}; io::IO=stderr, all_pkgs::Bool=false)\n\nPin a package to the current version (or the one given in the PackageSpec) or to a certain git revision. A pinned package is never automatically updated: if pkg is tracking a path, or a repository, those remain tracked but will not update. To get updates from the origin path or remote repository the package must first be freed.\n\ncompat: Julia 1.7\nThe all_pkgs kwarg was introduced in julia 1.7.\n\nExamples\n\nPkg.pin(\"Example\")\nPkg.pin(name=\"Example\", version=\"0.3.1\")\nPkg.pin(all_pkgs = true)\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.free","page":"12. API Reference","title":"Pkg.free","text":"Pkg.free(pkg::Union{String, Vector{String}}; io::IO=stderr, all_pkgs::Bool=false)\nPkg.free(pkgs::Union{PackageSpec, Vector{PackageSpec}}; io::IO=stderr, all_pkgs::Bool=false)\n\nIf pkg is pinned, remove the pin. If pkg is tracking a path, e.g. after Pkg.develop, go back to tracking registered versions. To free all dependencies set all_pkgs=true.\n\ncompat: Julia 1.7\nThe all_pkgs kwarg was introduced in julia 1.7.\n\nExamples\n\nPkg.free(\"Package\")\nPkg.free(all_pkgs = true)\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.instantiate","page":"12. API Reference","title":"Pkg.instantiate","text":"Pkg.instantiate(; verbose = false, io::IO=stderr)\n\nIf a Manifest.toml file exists in the active project, download all the packages declared in that manifest. Otherwise, resolve a set of feasible packages from the Project.toml files and install them. verbose = true prints the build output to stdout/stderr instead of redirecting to the build.log file. If no Project.toml exist in the current active project, create one with all the dependencies in the manifest and instantiate the resulting project.\n\nAfter packages have been installed the project will be precompiled. See more at Environment Precompilation.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.resolve","page":"12. API Reference","title":"Pkg.resolve","text":"Pkg.resolve(; io::IO=stderr)\n\nUpdate the current manifest with potential changes to the dependency graph from packages that are tracking a path.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.gc","page":"12. API Reference","title":"Pkg.gc","text":"Pkg.gc(; collect_delay::Period=Day(7), io::IO=stderr)\n\nGarbage-collect package and artifact installations by sweeping over all known Manifest.toml and Artifacts.toml files, noting those that have been deleted, and then finding artifacts and packages that are thereafter not used by any other projects, marking them as \"orphaned\". This method will only remove orphaned objects (package versions, artifacts, and scratch spaces) that have been continually un-used for a period of collect_delay; which defaults to seven days.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.status","page":"12. API Reference","title":"Pkg.status","text":"Pkg.status([pkgs...]; outdated::Bool=false, mode::PackageMode=PKGMODE_PROJECT, diff::Bool=false, compat::Bool=false, extensions::Bool=false, io::IO=stdout)\n\nPrint out the status of the project/manifest.\n\nPackages marked with ⌃ have new versions that can be installed, e.g. via Pkg.up. Those marked with ⌅ have new versions available, but cannot be installed due to compatibility conflicts with other packages. To see why, set the keyword argument outdated=true.\n\nSetting outdated=true will only show packages that are not on the latest version, their maximum version and why they are not on the latest version (either due to other packages holding them back due to compatibility constraints, or due to compatibility in the project file). As an example, a status output like:\n\npkg> Pkg.status(; outdated=true)\nStatus `Manifest.toml`\n⌃ [a8cc5b0e] Crayons v2.0.0 [ Pkg.setprotocol!(domain = \"github.com\", protocol = \"ssh\")\n\njulia> Pkg.setprotocol!(domain = \"gitlab.mycompany.com\")\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.PackageSpec","page":"12. API Reference","title":"Pkg.PackageSpec","text":"PackageSpec(name::String, [uuid::UUID, version::VersionNumber])\nPackageSpec(; name, url, path, subdir, rev, version, mode, level)\n\nA PackageSpec is a representation of a package with various metadata. This includes:\n\nThe name of the package.\nThe package's unique uuid.\nA version (for example when adding a package). When upgrading, can also be an instance of the enum UpgradeLevel. If the version is given as a String this means that unspecified versions are \"free\", for example version=\"0.5\" allows any version 0.5.x to be installed. If given as a VersionNumber, the exact version is used, for example version=v\"0.5.3\".\nA url and an optional git revision. rev can be a branch name or a git commit SHA1.\nA local path. This is equivalent to using the url argument but can be more descriptive.\nA subdir which can be used when adding a package that is not in the root of a repository.\n\nMost functions in Pkg take a Vector of PackageSpec and do the operation on all the packages in the vector.\n\nMany functions that take a PackageSpec or a Vector{PackageSpec} can be called with a more concise notation with NamedTuples. For example, Pkg.add can be called either as the explicit or concise versions as:\n\nExplicit Concise\nPkg.add(PackageSpec(name=\"Package\")) Pkg.add(name = \"Package\")\nPkg.add(PackageSpec(url=\"www.myhost.com/MyPkg\"))) Pkg.add(name = \"Package\")\nPkg.add([PackageSpec(name=\"Package\"), PackageSpec(path=\"/MyPkg\"]) Pkg.add([(;name=\"Package\"), (;path=\"MyPkg\")])\n\nBelow is a comparison between the REPL mode and the functional API:\n\nREPL API\nPackage PackageSpec(\"Package\")\nPackage@0.2 PackageSpec(name=\"Package\", version=\"0.2\")\n- PackageSpec(name=\"Package\", version=v\"0.2.1\")\nPackage=a67d... PackageSpec(name=\"Package\", uuid=\"a67d...\")\nPackage#master PackageSpec(name=\"Package\", rev=\"master\")\nlocal/path#feature PackageSpec(path=\"local/path\"; rev=\"feature\")\nwww.mypkg.com PackageSpec(url=\"www.mypkg.com\")\n--major Package PackageSpec(name=\"Package\", version=UPLEVEL_MAJOR)\n\n\n\n\n\n","category":"type"},{"location":"api/#Pkg.PackageMode","page":"12. API Reference","title":"Pkg.PackageMode","text":"PackageMode\n\nAn enum with the instances\n\nPKGMODE_MANIFEST\nPKGMODE_PROJECT\n\nDetermines if operations should be made on a project or manifest level. Used as an argument to Pkg.rm, Pkg.update and Pkg.status.\n\n\n\n\n\n","category":"type"},{"location":"api/#Pkg.UpgradeLevel","page":"12. API Reference","title":"Pkg.UpgradeLevel","text":"UpgradeLevel\n\nAn enum with the instances\n\nUPLEVEL_FIXED\nUPLEVEL_PATCH\nUPLEVEL_MINOR\nUPLEVEL_MAJOR\n\nDetermines how much a package is allowed to be updated. Used as an argument to PackageSpec or as an argument to Pkg.update.\n\n\n\n\n\n","category":"type"},{"location":"api/#Registry-API-Reference","page":"12. API Reference","title":"Registry API Reference","text":"","category":"section"},{"location":"api/","page":"12. API Reference","title":"12. API Reference","text":"The functional API for registries uses RegistrySpecs, similar to PackageSpec.","category":"page"},{"location":"api/","page":"12. API Reference","title":"12. API Reference","text":"RegistrySpec\nPkg.Registry.add\nPkg.Registry.rm\nPkg.Registry.update\nPkg.Registry.status","category":"page"},{"location":"api/#Pkg.RegistrySpec","page":"12. API Reference","title":"Pkg.RegistrySpec","text":"RegistrySpec(name::String)\nRegistrySpec(; name, url, path)\n\nA RegistrySpec is a representation of a registry with various metadata, much like PackageSpec.\n\nMost registry functions in Pkg take a Vector of RegistrySpec and do the operation on all the registries in the vector.\n\nExamples\n\nBelow is a comparison between the REPL mode and the functional API::\n\nREPL API\nMyRegistry RegistrySpec(\"MyRegistry\")\nMyRegistry=a67d... RegistrySpec(name=\"MyRegistry\", uuid=\"a67d...\")\nlocal/path RegistrySpec(path=\"local/path\")\nwww.myregistry.com RegistrySpec(url=\"www.myregistry.com\")\n\n\n\n\n\n","category":"type"},{"location":"api/#Pkg.Registry.add","page":"12. API Reference","title":"Pkg.Registry.add","text":"Pkg.Registry.add(registry::RegistrySpec)\n\nAdd new package registries.\n\nThe no-argument Pkg.Registry.add() will install the default registries.\n\nExamples\n\nPkg.Registry.add(\"General\")\nPkg.Registry.add(RegistrySpec(uuid = \"23338594-aafe-5451-b93e-139f81909106\"))\nPkg.Registry.add(RegistrySpec(url = \"https://github.com/JuliaRegistries/General.git\"))\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Registry.rm","page":"12. API Reference","title":"Pkg.Registry.rm","text":"Pkg.Registry.rm(registry::String)\nPkg.Registry.rm(registry::RegistrySpec)\n\nRemove registries.\n\nExamples\n\nPkg.Registry.rm(\"General\")\nPkg.Registry.rm(RegistrySpec(uuid = \"23338594-aafe-5451-b93e-139f81909106\"))\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Registry.update","page":"12. API Reference","title":"Pkg.Registry.update","text":"Pkg.Registry.update()\nPkg.Registry.update(registry::RegistrySpec)\nPkg.Registry.update(registry::Vector{RegistrySpec})\n\nUpdate registries. If no registries are given, update all available registries.\n\nExamples\n\nPkg.Registry.update()\nPkg.Registry.update(\"General\")\nPkg.Registry.update(RegistrySpec(uuid = \"23338594-aafe-5451-b93e-139f81909106\"))\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Registry.status","page":"12. API Reference","title":"Pkg.Registry.status","text":"Pkg.Registry.status()\n\nDisplay information about available registries.\n\nExamples\n\nPkg.Registry.status()\n\n\n\n\n\n","category":"function"},{"location":"api/#Artifacts-Reference","page":"12. API Reference","title":"Artifacts API Reference","text":"","category":"section"},{"location":"api/","page":"12. API Reference","title":"12. API Reference","text":"Pkg.Artifacts.create_artifact\nPkg.Artifacts.remove_artifact\nPkg.Artifacts.verify_artifact\nPkg.Artifacts.bind_artifact!\nPkg.Artifacts.unbind_artifact!\nPkg.Artifacts.download_artifact\nPkg.Artifacts.ensure_artifact_installed\nPkg.Artifacts.ensure_all_artifacts_installed\nPkg.Artifacts.archive_artifact","category":"page"},{"location":"api/#Pkg.Artifacts.create_artifact","page":"12. API Reference","title":"Pkg.Artifacts.create_artifact","text":"create_artifact(f::Function)\n\nCreates a new artifact by running f(artifact_path), hashing the result, and moving it to the artifact store (~/.julia/artifacts on a typical installation). Returns the identifying tree hash of this artifact.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Artifacts.remove_artifact","page":"12. API Reference","title":"Pkg.Artifacts.remove_artifact","text":"remove_artifact(hash::SHA1; honor_overrides::Bool=false)\n\nRemoves the given artifact (identified by its SHA1 git tree hash) from disk. Note that if an artifact is installed in multiple depots, it will be removed from all of them. If an overridden artifact is requested for removal, it will be silently ignored; this method will never attempt to remove an overridden artifact.\n\nIn general, we recommend that you use Pkg.gc() to manage artifact installations and do not use remove_artifact() directly, as it can be difficult to know if an artifact is being used by another package.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Artifacts.verify_artifact","page":"12. API Reference","title":"Pkg.Artifacts.verify_artifact","text":"verify_artifact(hash::SHA1; honor_overrides::Bool=false)\n\nVerifies that the given artifact (identified by its SHA1 git tree hash) is installed on- disk, and retains its integrity. If the given artifact is overridden, skips the verification unless honor_overrides is set to true.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Artifacts.bind_artifact!","page":"12. API Reference","title":"Pkg.Artifacts.bind_artifact!","text":"bind_artifact!(artifacts_toml::String, name::String, hash::SHA1;\n platform::Union{AbstractPlatform,Nothing} = nothing,\n download_info::Union{Vector{Tuple},Nothing} = nothing,\n lazy::Bool = false,\n force::Bool = false)\n\nWrites a mapping of name -> hash within the given (Julia)Artifacts.toml file. If platform is not nothing, this artifact is marked as platform-specific, and will be a multi-mapping. It is valid to bind multiple artifacts with the same name, but different platforms and hash'es within the same artifacts_toml. If force is set to true, this will overwrite a pre-existant mapping, otherwise an error is raised.\n\ndownload_info is an optional vector that contains tuples of URLs and a hash. These URLs will be listed as possible locations where this artifact can be obtained. If lazy is set to true, even if download information is available, this artifact will not be downloaded until it is accessed via the artifact\"name\" syntax, or ensure_artifact_installed() is called upon it.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Artifacts.unbind_artifact!","page":"12. API Reference","title":"Pkg.Artifacts.unbind_artifact!","text":"unbind_artifact!(artifacts_toml::String, name::String; platform = nothing)\n\nUnbind the given name from an (Julia)Artifacts.toml file. Silently fails if no such binding exists within the file.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Artifacts.download_artifact","page":"12. API Reference","title":"Pkg.Artifacts.download_artifact","text":"download_artifact(tree_hash::SHA1, tarball_url::String, tarball_hash::String;\n verbose::Bool = false, io::IO=stderr)\n\nDownload/install an artifact into the artifact store. Returns true on success, returns an error object on failure.\n\ncompat: Julia 1.8\nAs of Julia 1.8 this function returns the error object rather than false when failure occurs\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Artifacts.ensure_artifact_installed","page":"12. API Reference","title":"Pkg.Artifacts.ensure_artifact_installed","text":"ensure_artifact_installed(name::String, artifacts_toml::String;\n platform::AbstractPlatform = HostPlatform(),\n pkg_uuid::Union{Base.UUID,Nothing}=nothing,\n verbose::Bool = false,\n quiet_download::Bool = false,\n io::IO=stderr)\n\nEnsures an artifact is installed, downloading it via the download information stored in artifacts_toml if necessary. Throws an error if unable to install.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Artifacts.ensure_all_artifacts_installed","page":"12. API Reference","title":"Pkg.Artifacts.ensure_all_artifacts_installed","text":"ensure_all_artifacts_installed(artifacts_toml::String;\n platform = HostPlatform(),\n pkg_uuid = nothing,\n include_lazy = false,\n verbose = false,\n quiet_download = false,\n io::IO=stderr)\n\nInstalls all non-lazy artifacts from a given (Julia)Artifacts.toml file. package_uuid must be provided to properly support overrides from Overrides.toml entries in depots.\n\nIf include_lazy is set to true, then lazy packages will be installed as well.\n\nThis function is deprecated and should be replaced with the following snippet:\n\nartifacts = select_downloadable_artifacts(artifacts_toml; platform, include_lazy)\nfor name in keys(artifacts)\n ensure_artifact_installed(name, artifacts[name], artifacts_toml; platform=platform)\nend\n\nwarning: Warning\nThis function is deprecated in Julia 1.6 and will be removed in a future version. Use select_downloadable_artifacts() and ensure_artifact_installed() instead.\n\n\n\n\n\n","category":"function"},{"location":"api/#Pkg.Artifacts.archive_artifact","page":"12. API Reference","title":"Pkg.Artifacts.archive_artifact","text":"archive_artifact(hash::SHA1, tarball_path::String; honor_overrides::Bool=false)\n\nArchive an artifact into a tarball stored at tarball_path, returns the SHA256 of the resultant tarball as a hexadecimal string. Throws an error if the artifact does not exist. If the artifact is overridden, throws an error unless honor_overrides is set.\n\n\n\n\n\n","category":"function"},{"location":"managing-packages/#Managing-Packages","page":"3. Managing Packages","title":"3. Managing Packages","text":"","category":"section"},{"location":"managing-packages/#Adding-packages","page":"3. Managing Packages","title":"Adding packages","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"There are two ways of adding packages, either using the add command or the dev command. The most frequently used is add and its usage is described first.","category":"page"},{"location":"managing-packages/#Adding-registered-packages","page":"3. Managing Packages","title":"Adding registered packages","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"In the Pkg REPL, packages can be added with the add command followed by the name of the package, for example:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> add JSON\n Installing known registries into `~/`\n Resolving package versions...\n Installed Parsers ─ v2.4.0\n Installed JSON ──── v0.21.3\n Updating `~/.julia/environments/v1.8/Project.toml`\n [682c06a0] + JSON v0.21.3\n Updating `~/environments/v1.9/Manifest.toml`\n [682c06a0] + JSON v0.21.3\n [69de0a69] + Parsers v2.4.0\n [ade2ca70] + Dates\n [a63ad114] + Mmap\n [de0858da] + Printf\n [4ec0a83e] + Unicode\nPrecompiling environment...\n 2 dependencies successfully precompiled in 2 seconds","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Here we added the package Example to the current environment (which is the default @v1.8 environment). In this example, we are using a fresh Julia installation, and this is our first time adding a package using Pkg. By default, Pkg installs the General registry and uses this registry to look up packages requested for inclusion in the current environment. The status update shows a short form of the package UUID to the left, then the package name, and the version. Finally, the newly installed packages are \"precompiled\".","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"It is possible to add multiple packages in one command as pkg> add A B C.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The status output contains the packages you have added yourself, in this case, JSON:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> st\n Status `~/.julia/environments/v1.8/Project.toml`\n [682c06a0] JSON v0.21.3","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The manifest status shows all the packages in the environment, including recursive dependencies:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> st -m\nStatus `~/environments/v1.9/Manifest.toml`\n [682c06a0] JSON v0.21.3\n [69de0a69] Parsers v2.4.0\n [ade2ca70] Dates\n [a63ad114] Mmap\n [de0858da] Printf\n [4ec0a83e] Unicode","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Since standard libraries (e.g. Dates) are shipped with Julia, they do not have a version.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"After a package is added to the project, it can be loaded in Julia:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"julia> using JSON\n\njulia> JSON.json(Dict(\"foo\" => [1, \"bar\"])) |> print\n{\"foo\":[1,\"bar\"]}","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"note: Note\nOnly packages that have been added with add can be loaded (which are packages that are shown when using st in the Pkg REPL). Packages that are pulled in only as dependencies (for example the Parsers package above) can not be loaded.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"A specific version of a package can be installed by appending a version after a @ symbol to the package name:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> add JSON@0.21.1\n Resolving package versions...\n Updating `~/.julia/environments/v1.8/Project.toml`\n⌃ [682c06a0] + JSON v0.21.1\n Updating `~/environments/v1.9/Manifest.toml`\n⌃ [682c06a0] + JSON v0.21.1\n⌅ [69de0a69] + Parsers v1.1.2\n [ade2ca70] + Dates\n [a63ad114] + Mmap\n [de0858da] + Printf\n [4ec0a83e] + Unicode\n Info Packages marked with ⌃ and ⌅ have new versions available, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"As seen above, Pkg gives some information when a package is not installed at its latest version.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"If not all three numbers are given for the version, for example, 0.21, then the latest registered version of 0.21.x would be installed.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"If a branch (or a certain commit) of Example has a hotfix that is not yet included in a registered version, we can explicitly track that branch (or commit) by appending #branchname (or #commitSHA1) to the package name:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> add Example#master\n Cloning git-repo `https://github.com/JuliaLang/Example.jl.git`\n Resolving package versions...\n Updating `~/.julia/environments/v1.8/Project.toml`\n [7876af07] + Example v0.5.4 `https://github.com/JuliaLang/Example.jl.git#master`\n Updating `~/environments/v1.9/Manifest.toml`\n [7876af07] + Example v0.5.4 `https://github.com/JuliaLang/Example.jl.git#master`","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The status output now shows that we are tracking the master branch of Example. When updating packages, updates are pulled from that branch.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"note: Note\nIf we would specify a commit id instead of a branch name, e.g. add Example#025cf7e, then we would effectively \"pin\" the package to that commit. This is because the commit id always points to the same thing unlike a branch, which may be updated.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"To go back to tracking the registry version of Example, the command free is used:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> free Example\n Resolving package versions...\n Installed Example ─ v0.5.3\n Updating `~/.julia/environments/v1.8/Project.toml`\n [7876af07] ~ Example v0.5.4 `https://github.com/JuliaLang/Example.jl.git#master` ⇒ v0.5.3\n Updating `~/environments/v1.9/Manifest.toml`\n [7876af07] ~ Example v0.5.4 `https://github.com/JuliaLang/Example.jl.git#master` ⇒ v0.5.3","category":"page"},{"location":"managing-packages/#Adding-unregistered-packages","page":"3. Managing Packages","title":"Adding unregistered packages","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"If a package is not in a registry, it can be added by specifying a URL to the Git repository:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> add https://github.com/fredrikekre/ImportMacros.jl\n Cloning git-repo `https://github.com/fredrikekre/ImportMacros.jl`\n Resolving package versions...\n Updating `~/.julia/environments/v1.8/Project.toml`\n [92a963f6] + ImportMacros v1.0.0 `https://github.com/fredrikekre/ImportMacros.jl#master`\n Updating `~/environments/v1.9/Manifest.toml`\n [92a963f6] + ImportMacros v1.0.0 `https://github.com/fredrikekre/ImportMacros.jl#master`","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The dependencies of the unregistered package (here MacroTools) got installed. For unregistered packages, we could have given a branch name (or commit SHA1) to track using #, just like for registered packages.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"If you want to add a package using the SSH-based git protocol, you have to use quotes because the URL contains a @. For example,","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> add \"git@github.com:fredrikekre/ImportMacros.jl.git\"\n Cloning git-repo `git@github.com:fredrikekre/ImportMacros.jl.git`\n Updating registry at `~/.julia/registries/General`\n Resolving package versions...\nUpdating `~/.julia/environments/v1/Project.toml`\n [92a963f6] + ImportMacros v1.0.0 `git@github.com:fredrikekre/ImportMacros.jl.git#master`\nUpdating `~/.julia/environments/v1/Manifest.toml`\n [92a963f6] + ImportMacros v1.0.0 `git@github.com:fredrikekre/ImportMacros.jl.git#master`","category":"page"},{"location":"managing-packages/#Adding-a-package-in-a-subdirectory-of-a-repository","page":"3. Managing Packages","title":"Adding a package in a subdirectory of a repository","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"If the package you want to add by URL is not in the root of the repository, then you need pass that subdirectory using :. For instance, to add the SnoopCompileCore package in the SnoopCompile repository:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"pkg> add https://github.com/timholy/SnoopCompile.jl.git:SnoopCompileCore\n Cloning git-repo `https://github.com/timholy/SnoopCompile.jl.git`\n Resolving package versions...\n Updating `~/.julia/environments/v1.8/Project.toml`\n [e2b509da] + SnoopCompileCore v2.9.0 `https://github.com/timholy/SnoopCompile.jl.git:SnoopCompileCore#master`\n Updating `~/.julia/environments/v1.8/Manifest.toml`\n [e2b509da] + SnoopCompileCore v2.9.0 `https://github.com/timholy/SnoopCompile.jl.git:SnoopCompileCore#master`\n [9e88b42a] + Serialization","category":"page"},{"location":"managing-packages/#Adding-a-local-package","page":"3. Managing Packages","title":"Adding a local package","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Instead of giving a URL of a git repo to add we could instead have given a local path to a git repo. This works similar to adding a URL. The local repository will be tracked (at some branch) and updates from that local repo are pulled when packages are updated.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"warning: Warning\nNote that tracking a package through add is distinct from develop (which is described in the next session). When using add on a local git repository, changes to files in the local package repository will not immediately be reflected when loading that package. The changes would have to be committed and the packages updated in order to pull in the changes. In the majority of cases, you want to use develop on a local path, not add.","category":"page"},{"location":"managing-packages/#developing","page":"3. Managing Packages","title":"Developing packages","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"By only using add your environment always has a \"reproducible state\", in other words, as long as the repositories and registries used are still accessible it is possible to retrieve the exact state of all the dependencies in the environment. This has the advantage that you can send your environment (Project.toml and Manifest.toml) to someone else and they can Pkg.instantiate that environment in the same state as you had it locally. However, when you are developing a package, it is more convenient to load packages at their current state at some path. For this reason, the dev command exists.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Let's try to dev a registered package:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> dev Example\n Updating git-repo `https://github.com/JuliaLang/Example.jl.git`\n Resolving package versions...\n Updating `~/.julia/environments/v1.8/Project.toml`\n [7876af07] + Example v0.5.4 `~/.julia/dev/Example`\n Updating `~/.julia/environments/v1.8/Manifest.toml`\n [7876af07] + Example v0.5.4 `~/.julia/dev/Example`","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The dev command fetches a full clone of the package to ~/.julia/dev/ (the path can be changed by setting the environment variable JULIA_PKG_DEVDIR, the default being joinpath(DEPOT_PATH[1],\"dev\")). When importing Example julia will now import it from ~/.julia/dev/Example and whatever local changes have been made to the files in that path are consequently reflected in the code loaded. When we used add we said that we tracked the package repository; we here say that we track the path itself. Note the package manager will never touch any of the files at a tracked path. It is therefore up to you to pull updates, change branches, etc. If we try to dev a package at some branch that already exists at ~/.julia/dev/ the package manager will simply re-use the existing path. If dev is used on a local path, that path to that package is recorded and used when loading that package. The path will be recorded relative to the project file, unless it is given as an absolute path.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Let's try modify the file at ~/.julia/dev/Example/src/Example.jl and add a simple function:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"plusone(x::Int) = x + 1","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Now we can go back to the Julia REPL and load the package and run the new function:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"julia> import Example\n[ Info: Precompiling Example [7876af07-990d-54b4-ab0e-23690620f79a]\n\njulia> Example.plusone(1)\n2","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"warning: Warning\nA package can only be loaded once per Julia session. If you have run import Example in the current Julia session, you will have to restart Julia to see the changes to Example. Revise.jl can make this process significantly more pleasant, but setting it up is beyond the scope of this guide.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"To stop tracking a path and use the registered version again, use free:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> free Example\n Resolving package versions...\n Updating `~/.julia/environments/v1.8/Project.toml`\n [7876af07] ~ Example v0.5.4 `~/.julia/dev/Example` ⇒ v0.5.3\n Updating `~/.julia/environments/v1.8/Manifest.toml`\n [7876af07] ~ Example v0.5.4 `~/.julia/dev/Example` ⇒ v0.5.3","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"It should be pointed out that by using dev your project is now inherently stateful. Its state depends on the current content of the files at the path and the manifest cannot be \"instantiated\" by someone else without knowing the exact content of all the packages that are tracking a path.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Note that if you add a dependency to a package that tracks a local path, the Manifest (which contains the whole dependency graph) will become out of sync with the actual dependency graph. This means that the package will not be able to load that dependency since it is not recorded in the Manifest. To synchronize the Manifest, use the REPL command resolve.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"In addition to absolute paths, add and dev can accept relative paths to packages. In this case, the relative path from the active project to the package is stored. This approach is useful when the relative location of tracked dependencies is more important than their absolute location. For example, the tracked dependencies can be stored inside of the active project directory. The whole directory can be moved and Pkg will still be able to find the dependencies because their path relative to the active project is preserved even though their absolute path has changed.","category":"page"},{"location":"managing-packages/#Removing-packages","page":"3. Managing Packages","title":"Removing packages","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Packages can be removed from the current project by using pkg> rm Package. This will only remove packages that exist in the project; to remove a package that only exists as a dependency use pkg> rm --manifest DepPackage. Note that this will remove all packages that (recursively) depend on DepPackage.","category":"page"},{"location":"managing-packages/#updating","page":"3. Managing Packages","title":"Updating packages","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"When new versions of packages are released, it is a good idea to update. Simply calling up will try to update all the dependencies of the project to the latest compatible version. Sometimes this is not what you want. You can specify a subset of the dependencies to upgrade by giving them as arguments to up, e.g:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> up Example","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"This will only allow Example do upgrade. If you also want to allow dependencies of Example to upgrade (with the exception of packages that are in the project) you can pass the --preserve=direct flag.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> up --preserve=direct Example","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"And if you also want to allow dependencies of Example that are also in the project to upgrade, you can use --preserve=none:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> up --preserve=none Example","category":"page"},{"location":"managing-packages/#Pinning-a-package","page":"3. Managing Packages","title":"Pinning a package","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"A pinned package will never be updated. A package can be pinned using pin, for example:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> pin Example\n Resolving package versions...\n Updating `~/.julia/environments/v1.8/Project.toml`\n [7876af07] ~ Example v0.5.3 ⇒ v0.5.3 ⚲\n Updating `~/.julia/environments/v1.8/Manifest.toml`\n [7876af07] ~ Example v0.5.3 ⇒ v0.5.3 ⚲","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Note the pin symbol ⚲ showing that the package is pinned. Removing the pin is done using free","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> free Example\n Updating `~/.julia/environments/v1.8/Project.toml`\n [7876af07] ~ Example v0.5.3 ⚲ ⇒ v0.5.3\n Updating `~/.julia/environments/v1.8/Manifest.toml`\n [7876af07] ~ Example v0.5.3 ⚲ ⇒ v0.5.3","category":"page"},{"location":"managing-packages/#Testing-packages","page":"3. Managing Packages","title":"Testing packages","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The tests for a package can be run using test command:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> test Example\n...\n Testing Example\n Testing Example tests passed","category":"page"},{"location":"managing-packages/#Building-packages","page":"3. Managing Packages","title":"Building packages","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The build step of a package is automatically run when a package is first installed. The output of the build process is directed to a file. To explicitly run the build step for a package, the build command is used:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> build IJulia\n Building Conda ─→ `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/6e47d11ea2776bc5627421d59cdcc1296c058071/build.log`\n Building IJulia → `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/98ab633acb0fe071b671f6c1785c46cd70bb86bd/build.log`\n\njulia> print(read(joinpath(homedir(), \".julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/98ab633acb0fe071b671f6c1785c46cd70bb86bd/build.log\"), String))\n[ Info: Installing Julia kernelspec in /home/kc/.local/share/jupyter/kernels/julia-1.8","category":"page"},{"location":"managing-packages/#conflicts","page":"3. Managing Packages","title":"Interpreting and resolving version conflicts","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"An environment consists of a set of mutually-compatible packages. Sometimes, you can find yourself in a situation in which two packages you'd like to use simultaneously have incompatible requirements. In such cases you'll get an \"Unsatisfiable requirements\" error:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"using Pkg\ninclude(joinpath(pkgdir(Pkg), \"test\", \"resolve_utils.jl\"))\nusing .ResolveUtils\ndeps_data = Any[[\"A\", v\"1.0.0\", \"C\", v\"0.2\"],\n [\"B\", v\"1.0.0\", \"D\", v\"0.1\"],\n [\"C\", v\"0.1.0\", \"D\", v\"0.1\"],\n [\"C\", v\"0.1.1\", \"D\", v\"0.1\"],\n [\"C\", v\"0.2.0\", \"D\", v\"0.2\"],\n [\"D\", v\"0.1.0\"],\n [\"D\", v\"0.2.0\"],\n [\"D\", v\"0.2.1\"]]\nreqs_data = Any[[\"A\", \"*\"],\n [\"B\", \"*\"]]","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"print(\"pkg> add A\\n\", try resolve_tst(deps_data, reqs_data) catch e sprint(showerror, e) end) # hide","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"This message means that a package named D has a version conflict. Even if you have never added D directly, this kind of error can arise if D is required by other packages that you are trying to use.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"note: Note\nWhen tackling these conflicts, first consider that the bigger a project gets, the more likely this is to happen. Using targeted projects for a given task is highly recommended, and removing unused dependencies is a good first step when hitting these issues. For instance, a common pitfall is having more than a few packages in your default (i.e. (@1.8)) environment, and using that as an environment for all tasks you're using julia for. It's better to create a dedicated project for the task you're working on, and keep the dependencies there minimal. To read more see Working with Environments","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The error message has a lot of crucial information. It may be easiest to interpret piecewise:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Unsatisfiable requirements detected for package D [756980fe]:\n D [756980fe] log:\n ├─possible versions are: [0.1.0, 0.2.0-0.2.1] or uninstalled","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"means that D has three released versions, v0.1.0, v0.2.0, and v0.2.1. You also have the option of not having it installed at all. Each of these options might have different implications for the set of other packages that can be installed.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Crucially, notice the stroke characters (vertical and horizontal lines) and their indentation. Together, these connect messages to specific packages. For instance the right stroke of ├─ indicates that the message to its right (possible versions...) is connected to the package pointed to by its vertical stroke (D). This same principle applies to the next line:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":" ├─restricted by compatibility requirements with B [f4259836] to versions: 0.1.0","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The vertical stroke here is also aligned under D, and thus this message is in reference to D. Specifically, there's some other package B that depends on version v0.1.0 of D. Notice that this is not the newest version of D.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Next comes some information about B:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":" │ └─B [f4259836] log:\n │ ├─possible versions are: 1.0.0 or uninstalled\n │ └─restricted to versions * by an explicit requirement, leaving only versions 1.0.0","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The two lines below the first have a vertical stroke that aligns with B, and thus they provide information about B. They tell you that B has just one release, v1.0.0. You've not specified a particular version of B (restricted to versions * means that any version will do), but the explicit requirement means that you've asked for B to be part of your environment, for example by pkg> add B. You might have asked for B previously, and the requirement is still active.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The conflict becomes clear with the line","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"└─restricted by compatibility requirements with C [c99a7cb2] to versions: 0.2.0 — no versions left","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Here again, the vertical stroke aligns with D: this means that D is also required by another package, C. C requires v0.2.0 of D, and this conflicts with B's need for v0.1.0 of D. This explains the conflict.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"But wait, you might ask, what is C and why do I need it at all? The next few lines introduce the problem:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":" └─C [c99a7cb2] log:\n ├─possible versions are: [0.1.0-0.1.1, 0.2.0] or uninstalled\n └─restricted by compatibility requirements with A [29c70717] to versions: 0.2.0","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"These provide more information about C, revealing that it has 3 released versions: v0.1.0, v0.1.1, and v0.2.0. Moreover, C is required by another package A. Indeed, A's requirements are such that we need v0.2.0 of C. A's origin is revealed on the next lines:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":" └─A [29c70717] log:\n ├─possible versions are: 1.0.0 or uninstalled\n └─restricted to versions * by an explicit requirement, leaving only versions 1.0.0","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"So we can see that A was explicitly required, and in this case, it's because we were trying toadd` it to our environment.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"In summary, we explicitly asked to use A and B, but this gave a conflict for D. The reason was that B and C require conflicting versions of D. Even though C isn't something we asked for explicitly, it was needed by A.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"To fix such errors, you have a number of options:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"try updating your packages. It's possible the developers of these packages have recently released new versions that are mutually compatible.\nremove either A or B from your environment. Perhaps B is left over from something you were previously working on, and you don't need it anymore. If you don't need A and B at the same time, this is the easiest way to fix the problem.\ntry reporting your conflict. In this case, we were able to deduce that B requires an outdated version of D. You could thus report an issue in the development repository of B.jl asking for an updated version.\ntry fixing the problem yourself. This becomes easier once you understand Project.toml files and how they declare their compatibility requirements. We'll return to this example in Fixing conflicts.","category":"page"},{"location":"managing-packages/#Garbage-collecting-old,-unused-packages","page":"3. Managing Packages","title":"Garbage collecting old, unused packages","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"As packages are updated and projects are deleted, installed package versions and artifacts that were once used will inevitably become old and not used from any existing project. Pkg keeps a log of all projects used so it can go through the log and see exactly which projects still exist and what packages/artifacts those projects used. If a package or artifact is not marked as used by any project, it is added to a list of orphaned packages. Packages and artifacts that are in the orphan list for 30 days without being used again are deleted from the system on the next garbage collection. This timing is configurable via the collect_delay keyword argument to Pkg.gc(). A value of 0 will cause anything currently not in use to be collected immediately, skipping the orphans list entirely; If you are short on disk space and want to clean out as many unused packages and artifacts as possible, you may want to try this, but if you need these versions again, you will have to download them again. To run a typical garbage collection with default arguments, simply use the gc command at the pkg> REPL:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"(@v1.8) pkg> gc\n Active manifests at:\n `~/BinaryProvider/Manifest.toml`\n ...\n `~/Compat.jl/Manifest.toml`\n Active artifacts:\n `~/src/MyProject/Artifacts.toml`\n\n Deleted ~/.julia/packages/BenchmarkTools/1cAj: 146.302 KiB\n Deleted ~/.julia/packages/Cassette/BXVB: 795.557 KiB\n ...\n Deleted `~/.julia/artifacts/e44cdf2579a92ad5cbacd1cddb7414c8b9d2e24e` (152.253 KiB)\n Deleted `~/.julia/artifacts/f2df5266567842bbb8a06acca56bcabf813cd73f` (21.536 MiB)\n\n Deleted 36 package installations (113.205 MiB)\n Deleted 15 artifact installations (20.759 GiB)","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Note that only packages in ~/.julia/packages are deleted.","category":"page"},{"location":"managing-packages/#Offline-Mode","page":"3. Managing Packages","title":"Offline Mode","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"In offline mode, Pkg tries to do as much as possible without connecting to internet. For example, when adding a package Pkg only considers versions that are already downloaded in version resolution.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"To work in offline mode use import Pkg; Pkg.offline(true) or set the environment variable JULIA_PKG_OFFLINE to \"true\".","category":"page"},{"location":"managing-packages/#Pkg-client/server","page":"3. Managing Packages","title":"Pkg client/server","text":"","category":"section"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"When you add a new registered package, usually three things would happen:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"update registries,\ndownload the source code of the package,\nif not available, download artifacts required by the package.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"The General registry and most packages in it are developed on GitHub, while the artifacts data are hosted on various platforms. When the network connection to GitHub and AWS S3 is not stable, it is usually not a good experience to install or update packages. Fortunately, the pkg client/server feature improves the experience in the sense that:","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"If set, the pkg client would first try to download data from the pkg server,\nif that fails, then it falls back to downloading from the original sources (e.g., GitHub).","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"By default, the client makes upto 8 concurrent requests to the server. This can set by the environment variable JULIA_PKG_CONCURRENT_DOWNLOADS.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"Since Julia 1.5, https://pkg.julialang.org provided by the JuliaLang organization is used as the default pkg server. In most cases, this should be transparent, but users can still set/unset a pkg server upstream via the environment variable JULIA_PKG_SERVER.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"# manually set it to some pkg server\njulia> ENV[\"JULIA_PKG_SERVER\"] = \"pkg.julialang.org\"\n\"pkg.julialang.org\"\n\n# unset to always download data from original sources\njulia> ENV[\"JULIA_PKG_SERVER\"] = \"\"\n\"\"","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"For clarification, some sources are not provided by Pkg server","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"packages/registries fetched via git\n]add https://github.com/JuliaLang/Example.jl.git\n]add Example#v0.5.3 (Note that this is different from ]add Example@0.5.3)\n]registry add https://github.com/JuliaRegistries/General.git, including registries installed by Julia before 1.4.\nartifacts without download info\nTestImages","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"note: Note\nIf you have a new registry installed via pkg server, then it's impossible for old Julia versions to update the registry because Julia before 1.4 doesn't know how to fetch new data. Hence, for users that frequently switch between multiple Julia versions, it is recommended to still use git-controlled registries.","category":"page"},{"location":"managing-packages/","page":"3. Managing Packages","title":"3. Managing Packages","text":"For the deployment of pkg server, please refer to PkgServer.jl.","category":"page"},{"location":"environments/#Working-with-Environments","page":"4. Working with Environment","title":"4. Working with Environment","text":"","category":"section"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"The following discusses Pkg's interaction with environments. For more on the role, environments play in code loading, including the \"stack\" of environments from which code can be loaded, see this section in the Julia manual.","category":"page"},{"location":"environments/#Creating-your-own-environments","page":"4. Working with Environment","title":"Creating your own environments","text":"","category":"section"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"So far we have added packages to the default environment at ~/.julia/environments/v1.8. It is however easy to create other, independent, projects. This approach has the benefit of allowing you to check in a Project.toml, and even a Manifest.toml if you wish, into version control (e.g. git) alongside your code. It should be pointed out that when two projects use the same package at the same version, the content of this package is not duplicated. In order to create a new project, create a directory for it and then activate that directory to make it the \"active project\", which package operations manipulate:","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"(@v1.8) pkg> activate MyProject\nActivating new environment at `~/MyProject/Project.toml`\n\n(MyProject) pkg> st\n Status `~/MyProject/Project.toml` (empty project)","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"Note that the REPL prompt changes when the new project is activated. Until a package is added, there are no files in this environment and the directory to the environment might not even be created:","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"julia> isdir(\"MyProject\")\nfalse\n\n(MyProject) pkg> add Example\n Resolving package versions...\n Installed Example ─ v0.5.3\n Updating `~/MyProject/Project.toml`\n [7876af07] + Example v0.5.3\n Updating `~~/MyProject/Manifest.toml`\n [7876af07] + Example v0.5.3\nPrecompiling environment...\n 1 dependency successfully precompiled in 2 seconds\n\njulia> readdir(\"MyProject\")\n2-element Vector{String}:\n \"Manifest.toml\"\n \"Project.toml\"\n\njulia> print(read(joinpath(\"MyProject\", \"Project.toml\"), String))\n[deps]\nExample = \"7876af07-990d-54b4-ab0e-23690620f79a\"\n\njulia> print(read(joinpath(\"MyProject\", \"Manifest.toml\"), String))\n# This file is machine-generated - editing it directly is not advised\n\njulia_version = \"1.8.2\"\nmanifest_format = \"2.0\"\nproject_hash = \"2ca1c6c58cb30e79e021fb54e5626c96d05d5fdc\"\n\n[[deps.Example]]\ngit-tree-sha1 = \"46e44e869b4d90b96bd8ed1fdcf32244fddfb6cc\"\nuuid = \"7876af07-990d-54b4-ab0e-23690620f79a\"\nversion = \"0.5.3\"","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"This new environment is completely separate from the one we used earlier. See Project.toml and Manifest.toml for a more detailed explanation.","category":"page"},{"location":"environments/#Using-someone-else's-project","page":"4. Working with Environment","title":"Using someone else's project","text":"","category":"section"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"Simply clone their project using e.g. git clone, cd to the project directory and call","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"shell> git clone https://github.com/JuliaLang/Example.jl.git\nCloning into 'Example.jl'...\n...\n\n(@v1.8) pkg> activate Example.jl\nActivating project at `~/Example.jl`\n\n(Example) pkg> instantiate\n No Changes to `~/Example.jl/Project.toml`\n No Changes to `~/Example.jl/Manifest.toml`","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"If the project contains a manifest, this will install the packages in the same state that is given by that manifest. Otherwise, it will resolve the latest versions of the dependencies compatible with the project.","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"Note that activate by itself does not install missing dependencies. If you only have a Project.toml, a Manifest.toml must be generated by \"resolving\" the environment, then any missing packages must be installed and precompiled. instantiate does all this for you.","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"If you already have a resolved Manifest.toml, then you will still need to ensure that the packages are installed and with the correct versions. Again instantiate does this for you.","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"In short, instantiate is your friend to make sure an environment is ready to use. If there's nothing to do, instantiate does nothing.","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"note: Specifying project on startup\nInstead of using activate from within Julia, you can specify the project on startup using the --project= flag. For example, to run a script from the command line using the environment in the current directory you can run$ julia --project=. myscript.jl","category":"page"},{"location":"environments/#Temporary-environments","page":"4. Working with Environment","title":"Temporary environments","text":"","category":"section"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"Temporary environments make it easy to start an environment from a blank slate to test a package or set of packages, and have Pkg automatically delete the environment when you're done. For instance, when writing a bug report, you may want to test your minimal reproducible example in a 'clean' environment to ensure it's actually reproducible as written. You might also want a scratch space to try out a new package, or a sandbox to resolve version conflicts between several incompatible packages.","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"(@v1.8) pkg> activate --temp # requires Julia 1.5 or later\n Activating new environment at `/var/folders/34/km3mmt5930gc4pzq1d08jvjw0000gn/T/jl_a31egx/Project.toml`\n\n(jl_a31egx) pkg> add Example\n Updating registry at `~/.julia/registries/General`\n Resolving package versions...\n Updating `/private/var/folders/34/km3mmt5930gc4pzq1d08jvjw0000gn/T/jl_a31egx/Project.toml`\n [7876af07] + Example v0.5.3\n Updating `/private/var/folders/34/km3mmt5930gc4pzq1d08jvjw0000gn/T/jl_a31egx/Manifest.toml`\n [7876af07] + Example v0.5.3","category":"page"},{"location":"environments/#Shared-environments","page":"4. Working with Environment","title":"Shared environments","text":"","category":"section"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"A \"shared\" environment is simply an environment that exists in ~/.julia/environments. The default v1.8 environment is therefore a shared environment:","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"(@v1.8) pkg> st\nStatus `~/.julia/environments/v1.8/Project.toml`","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"Shared environments can be activated with the --shared flag to activate:","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"(@v1.8) pkg> activate --shared mysharedenv\n Activating project at `~/.julia/environments/mysharedenv`\n\n(@mysharedenv) pkg>","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"Shared environments have a @ before their name in the Pkg REPL prompt.","category":"page"},{"location":"environments/#Environment-Precompilation","page":"4. Working with Environment","title":"Environment Precompilation","text":"","category":"section"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"Before a package can be imported, Julia will \"precompile\" the source code into an intermediate more efficient cache on disc. This precompilation can be triggered via code loading if the un-imported package is new or has changed since the last cache","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"julia> using Example\n[ Info: Precompiling Example [7876af07-990d-54b4-ab0e-23690620f79a]","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"or using Pkg's precompile option, which can precompile the entire environment, or a given dependency, and do so in parallel, which can be significantly faster than the code-load route above.","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"(@v1.8) pkg> precompile\nPrecompiling environment...\n 23 dependencies successfully precompiled in 36 seconds","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"However, neither of these should be routinely required thanks to Pkg's automatic precompilation.","category":"page"},{"location":"environments/#Automatic-Precompilation","page":"4. Working with Environment","title":"Automatic Precompilation","text":"","category":"section"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"By default, any package that is added to a project or updated in a Pkg action will be automatically precompiled, along with its dependencies.","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"(@v1.8) pkg> add Images\n Resolving package versions...\n Updating `~/.julia/environments/v1.9/Project.toml`\n [916415d5] + Images v0.25.2\n Updating `~/.julia/environments/v1.9/Manifest.toml`\n ...\nPrecompiling environment...\n Progress [===================> ] 45/97\n ✓ NaNMath\n ✓ IntervalSets\n ◐ CoordinateTransformations\n ◑ ArnoldiMethod\n ◑ IntegralArrays\n ◒ RegionTrees\n ◐ ChangesOfVariables\n ◓ PaddedViews","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"The exception is the develop command, which neither builds nor precompiles the package. When that happens is left up to the user to decide.","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"If a given package version errors during auto-precompilation, Pkg will remember for the following times it automatically tries and will skip that package with a brief warning. Manual precompilation can be used to force these packages to be retried, as pkg> precompile will always retry all packages.","category":"page"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"To disable the auto-precompilation, set ENV[\"JULIA_PKG_PRECOMPILE_AUTO\"]=0.","category":"page"},{"location":"environments/#Precompiling-new-versions-of-loaded-packages","page":"4. Working with Environment","title":"Precompiling new versions of loaded packages","text":"","category":"section"},{"location":"environments/","page":"4. Working with Environment","title":"4. Working with Environment","text":"If a package that has been updated is already loaded in the session, the precompilation process will go ahead and precompile the new version, and any packages that depend on it, but will note that the package cannot be used until session restart.","category":"page"},{"location":"creating-packages/#**5.**-Creating-Packages","page":"5. Creating Packages","title":"5. Creating Packages","text":"","category":"section"},{"location":"creating-packages/#Generating-files-for-a-package","page":"5. Creating Packages","title":"Generating files for a package","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"note: Note\nThe PkgTemplates package offers an easy, repeatable, and customizable way to generate the files for a new package. It can also generate files needed for Documentation, CI, etc. We recommend that you use PkgTemplates for creating new packages instead of using the minimal pkg> generate functionality described below.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"To generate the bare minimum files for a new package, use pkg> generate.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"(@v1.8) pkg> generate HelloWorld","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"This creates a new project HelloWorld in a subdirectory by the same name, with the following files (visualized with the external tree command):","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"shell> tree HelloWorld/\nHelloWorld/\n├── Project.toml\n└── src\n └── HelloWorld.jl\n\n2 directories, 2 files","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"The Project.toml file contains the name of the package, its unique UUID, its version, the authors and potential dependencies:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"name = \"HelloWorld\"\nuuid = \"b4cd1eb8-1e24-11e8-3319-93036a3eb9f3\"\nversion = \"0.1.0\"\nauthors = [\"Some One \"]\n\n[deps]","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"The content of src/HelloWorld.jl is:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"module HelloWorld\n\ngreet() = print(\"Hello World!\")\n\nend # module","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"We can now activate the project by using the path to the directory where it is installed, and load the package:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"pkg> activate ./HelloWorld\n\njulia> import HelloWorld\n\njulia> HelloWorld.greet()\nHello World!","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"For the rest of the tutorial we enter inside the directory of the project, for convenience:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"julia> cd(\"HelloWorld\")","category":"page"},{"location":"creating-packages/#Adding-dependencies-to-the-project","page":"5. Creating Packages","title":"Adding dependencies to the project","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Let’s say we want to use the standard library package Random and the registered package JSON in our project. We simply add these packages (note how the prompt now shows the name of the newly generated project, since we activated it):","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"(HelloWorld) pkg> add Random JSON\n Resolving package versions...\n Updating `~/HelloWorld/Project.toml`\n [682c06a0] + JSON v0.21.3\n [9a3f8284] + Random\n Updating `~/HelloWorld/Manifest.toml`\n [682c06a0] + JSON v0.21.3\n [69de0a69] + Parsers v2.4.0\n [ade2ca70] + Dates\n ...","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Both Random and JSON got added to the project’s Project.toml file, and the resulting dependencies got added to the Manifest.toml file. The resolver has installed each package with the highest possible version, while still respecting the compatibility that each package enforces on its dependencies.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"We can now use both Random and JSON in our project. Changing src/HelloWorld.jl to","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"module HelloWorld\n\nimport Random\nimport JSON\n\ngreet() = print(\"Hello World!\")\ngreet_alien() = print(\"Hello \", Random.randstring(8))\n\nend # module","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"and reloading the package, the new greet_alien function that uses Random can be called:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"julia> HelloWorld.greet_alien()\nHello aT157rHV","category":"page"},{"location":"creating-packages/#Adding-a-build-step-to-the-package","page":"5. Creating Packages","title":"Adding a build step to the package","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"The build step is executed the first time a package is installed or when explicitly invoked with build. A package is built by executing the file deps/build.jl.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"julia> mkpath(\"deps\");\n\njulia> write(\"deps/build.jl\",\n \"\"\"\n println(\"I am being built...\")\n \"\"\");\n\n(HelloWorld) pkg> build\n Building HelloWorld → `deps/build.log`\n Resolving package versions...\n\njulia> print(readchomp(\"deps/build.log\"))\nI am being built...","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"If the build step fails, the output of the build step is printed to the console","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"julia> write(\"deps/build.jl\",\n \"\"\"\n error(\"Ooops\")\n \"\"\");\n\n(HelloWorld) pkg> build\n Building HelloWorld → `~/HelloWorld/deps/build.log`\nERROR: Error building `HelloWorld`:\nERROR: LoadError: Ooops\nStacktrace:\n [1] error(s::String)\n @ Base ./error.jl:35\n [2] top-level scope\n @ ~/HelloWorld/deps/build.jl:1\n [3] include(fname::String)\n @ Base.MainInclude ./client.jl:476\n [4] top-level scope\n @ none:5\nin expression starting at /home/kc/HelloWorld/deps/build.jl:1","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"warning: Warning\nA build step should generally not create or modify any files in the package directory. If you need to store some files from the build step, use the Scratch.jl package.","category":"page"},{"location":"creating-packages/#Adding-tests-to-the-package","page":"5. Creating Packages","title":"Adding tests to the package","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"When a package is tested the file test/runtests.jl is executed:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"julia> mkpath(\"test\");\n\njulia> write(\"test/runtests.jl\",\n \"\"\"\n println(\"Testing...\")\n \"\"\");\n\n(HelloWorld) pkg> test\n Testing HelloWorld\n Resolving package versions...\nTesting...\n Testing HelloWorld tests passed","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Tests are run in a new Julia process, where the package itself, and any test-specific dependencies, are available, see below.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"warning: Warning\nTests should generally not create or modify any files in the package directory. If you need to store some files from the build step, use the Scratch.jl package.","category":"page"},{"location":"creating-packages/#Test-specific-dependencies","page":"5. Creating Packages","title":"Test-specific dependencies","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"There are two ways of adding test-specific dependencies (dependencies that are not dependencies of the package but will still be available to load when the package is tested).","category":"page"},{"location":"creating-packages/#target-based-test-specific-dependencies","page":"5. Creating Packages","title":"target based test specific dependencies","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Using this method of adding test-specific dependencies, the packages are added under an [extras] section and to a test target, e.g. to add Markdown and Test as test dependencies, add the following:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"[extras]\nMarkdown = \"d6f4376e-aef5-505a-96c1-9c027394607a\"\nTest = \"8dfed614-e22c-5e08-85e1-65c5234f0b40\"\n\n[targets]\ntest = [\"Markdown\", \"Test\"]","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"to the Project.toml file. There are no other \"targets\" than test.","category":"page"},{"location":"creating-packages/#test/Project.toml-file-test-specific-dependencies","page":"5. Creating Packages","title":"test/Project.toml file test specific dependencies","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"note: Note\nThe exact interaction between Project.toml, test/Project.toml and their corresponding Manifest.tomls are not fully worked out and may be subject to change in future versions. The old method of adding test-specific dependencies, described in the next section, will therefore be supported throughout all Julia 1.X releases.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"is given by test/Project.toml. Thus, when running tests, this will be the active project, and only dependencies to the test/Project.toml project can be used. Note that Pkg will add the tested package itself implicitly.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"note: Note\nIf no test/Project.toml exists Pkg will use the target based test specific dependencies.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"To add a test-specific dependency, i.e. a dependency that is available only when testing, it is thus enough to add this dependency to the test/Project.toml project. This can be done from the Pkg REPL by activating this environment, and then use add as one normally does. Let's add the Test standard library as a test dependency:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"(HelloWorld) pkg> activate ./test\n[ Info: activating environment at `~/HelloWorld/test/Project.toml`.\n\n(test) pkg> add Test\n Resolving package versions...\n Updating `~/HelloWorld/test/Project.toml`\n [8dfed614] + Test\n Updating `~/HelloWorld/test/Manifest.toml`\n [...]","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"We can now use Test in the test script and we can see that it gets installed when testing:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"julia> write(\"test/runtests.jl\",\n \"\"\"\n using Test\n @test 1 == 1\n \"\"\");\n\n(test) pkg> activate .\n\n(HelloWorld) pkg> test\n Testing HelloWorld\n Resolving package versions...\n Updating `/var/folders/64/76tk_g152sg6c6t0b4nkn1vw0000gn/T/tmpPzUPPw/Project.toml`\n [d8327f2a] + HelloWorld v0.1.0 [`~/.julia/dev/Pkg/HelloWorld`]\n [8dfed614] + Test\n Updating `/var/folders/64/76tk_g152sg6c6t0b4nkn1vw0000gn/T/tmpPzUPPw/Manifest.toml`\n [d8327f2a] + HelloWorld v0.1.0 [`~/.julia/dev/Pkg/HelloWorld`]\n Testing HelloWorld tests passed```","category":"page"},{"location":"creating-packages/#Compatibility-on-dependencies","page":"5. Creating Packages","title":"Compatibility on dependencies","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Every dependency should in general have a compatibility constraint on it. This is an important topic so there is a separate chapter about it: Compatibility.","category":"page"},{"location":"creating-packages/#Weak-dependencies","page":"5. Creating Packages","title":"Weak dependencies","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"note: Note\nThis is a somewhat advanced usage of Pkg which can be skipped for people new to Julia and Julia packages.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"compat: Compat\nThe described feature requires Julia 1.9+.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"A weak dependency is a dependency that will not automatically install when the package is installed but you can still control what versions of that package are allowed to be installed by setting compatibility on it. These are listed in the project file under the [weakdeps] section:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"[weakdeps]\nSomePackage = \"b3785f31-9d33-4cdf-bc73-f646780f1739\"\n\n[compat]\nSomePackage = \"1.2\"","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"The current usage of this is almost solely limited to \"extensions\" which is described in the next section.","category":"page"},{"location":"creating-packages/#Conditional-loading-of-code-in-packages-(Extensions)","page":"5. Creating Packages","title":"Conditional loading of code in packages (Extensions)","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"note: Note\nThis is a somewhat advanced usage of Pkg which can be skipped for people new to Julia and Julia packages.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"compat: Compat\nThe described feature requires Julia 1.9+.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Sometimes one wants to make two or more packages work well together, but may be reluctant (perhaps due to increased load times) to make one an unconditional dependency of the other. A package extension is a module in a file (similar to a package) that is automatically loaded when some other set of packages are loaded into the Julia session. This is very similar to functionality that the external package Requires.jl provides, but which is now available directly through Julia, and provides added benefits such as being able to precompile the extension.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"A useful application of extensions could be for a plotting package that should be able to plot objects from a wide variety of different Julia packages. Adding all those different Julia packages as dependencies of the plotting package could be expensive since they would end up getting loaded even if they were never used. Instead, the code required to plot objects for specific packages can be put into separate files (extensions) and these are loaded only when the packages that define the type(s) we want to plot are loaded.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Below is an example of how the code can be structured for a use case in which a Plotting package wants to be able to display objects defined in the external package Contour. The file and folder structure shown below is found in the Plotting package.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Project.toml:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"name = \"Plotting\"\nversion = \"0.1.0\"\nuuid = \"...\"\n\n[weakdeps]\nContour = \"d38c429a-6771-53c6-b99e-75d170b6e991\"\n\n[extensions]\n# name of extension to the left\n# extension dependencies required to load the extension to the right\n# use a list for multiple extension dependencies\nPlottingContourExt = \"Contour\"\n\n[compat]\nContour = \"0.6.2\"","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"src/Plotting.jl:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"module Plotting\n\nfunction plot(x::Vector)\n # Some functionality for plotting a vector here\nend\n\nend # module","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"ext/PlottingContourExt.jl (can also be in ext/PlottingContourExt/PlottingContourExt.jl):","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"module PlottingContourExt # Should be same name as the file (just like a normal package)\n\nusing Plotting, Contour\n\nfunction Plotting.plot(c::Contour.ContourCollection)\n # Some functionality for plotting a contour here\nend\n\nend # module","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Extensions can have any arbitrary name (here PlottingContourExt), but using something similar to the format of this example that makes the extended functionality and dependency of the extension clear is likely a good idea.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"A user that depends only on Plotting will not pay the cost of the \"extension\" inside the PlottingContourExt module. It is only when the Contour package actually gets loaded that the PlottingContourExt extension is loaded and provides the new functionality.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"If one considers PlottingContourExt as a completely separate package, it could be argued that defining Plotting.plot(c::Contour.ContourCollection) is type piracy since PlottingContourExt owns neither the method Plotting.plot nor the type Contour.ContourCollection. However, for extensions, it is ok to assume that the extension owns the methods in its parent package. In fact, this form of type piracy is one of the most standard use cases for extensions.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"compat: Compat\nOften you will put the extension dependencies into the test target so they are loaded when running e.g. Pkg.test(). On earlier Julia versions this requires you to also put the package in the [extras] section. This is unfortunate but the project verifier on older Julia versions will complain if this is not done.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"note: Note\nIf you use a manifest generated by a Julia version that does not know about extensions with a Julia version that does know about them, the extensions will not load. This is because the manifest lacks some information that tells Julia when it should load these packages. So make sure you use a manifest generated at least the Julia version you are using.","category":"page"},{"location":"creating-packages/#Backwards-compatibility","page":"5. Creating Packages","title":"Backwards compatibility","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"This section discusses various methods for using extensions on Julia versions that support them, while simultaneously providing similar functionality on older Julia versions.","category":"page"},{"location":"creating-packages/#Requires.jl","page":"5. Creating Packages","title":"Requires.jl","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"This section is relevant if you are currently using Requires.jl but want to transition to using extensions (while still having Requires be used on Julia versions that do not support extensions). This is done by making the following changes (using the example above):","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Add the following to the package file. This makes it so that Requires.jl loads and inserts the callback only when extensions are not supported\n# This symbol is only defined on Julia versions that support extensions\nif !isdefined(Base, :get_extension)\nusing Requires\nend\n\n@static if !isdefined(Base, :get_extension)\nfunction __init__()\n @require Contour = \"d38c429a-6771-53c6-b99e-75d170b6e991\" include(\"../ext/PlottingContourExt.jl\")\nend\nend\nor if you have other things in your __init__() function:\nif !isdefined(Base, :get_extension)\nusing Requires\nend\n\nfunction __init__()\n # Other init functionality here\n\n @static if !isdefined(Base, :get_extension)\n @require Contour = \"d38c429a-6771-53c6-b99e-75d170b6e991\" include(\"../ext/PlottingContourExt.jl\")\n end\nend\nMake the following change in the conditionally-loaded code:\nisdefined(Base, :get_extension) ? (using Contour) : (using ..Contour)\nAdd Requires to [weakdeps] in your Project.toml file, so that it is listed in both [deps] and [weakdeps]. Julia 1.9+ knows to not install it as a regular dependency, whereas earlier versions will consider it a dependency.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"The package should now work with Requires.jl on Julia versions before extensions were introduced and with extensions on more recent Julia versions.","category":"page"},{"location":"creating-packages/#Transition-from-normal-dependency-to-extension","page":"5. Creating Packages","title":"Transition from normal dependency to extension","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"This section is relevant if you have a normal dependency that you want to transition be an extension (while still having the dependency be a normal dependency on Julia versions that do not support extensions). This is done by making the following changes (using the example above):","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Make sure that the package is both in the [deps] and [weakdeps] section. Newer Julia versions will ignore dependencies in [deps] that are also in [weakdeps].\nAdd the following to your main package file (typically at the bottom):\nif !isdefined(Base, :get_extension)\n include(\"../ext/PlottingContourExt.jl\")\nend","category":"page"},{"location":"creating-packages/#Using-an-extension-while-supporting-older-Julia-versions","page":"5. Creating Packages","title":"Using an extension while supporting older Julia versions","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"In the case where one wants to use an extension (without worrying about the feature of the extension begin available on older Julia versions) while still supporting older Julia versions the packages under [weakdeps] should be duplicated into [extras]. This is an unfortunate duplication, but without doing this the project verifier under older Julia versions will throw an error if it finds packages under [compat] that is not listed in [extras].","category":"page"},{"location":"creating-packages/#Package-naming-guidelines","page":"5. Creating Packages","title":"Package naming guidelines","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Package names should be sensible to most Julia users, even to those who are not domain experts. The following guidelines apply to the General registry but may be useful for other package registries as well.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Since the General registry belongs to the entire community, people may have opinions about your package name when you publish it, especially if it's ambiguous or can be confused with something other than what it is. Usually, you will then get suggestions for a new name that may fit your package better.","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Avoid jargon. In particular, avoid acronyms unless there is minimal possibility of confusion.\nIt's ok to say USA if you're talking about the USA.\nIt's not ok to say PMA, even if you're talking about positive mental attitude.\nAvoid using Julia in your package name or prefixing it with Ju.\nIt is usually clear from context and to your users that the package is a Julia package.\nPackage names already have a .jl extension, which communicates to users that Package.jl is a Julia package.\nHaving Julia in the name can imply that the package is connected to, or endorsed by, contributors to the Julia language itself.\nPackages that provide most of their functionality in association with a new type should have pluralized names.\nDataFrames provides the DataFrame type.\nBloomFilters provides the BloomFilter type.\nIn contrast, JuliaParser provides no new type, but instead new functionality in the JuliaParser.parse() function.\nErr on the side of clarity, even if clarity seems long-winded to you.\nRandomMatrices is a less ambiguous name than RndMat or RMT, even though the latter are shorter.\nA less systematic name may suit a package that implements one of several possible approaches to its domain.\nJulia does not have a single comprehensive plotting package. Instead, Gadfly, PyPlot, Winston and other packages each implement a unique approach based on a particular design philosophy.\nIn contrast, SortingAlgorithms provides a consistent interface to use many well-established sorting algorithms.\nPackages that wrap external libraries or programs should be named after those libraries or programs.\nCPLEX.jl wraps the CPLEX library, which can be identified easily in a web search.\nMATLAB.jl provides an interface to call the MATLAB engine from within Julia.\nAvoid naming a package closely to an existing package\nWebsocket is too close to WebSockets and can be confusing to users. Rather use a new name such as SimpleWebsockets.","category":"page"},{"location":"creating-packages/#Registering-packages","page":"5. Creating Packages","title":"Registering packages","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Once a package is ready it can be registered with the General Registry (see also the FAQ). Currently, packages are submitted via Registrator. In addition to Registrator, TagBot helps manage the process of tagging releases.","category":"page"},{"location":"creating-packages/#Best-Practices","page":"5. Creating Packages","title":"Best Practices","text":"","category":"section"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Packages should avoid mutating their own state (writing to files within their package directory). Packages should, in general, not assume that they are located in a writable location (e.g. if installed as part of a system-wide depot) or even a stable one (e.g. if they are bundled into a system image by PackageCompiler.jl). To support the various use cases in the Julia package ecosystem, the Pkg developers have created a number of auxiliary packages and techniques to help package authors create self-contained, immutable, and relocatable packages:","category":"page"},{"location":"creating-packages/","page":"5. Creating Packages","title":"5. Creating Packages","text":"Artifacts can be used to bundle chunks of data alongside your package, or even allow them to be downloaded on-demand. Prefer artifacts over attempting to open a file via a path such as joinpath(@__DIR__, \"data\", \"my_dataset.csv\") as this is non-relocatable. Once your package has been precompiled, the result of @__DIR__ will have been baked into your precompiled package data, and if you attempt to distribute this package, it will attempt to load files at the wrong location. Artifacts can be bundled and accessed easily using the artifact\"name\" string macro.\nScratch.jl provides the notion of \"scratch spaces\", mutable containers of data for packages. Scratch spaces are designed for data caches that are completely managed by a package and should be removed when the package itself is uninstalled. For important user-generated data, packages should continue to write out to a user-specified path that is not managed by Julia or Pkg.\nPreferences.jl allows packages to read and write preferences to the top-level Project.toml. These preferences can be read at runtime or compile-time, to enable or disable different aspects of package behavior. Packages previously would write out files to their own package directories to record options set by the user or environment, but this is highly discouraged now that Preferences is available.","category":"page"},{"location":"repl/#REPL-Mode-Reference","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"","category":"section"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"This section describes available commands in the Pkg REPL. The Pkg REPL mode is mostly meant for interactive use, and for non-interactive use it is recommended to use the functional API, see API Reference.","category":"page"},{"location":"repl/#package-commands","page":"11. REPL Mode Reference","title":"package commands","text":"","category":"section"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n add\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"add\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n build\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"build\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n compat\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"compat\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n develop\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"develop\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n free\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"free\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n generate\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"generate\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n pin\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"pin\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n remove\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"remove\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n test\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"test\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n update\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"update\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/#registry-commands","page":"11. REPL Mode Reference","title":"registry commands","text":"","category":"section"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n registry add\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"registry add\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n registry remove\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"registry remove\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n registry status\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"registry status\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n registry update\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"registry update\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/#Other-commands","page":"11. REPL Mode Reference","title":"Other commands","text":"","category":"section"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n activate\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"activate\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n gc\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"gc\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n help\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"help\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n instantiate\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"instantiate\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n precompile\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"precompile\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n resolve\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"resolve\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      \n \n status\n \n —\n REPL command\n
      \n
      ","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"using Pkg\nDict(Pkg.REPLMode.canonical_names())[\"status\"].help","category":"page"},{"location":"repl/","page":"11. REPL Mode Reference","title":"11. REPL Mode Reference","text":"
      \n
      ","category":"page"},{"location":"#**1.**-Introduction","page":"1. Introduction","title":"1. Introduction","text":"","category":"section"},{"location":"","page":"1. Introduction","title":"1. Introduction","text":"Welcome to the documentation for Pkg, Julia's package manager. The documentation covers many things, for example managing package installations, developing packages, working with package registries and more.","category":"page"},{"location":"","page":"1. Introduction","title":"1. Introduction","text":"Throughout the manual the REPL interface to Pkg, the Pkg REPL mode, is used in the examples. There is also a functional API, which is preferred when not working interactively. This API is documented in the API Reference section.","category":"page"},{"location":"#Background-and-Design","page":"1. Introduction","title":"Background and Design","text":"","category":"section"},{"location":"","page":"1. Introduction","title":"1. Introduction","text":"Unlike traditional package managers, which install and manage a single global set of packages, Pkg is designed around “environments”: independent sets of packages that can be local to an individual project or shared and selected by name. The exact set of packages and versions in an environment is captured in a manifest file which can be checked into a project repository and tracked in version control, significantly improving reproducibility of projects. If you’ve ever tried to run code you haven’t used in a while only to find that you can’t get anything to work because you’ve updated or uninstalled some of the packages your project was using, you’ll understand the motivation for this approach. In Pkg, since each project maintains its own independent set of package versions, you’ll never have this problem again. Moreover, if you check out a project on a new system, you can simply materialize the environment described by its manifest file and immediately be up and running with a known-good set of dependencies.","category":"page"},{"location":"","page":"1. Introduction","title":"1. Introduction","text":"Since environments are managed and updated independently from each other, “dependency hell” is significantly alleviated in Pkg. If you want to use the latest and greatest version of some package in a new project but you’re stuck on an older version in a different project, that’s no problem – since they have separate environments they can just use different versions, which are both installed at the same time in different locations on your system. The location of each package version is canonical, so when environments use the same versions of packages, they can share installations, avoiding unnecessary duplication of the package. Old package versions that are no longer used by any environments are periodically “garbage collected” by the package manager.","category":"page"},{"location":"","page":"1. Introduction","title":"1. Introduction","text":"Pkg’s approach to local environments may be familiar to people who have used Python’s virtualenv or Ruby’s bundler. In Julia, instead of hacking the language’s code loading mechanisms to support environments, we have the benefit that Julia natively understands them. In addition, Julia environments are “stackable”: you can overlay one environment with another and thereby have access to additional packages outside of the primary environment. This makes it easy to work on a project, which provides the primary environment, while still having access from the REPL to all your usual dev tools like profilers, debuggers, and so on, just by having an environment including these dev tools later in the load path.","category":"page"},{"location":"","page":"1. Introduction","title":"1. Introduction","text":"Last but not least, Pkg is designed to support federated package registries. This means that it allows multiple registries managed by different parties to interact seamlessly. In particular, this includes private registries which can live behind corporate firewalls. You can install and update your own packages from a private registry with exactly the same tools and workflows that you use to install and manage official Julia packages. If you urgently need to apply a hotfix for a public package that’s critical to your company’s product, you can tag a private version of it in your company’s internal registry and get a fix to your developers and ops teams quickly and easily without having to wait for an upstream patch to be accepted and published. Once an official fix is published, however, you can just upgrade your dependencies and you'll be back on an official release again.","category":"page"}] +} diff --git a/previews/PR3585/siteinfo.js b/previews/PR3585/siteinfo.js new file mode 100644 index 0000000000..8d76335c43 --- /dev/null +++ b/previews/PR3585/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "previews/PR3585"; diff --git a/previews/PR3585/toml-files/index.html b/previews/PR3585/toml-files/index.html new file mode 100644 index 0000000000..069370dfa5 --- /dev/null +++ b/previews/PR3585/toml-files/index.html @@ -0,0 +1,48 @@ + +10. Project.toml and Manifest.toml · Pkg.jl

      10. Project.toml and Manifest.toml

      Two files that are central to Pkg are Project.toml and Manifest.toml. Project.toml and Manifest.toml are written in TOML (hence the .toml extension) and include information about dependencies, versions, package names, UUIDs etc.

      Note

      The Project.toml and Manifest.toml files are not only used by the package manager; they are also used by Julia's code loading, and determine e.g. what using Example should do. For more details see the section about Code Loading in the Julia manual.

      Project.toml

      The project file describes the project on a high level, for example, the package/project dependencies and compatibility constraints are listed in the project file. The file entries are described below.

      The authors field

      For a package, the optional authors field is a list of strings describing the package authors, in the form NAME <EMAIL>. For example:

      authors = ["Some One <someone@email.com>",
      +           "Foo Bar <foo@bar.com>"]

      The name field

      The name of the package/project is determined by the name field, for example:

      name = "Example"

      The name must be a valid identifier (a sequence of Unicode characters that does not start with a number and is neither true nor false). For packages, it is recommended to follow the package naming guidelines. The name field is mandatory for packages.

      The uuid field

      uuid is a string with a universally unique identifier for the package/project, for example:

      uuid = "7876af07-990d-54b4-ab0e-23690620f79a"

      The uuid field is mandatory for packages.

      Note

      It is recommended that UUIDs.uuid4() is used to generate random UUIDs.

      The version field

      version is a string with the version number for the package/project. It should consist of three numbers, major version, minor version, and patch number, separated with a ., for example:

      version = "1.2.5"

      Julia uses Semantic Versioning (SemVer) and the version field should follow SemVer. The basic rules are:

      • Before 1.0.0, anything goes, but when you make breaking changes the minor version should be incremented.
      • After 1.0.0 only make breaking changes when incrementing the major version.
      • After 1.0.0 no new public API should be added without incrementing the minor version. This includes, in particular, new types, functions, methods, and method overloads, from Base or other packages.

      See also the section on Compatibility.

      Note that Pkg.jl deviates from the SemVer specification when it comes to versions pre-1.0.0. See the section on pre-1.0 behavior for more details.

      The [deps] section

      All dependencies of the package/project are listed in the [deps] section. Each dependency is listed as a name-uuid pair, for example:

      [deps]
      +Example = "7876af07-990d-54b4-ab0e-23690620f79a"
      +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

      Typically it is not needed to manually add entries to the [deps] section; this is instead handled by Pkg operations such as add.

      The [compat] section

      Compatibility constraints for the dependencies listed under [deps] can be listed in the [compat] section. Example:

      [deps]
      +Example = "7876af07-990d-54b4-ab0e-23690620f79a"
      +
      +[compat]
      +Example = "1.2"

      The Compatibility section describes the different possible compatibility constraints in detail. It is also possible to list constraints on julia itself, although julia is not listed as a dependency in the [deps] section:

      [compat]
      +julia = "1.1"

      Manifest.toml

      The manifest file is an absolute record of the state of the packages in the environment. It includes exact information about (direct and indirect) dependencies of the project. Given a Project.toml + Manifest.toml pair, it is possible to instantiate the exact same package environment, which is very useful for reproducibility. For the details, see Pkg.instantiate.

      Note

      The Manifest.toml file is generated and maintained by Pkg and, in general, this file should never be modified manually.

      Manifest.toml entries

      There are three top-level entries in the manifest which could look like this:

      julia_version = "1.8.2"
      +manifest_format = "2.0"
      +project_hash = "4d9d5b552a1236d3c1171abf88d59da3aaac328a"

      This shows the Julia version the manifest was created on, the "format" of the manifest and a hash of the project file, so that it is possible to see when the manifest is stale compared to the project file.

      Each dependency has its own section in the manifest file, and its content varies depending on how the dependency was added to the environment. Every dependency section includes a combination of the following entries:

      • uuid: the UUID for the dependency, for example uuid = "7876af07-990d-54b4-ab0e-23690620f79a".
      • deps: a vector listing the dependencies of the dependency, for example deps = ["Example", "JSON"].
      • version: a version number, for example version = "1.2.6".
      • path: a file path to the source code, for example path = /home/user/Example.
      • repo-url: a URL to the repository where the source code was found, for example repo-url = "https://github.com/JuliaLang/Example.jl.git".
      • repo-rev: a git revision, for example a branch repo-rev = "master" or a commit repo-rev = "66607a62a83cb07ab18c0b35c038fcd62987c9b1".
      • git-tree-sha1: a content hash of the source tree, for example git-tree-sha1 = "ca3820cc4e66f473467d912c4b2b3ae5dc968444".

      Added package

      When a package is added from a package registry, for example by invoking pkg> add Example or with a specific version pkg> add Example@1.2, the resulting Manifest.toml entry looks like:

      [[deps.Example]]
      +deps = ["DependencyA", "DependencyB"]
      +git-tree-sha1 = "8eb7b4d4ca487caade9ba3e85932e28ce6d6e1f8"
      +uuid = "7876af07-990d-54b4-ab0e-23690620f79a"
      +version = "1.2.3"

      Note, in particular, that no repo-url is present, since that information is included in the registry where this package was found.

      Added package by branch

      The resulting dependency section when adding a package specified by a branch, e.g. pkg> add Example#master or pkg> add https://github.com/JuliaLang/Example.jl.git, looks like:

      [[deps.Example]]
      +deps = ["DependencyA", "DependencyB"]
      +git-tree-sha1 = "54c7a512469a38312a058ec9f429e1db1f074474"
      +repo-rev = "master"
      +repo-url = "https://github.com/JuliaLang/Example.jl.git"
      +uuid = "7876af07-990d-54b4-ab0e-23690620f79a"
      +version = "1.2.4"

      Note that both the branch we are tracking (master) and the remote repository url ("https://github.com/JuliaLang/Example.jl.git") are stored in the manifest.

      Added package by commit

      The resulting dependency section when adding a package specified by a commit, e.g. pkg> add Example#cf6ba6cc0be0bb5f56840188563579d67048be34, looks like:

      [[deps.Example]]
      +deps = ["DependencyA", "DependencyB"]
      +git-tree-sha1 = "54c7a512469a38312a058ec9f429e1db1f074474"
      +repo-rev = "cf6ba6cc0be0bb5f56840188563579d67048be34"
      +repo-url = "https://github.com/JuliaLang/Example.jl.git"
      +uuid = "7876af07-990d-54b4-ab0e-23690620f79a"
      +version = "1.2.4"

      The only difference from tracking a branch is the content of repo-rev.

      Developed package

      The resulting dependency section when adding a package with develop, e.g. pkg> develop Example or pkg> develop /path/to/local/folder/Example, looks like:

      [[deps.Example]]
      +deps = ["DependencyA", "DependencyB"]
      +path = "/home/user/.julia/dev/Example/"
      +uuid = "7876af07-990d-54b4-ab0e-23690620f79a"
      +version = "1.2.4"

      Note that the path to the source code is included, and changes made to that source tree is directly reflected.

      Pinned package

      Pinned packages are also recorded in the manifest file; the resulting dependency section e.g. pkg> add Example; pin Example looks like:

      [[deps.Example]]
      +deps = ["DependencyA", "DependencyB"]
      +git-tree-sha1 = "54c7a512469a38312a058ec9f429e1db1f074474"
      +pinned = true
      +uuid = "7876af07-990d-54b4-ab0e-23690620f79a"
      +version = "1.2.4"

      The only difference is the addition of the pinned = true entry.

      Multiple packages with the same name

      Julia differentiates packages based on UUID, which means that the name alone is not enough to identify a package. It is possible to have multiple packages in the same environment with the same name, but with different UUID. In such a situation the Manifest.toml file looks a bit different. Consider for example the situation where you have added A and B to your environment, and the Project.toml file looks as follows:

      [deps]
      +A = "ead4f63c-334e-11e9-00e6-e7f0a5f21b60"
      +B = "edca9bc6-334e-11e9-3554-9595dbb4349c"

      If A now depends on B = "f41f7b98-334e-11e9-1257-49272045fb24", i.e. another package named B there will be two different B packages in the Manifest.toml file. In this case, the full Manifest.toml file, with git-tree-sha1 and version fields removed for clarity, looks like this:

      [[deps.A]]
      +uuid = "ead4f63c-334e-11e9-00e6-e7f0a5f21b60"
      +
      +    [deps.A.deps]
      +    B = "f41f7b98-334e-11e9-1257-49272045fb24"
      +
      +[[deps.B]]
      +uuid = "f41f7b98-334e-11e9-1257-49272045fb24"
      +[[deps.B]]
      +uuid = "edca9bc6-334e-11e9-3554-9595dbb4349c"

      There is now an array of the two B packages, and the [deps] section for A has been expanded to be explicit about which B package A depends on.