diff --git a/.github/workflows/base_node_binaries.yml b/.github/workflows/base_node_binaries.yml
index 0da2411273..b41ee1f406 100644
--- a/.github/workflows/base_node_binaries.yml
+++ b/.github/workflows/base_node_binaries.yml
@@ -132,6 +132,12 @@ jobs:
target
key: ${{ runner.os }}-${{ matrix.os }}-${{ matrix.target_cpu }}-${{ matrix.features }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
+ - name: Compile NPM
+ run: |
+ cd applications/launchpad/gui-vue
+ npm install
+ npm run build
+
- name: Build binaries
env:
RUSTFLAGS: "-C target_cpu=${{ matrix.target_cpu }}"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9d9961d7e8..8b984d23ae 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,7 +12,7 @@ name: CI
env:
CARGO_HTTP_MULTIPLEXING: false
PROTOC: protoc
- toolchain: nightly-2021-09-18
+ toolchain: nightly-2021-11-20
jobs:
clippy:
@@ -23,17 +23,25 @@ jobs:
run: |
sudo apt-get update && \
sudo apt-get -y install \
- libssl-dev \
- openssl \
- libsqlite3-dev \
- pkg-config \
- git \
- cmake \
- zip \
- libc++-dev \
- libc++abi-dev \
- libprotobuf-dev \
- protobuf-compiler
+ libssl-dev \
+ openssl \
+ libsqlite3-dev \
+ pkg-config \
+ git \
+ cmake \
+ zip \
+ libc++-dev \
+ libc++abi-dev \
+ libprotobuf-dev \
+ protobuf-compiler \
+ libwebkit2gtk-4.0-dev \
+ build-essential \
+ curl \
+ wget \
+ libgtk-3-dev \
+ libappindicator3-dev \
+ patchelf \
+ librsvg2-dev
- name: checkout
uses: actions/checkout@v2
- name: toolchain
@@ -55,6 +63,11 @@ jobs:
with:
command: fmt
args: --all -- --check
+ - name: Compile NPM
+ run: |
+ cd applications/launchpad/gui-vue
+ npm install
+ npm run build
- name: Clippy check
uses: actions-rs/cargo@v1
with:
@@ -78,17 +91,23 @@ jobs:
run: |
sudo apt-get update && \
sudo apt-get -y install \
- libssl-dev \
- openssl \
- libsqlite3-dev \
- pkg-config \
- git \
- cmake \
- zip \
- libc++-dev \
- libc++abi-dev \
- libprotobuf-dev \
- protobuf-compiler
+ build-essential \
+ libgtk-3-dev \
+ libwebkit2gtk-4.0-dev \
+ libsoup2.4-dev \
+ curl \
+ wget \
+ libappindicator3-dev \
+ patchelf \
+ librsvg2-dev \
+ libprotobuf-dev \
+ protobuf-compiler
+
+ - name: Compile NPM
+ run: |
+ cd applications/launchpad/gui-vue
+ npm install
+ npm run build
- name: toolchain
uses: actions-rs/toolchain@v1
diff --git a/Cargo.lock b/Cargo.lock
index cba0dcbdba..9243799a7c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -8,6 +8,12 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
[[package]]
name = "aead"
version = "0.3.2"
@@ -173,12 +179,37 @@ dependencies = [
"nodrop",
]
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
[[package]]
name = "arrayvec"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+[[package]]
+name = "async-io"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b"
+dependencies = [
+ "concurrent-queue",
+ "futures-lite",
+ "libc",
+ "log",
+ "once_cell",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "async-stream"
version = "0.3.2"
@@ -211,6 +242,48 @@ dependencies = [
"syn 1.0.81",
]
+[[package]]
+name = "atk"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba"
+dependencies = [
+ "atk-sys",
+ "bitflags 1.3.2",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea"
+dependencies = [
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "libc",
+ "system-deps 3.2.0",
+]
+
+[[package]]
+name = "attohttpc"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a8bda305457262b339322106c776e3fd21df860018e566eb6a5b1aa4b6ae02d"
+dependencies = [
+ "flate2",
+ "http",
+ "log",
+ "native-tls",
+ "openssl",
+ "serde 1.0.130",
+ "serde_json",
+ "serde_urlencoded 0.6.1",
+ "url 2.2.2",
+ "wildmatch",
+]
+
[[package]]
name = "atty"
version = "0.2.14"
@@ -308,7 +381,7 @@ dependencies = [
"bitflags 1.3.2",
"cexpr",
"clang-sys",
- "clap",
+ "clap 2.33.3",
"env_logger 0.8.4",
"lazy_static 1.4.0",
"lazycell",
@@ -357,6 +430,38 @@ dependencies = [
"opaque-debug 0.3.0",
]
+[[package]]
+name = "blake2b_simd"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.5.2",
+ "constant_time_eq",
+]
+
+[[package]]
+name = "blake3"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "526c210b4520e416420759af363083471656e819a75e831b8d2c9d5a584f2413"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.7.2",
+ "cc",
+ "cfg-if 1.0.0",
+ "constant_time_eq",
+ "digest 0.9.0",
+ "rayon",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
[[package]]
name = "block-buffer"
version = "0.7.3"
@@ -424,6 +529,47 @@ dependencies = [
"opaque-debug 0.3.0",
]
+[[package]]
+name = "bollard"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92fed694fd5a7468c971538351c61b9c115f1ae6ed411cd2800f0f299403a4b"
+dependencies = [
+ "base64 0.13.0",
+ "bollard-stubs",
+ "bytes 1.1.0",
+ "chrono",
+ "dirs-next 2.0.0",
+ "futures-core",
+ "futures-util",
+ "hex",
+ "http",
+ "hyper",
+ "hyperlocal",
+ "log",
+ "pin-project 1.0.8",
+ "serde 1.0.130",
+ "serde_derive",
+ "serde_json",
+ "serde_urlencoded 0.7.0",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "url 2.2.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "bollard-stubs"
+version = "1.41.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed2f2e73fffe9455141e170fb9c1feb0ac521ec7e7dcd47a7cab72a658490fb8"
+dependencies = [
+ "chrono",
+ "serde 1.0.130",
+ "serde_with",
+]
+
[[package]]
name = "bs58"
version = "0.4.0"
@@ -497,12 +643,63 @@ dependencies = [
"serde 1.0.130",
]
+[[package]]
+name = "bzip2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
[[package]]
name = "c_linked_list"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b"
+[[package]]
+name = "cache-padded"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"
+
+[[package]]
+name = "cairo-rs"
+version = "0.14.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33b5725979db0c586d98abad2193cdb612dd40ef95cd26bd99851bf93b3cb482"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.14.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b448b876970834fda82ba3aeaccadbd760206b75388fc5c1b02f1e343b697570"
+dependencies = [
+ "glib-sys 0.14.0",
+ "libc",
+ "system-deps 3.2.0",
+]
+
[[package]]
name = "case"
version = "0.1.0"
@@ -541,7 +738,7 @@ version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "744fcfb4c9f64d649756fd972afec5120641eaa8b2ff86a4ae981f68648780b8"
dependencies = [
- "clap",
+ "clap 2.33.3",
"heck",
"indexmap",
"log",
@@ -559,6 +756,9 @@ name = "cc"
version = "1.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
+dependencies = [
+ "jobserver",
+]
[[package]]
name = "cexpr"
@@ -569,6 +769,16 @@ dependencies = [
"nom 5.1.2",
]
+[[package]]
+name = "cfb"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca453e8624711b2f0f4eb47076a318feda166252a827ee25d067b43de83dcba0"
+dependencies = [
+ "byteorder",
+ "uuid",
+]
+
[[package]]
name = "cfb-mode"
version = "0.6.0"
@@ -578,6 +788,15 @@ dependencies = [
"cipher 0.2.5",
]
+[[package]]
+name = "cfg-expr"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e"
+dependencies = [
+ "smallvec",
+]
+
[[package]]
name = "cfg-if"
version = "0.1.10"
@@ -590,6 +809,12 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+[[package]]
+name = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
[[package]]
name = "chacha20"
version = "0.7.3"
@@ -690,11 +915,43 @@ dependencies = [
"atty",
"bitflags 1.3.2",
"strsim 0.8.0",
- "textwrap",
+ "textwrap 0.11.0",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "3.0.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bd1061998a501ee7d4b6d449020df3266ca3124b941ec56cf2005c3779ca142"
+dependencies = [
+ "atty",
+ "bitflags 1.3.2",
+ "clap_derive",
+ "indexmap",
+ "lazy_static 1.4.0",
+ "os_str_bytes",
+ "strsim 0.10.0",
+ "termcolor",
+ "textwrap 0.12.1",
"unicode-width",
"vec_map",
]
+[[package]]
+name = "clap_derive"
+version = "3.0.0-rc.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85946d4034625800196413478a1c6d3a57c12785e1f3970e590e0137dfa07342"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
[[package]]
name = "clear_on_drop"
version = "0.2.4"
@@ -724,12 +981,83 @@ dependencies = [
"bitflags 1.3.2",
]
+[[package]]
+name = "cocoa"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "cocoa-foundation",
+ "core-foundation 0.9.2",
+ "core-graphics 0.22.3",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-foundation 0.9.2",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
[[package]]
name = "color_quant"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+[[package]]
+name = "com"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a30a2b2a013da986dc5cc3eda3d19c0d59d53f835be1b2356eb8d00f000c793"
+dependencies = [
+ "com_macros",
+]
+
+[[package]]
+name = "com_macros"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7606b05842fea68ddcc89e8053b8860ebcb2a0ba8d6abfe3a148e5d5a8d3f0c1"
+dependencies = [
+ "com_macros_support",
+ "proc-macro2 1.0.32",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "com_macros_support"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97e9a6d20f4ac8830e309a455d7e9416e65c6af5a97c88c55fbb4c2012e107da"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
+dependencies = [
+ "cache-padded",
+]
+
[[package]]
name = "config"
version = "0.9.3"
@@ -740,34 +1068,122 @@ dependencies = [
"nom 4.2.3",
"rust-ini",
"serde 1.0.130",
- "serde-hjson",
+ "serde-hjson 0.8.2",
"serde_json",
"toml 0.4.10",
"yaml-rust",
]
+[[package]]
+name = "config"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1b9d958c2b1368a663f05538fc1b5975adce1e19f435acceae987aceeeb369"
+dependencies = [
+ "lazy_static 1.4.0",
+ "nom 5.1.2",
+ "rust-ini",
+ "serde 1.0.130",
+ "serde-hjson 0.9.1",
+ "serde_json",
+ "toml 0.5.8",
+ "yaml-rust",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
[[package]]
name = "convert_case"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+[[package]]
+name = "core-foundation"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
+dependencies = [
+ "core-foundation-sys 0.7.0",
+ "libc",
+]
+
[[package]]
name = "core-foundation"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3"
dependencies = [
- "core-foundation-sys",
+ "core-foundation-sys 0.8.3",
"libc",
]
+[[package]]
+name = "core-foundation-sys"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
+
[[package]]
name = "core-foundation-sys"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+[[package]]
+name = "core-graphics"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation 0.7.0",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation 0.9.2",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation 0.9.2",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-video-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828"
+dependencies = [
+ "cfg-if 0.1.10",
+ "core-foundation-sys 0.7.0",
+ "core-graphics 0.19.2",
+ "libc",
+ "objc",
+]
+
[[package]]
name = "cpufeatures"
version = "0.2.1"
@@ -806,7 +1222,7 @@ checksum = "0363053954f3e679645fc443321ca128b7b950a6fe288cf5f9335cc22ee58394"
dependencies = [
"atty",
"cast",
- "clap",
+ "clap 2.33.3",
"criterion-plot",
"csv",
"itertools 0.8.2",
@@ -1011,6 +1427,33 @@ dependencies = [
"subtle",
]
+[[package]]
+name = "cssparser"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa",
+ "matches",
+ "phf 0.8.0",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "smallvec",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "cssparser-macros"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
+dependencies = [
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
[[package]]
name = "csv"
version = "1.1.6"
@@ -1051,6 +1494,12 @@ dependencies = [
"cipher 0.3.0",
]
+[[package]]
+name = "cty"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+
[[package]]
name = "curl-sys"
version = "0.4.51+curl-7.80.0"
@@ -1101,8 +1550,18 @@ version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
dependencies = [
- "darling_core",
- "darling_macro",
+ "darling_core 0.10.2",
+ "darling_macro 0.10.2",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4"
+dependencies = [
+ "darling_core 0.13.1",
+ "darling_macro 0.13.1",
]
[[package]]
@@ -1119,13 +1578,38 @@ dependencies = [
"syn 1.0.81",
]
+[[package]]
+name = "darling_core"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "strsim 0.10.0",
+ "syn 1.0.81",
+]
+
[[package]]
name = "darling_macro"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
dependencies = [
- "darling_core",
+ "darling_core 0.10.2",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b"
+dependencies = [
+ "darling_core 0.13.1",
"quote 1.0.10",
"syn 1.0.81",
]
@@ -1148,6 +1632,26 @@ dependencies = [
"thiserror",
]
+[[package]]
+name = "deflate"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[package]]
+name = "deflate"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
[[package]]
name = "deps_only"
version = "0.1.0"
@@ -1183,7 +1687,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0"
dependencies = [
- "darling",
+ "darling 0.10.2",
"derive_builder_core",
"proc-macro2 1.0.32",
"quote 1.0.10",
@@ -1196,7 +1700,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef"
dependencies = [
- "darling",
+ "darling 0.10.2",
"proc-macro2 1.0.32",
"quote 1.0.10",
"syn 1.0.81",
@@ -1283,6 +1787,17 @@ dependencies = [
"generic-array 0.14.4",
]
+[[package]]
+name = "dirs"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901"
+dependencies = [
+ "libc",
+ "redox_users 0.3.5",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "dirs-next"
version = "1.0.2"
@@ -1310,16 +1825,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
dependencies = [
"libc",
- "redox_users",
+ "redox_users 0.4.0",
"winapi 0.3.9",
]
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
[[package]]
name = "dtoa"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+[[package]]
+name = "dtoa-short"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6"
+dependencies = [
+ "dtoa",
+]
+
[[package]]
name = "ed25519"
version = "1.3.0"
@@ -1349,6 +1879,12 @@ version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+[[package]]
+name = "embed_plist"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53dd2e43a7d32952a6054141ee0d75183958620e84e5eab045de362dff13dc99"
+
[[package]]
name = "encoding_rs"
version = "0.8.29"
@@ -1376,6 +1912,27 @@ dependencies = [
"syn 1.0.81",
]
+[[package]]
+name = "enumflags2"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0"
+dependencies = [
+ "enumflags2_derive",
+ "serde 1.0.130",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
[[package]]
name = "env_logger"
version = "0.6.2"
@@ -1415,6 +1972,19 @@ dependencies = [
"termcolor",
]
+[[package]]
+name = "env_logger"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+dependencies = [
+ "atty",
+ "humantime 2.1.0",
+ "log",
+ "regex",
+ "termcolor",
+]
+
[[package]]
name = "error-code"
version = "2.3.0"
@@ -1443,6 +2013,15 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c"
+[[package]]
+name = "fastrand"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e"
+dependencies = [
+ "instant",
+]
+
[[package]]
name = "fd-lock"
version = "3.0.0"
@@ -1454,6 +2033,28 @@ dependencies = [
"winapi 0.3.9",
]
+[[package]]
+name = "field-offset"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
+dependencies = [
+ "memoffset",
+ "rustc_version 0.3.3",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.10",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "fixed-hash"
version = "0.7.0"
@@ -1481,7 +2082,7 @@ dependencies = [
"cfg-if 1.0.0",
"crc32fast",
"libc",
- "miniz_oxide",
+ "miniz_oxide 0.4.4",
]
[[package]]
@@ -1532,6 +2133,16 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+[[package]]
+name = "futf"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
[[package]]
name = "futures"
version = "0.1.31"
@@ -1619,6 +2230,21 @@ version = "0.3.0-alpha.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4914ae450db1921a56c91bde97a27846287d062087d4a652efc09bb3a01ebda"
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
[[package]]
name = "futures-macro"
version = "0.3.17"
@@ -1728,12 +2354,92 @@ dependencies = [
"slab",
]
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
[[package]]
name = "gcc"
version = "0.3.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
+[[package]]
+name = "gdk"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9d749dcfc00d8de0d7c3a289e04a04293eb5ba3d8a4e64d64911d481fa9933b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590"
+dependencies = [
+ "gio-sys 0.14.0",
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "libc",
+ "system-deps 3.2.0",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys 0.14.0",
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps 3.2.0",
+]
+
+[[package]]
+name = "generator"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1d9279ca822891c1a4dae06d185612cf8fc6acfe5dff37781b41297811b12ee"
+dependencies = [
+ "cc",
+ "libc",
+ "log",
+ "rustversion",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "generic-array"
version = "0.12.4"
@@ -1817,6 +2523,49 @@ dependencies = [
"polyval 0.5.3",
]
+[[package]]
+name = "gio"
+version = "0.14.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711c3632b3ebd095578a9c091418d10fed492da9443f58ebc8f45efbeb215cb0"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "gio-sys 0.14.0",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e24fb752f8f5d2cf6bbc2c606fd2bc989c81c5e2fe321ab974d54f8b6344eac"
+dependencies = [
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "libc",
+ "system-deps 1.3.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa"
+dependencies = [
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "libc",
+ "system-deps 3.2.0",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "git2"
version = "0.8.0"
@@ -1832,12 +2581,157 @@ dependencies = [
"url 1.7.2",
]
+[[package]]
+name = "glib"
+version = "0.14.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c515f1e62bf151ef6635f528d05b02c11506de986e43b34a5c920ef0b3796a4"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "glib-macros",
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "libc",
+ "once_cell",
+ "smallvec",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate 1.1.0",
+ "proc-macro-error",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1"
+dependencies = [
+ "libc",
+ "system-deps 1.3.2",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae"
+dependencies = [
+ "libc",
+ "system-deps 3.2.0",
+]
+
[[package]]
name = "glob"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+[[package]]
+name = "globset"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c"
+dependencies = [
+ "glib-sys 0.10.1",
+ "libc",
+ "system-deps 1.3.2",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5"
+dependencies = [
+ "glib-sys 0.14.0",
+ "libc",
+ "system-deps 3.2.0",
+]
+
+[[package]]
+name = "gtk"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb51122dd3317e9327ec1e4faa151d1fa0d95664cd8fb8dcfacf4d4d29ac70c"
+dependencies = [
+ "atk",
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib",
+ "gtk-sys",
+ "gtk3-macros",
+ "libc",
+ "once_cell",
+ "pango",
+ "pkg-config",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys 0.14.0",
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "libc",
+ "pango-sys",
+ "system-deps 3.2.0",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate 1.1.0",
+ "proc-macro-error",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
[[package]]
name = "h2"
version = "0.3.7"
@@ -1932,6 +2826,20 @@ version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
+[[package]]
+name = "html5ever"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafcf38a1a36118242d29b92e1b08ef84e67e4a5ed06e0a80be20e6a32bfed6b"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
[[package]]
name = "http"
version = "0.2.5"
@@ -1954,6 +2862,12 @@ dependencies = [
"pin-project-lite",
]
+[[package]]
+name = "http-range"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eee9694f83d9b7c09682fdb32213682939507884e5bcf227be9aff5d644b90dc"
+
[[package]]
name = "httparse"
version = "1.5.1"
@@ -2030,6 +2944,29 @@ dependencies = [
"tokio-native-tls",
]
+[[package]]
+name = "hyperlocal"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c"
+dependencies = [
+ "futures-util",
+ "hex",
+ "hyper",
+ "pin-project 1.0.8",
+ "tokio",
+]
+
+[[package]]
+name = "ico"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a4b3331534254a9b64095ae60d3dc2a8225a7a70229cd5888be127cdc1f6804"
+dependencies = [
+ "byteorder",
+ "png 0.11.0",
+]
+
[[package]]
name = "ident_case"
version = "1.0.1"
@@ -2058,6 +2995,24 @@ dependencies = [
"unicode-normalization",
]
+[[package]]
+name = "ignore"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
+dependencies = [
+ "crossbeam-utils 0.8.5",
+ "globset",
+ "lazy_static 1.4.0",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
[[package]]
name = "image"
version = "0.23.14"
@@ -2082,6 +3037,24 @@ dependencies = [
"hashbrown",
]
+[[package]]
+name = "infer"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f92b41dab759f9e8427c03f519c344a14655490b8db548dac1e57a75b3258391"
+dependencies = [
+ "cfb",
+]
+
+[[package]]
+name = "inflate"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5f9f47468e9a76a6452271efadc88fe865a82be91fe75e6c0c57b87ccea59d4"
+dependencies = [
+ "adler32",
+]
+
[[package]]
name = "instant"
version = "0.1.12"
@@ -2133,6 +3106,40 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+[[package]]
+name = "javascriptcore-rs"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca9c7d1445bba2889672fbadc16c3d5007bfdcf0a15a18a3a50fe9fab2c7427"
+dependencies = [
+ "glib",
+ "javascriptcore-rs-sys",
+]
+
+[[package]]
+name = "javascriptcore-rs-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f46ada8a08dcd75a10afae872fbfb51275df4a8ae0d46b8cc7c708f08dd2998"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "js-sys"
version = "0.3.55"
@@ -2181,6 +3188,18 @@ dependencies = [
"winapi-build",
]
+[[package]]
+name = "kuchiki"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
+dependencies = [
+ "cssparser",
+ "html5ever",
+ "matches",
+ "selectors",
+]
+
[[package]]
name = "lazy_static"
version = "0.2.11"
@@ -2202,6 +3221,19 @@ version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+[[package]]
+name = "lexical-core"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
+dependencies = [
+ "arrayvec 0.5.2",
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "ryu",
+ "static_assertions",
+]
+
[[package]]
name = "libc"
version = "0.2.108"
@@ -2404,12 +3436,68 @@ dependencies = [
"winapi 0.3.9",
]
+[[package]]
+name = "loom"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edc5c7d328e32cc4954e8e01193d7f0ef5ab257b5090b70a964e099a36034309"
+dependencies = [
+ "cfg-if 1.0.0",
+ "generator",
+ "scoped-tls",
+ "serde 1.0.130",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber 0.3.3",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "mac-notification-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb6b71a9a89cd38b395d994214297447e8e63b1ba5708a9a2b0b1048ceda76"
+dependencies = [
+ "cc",
+ "chrono",
+ "dirs",
+ "objc-foundation",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "maplit"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+[[package]]
+name = "markup5ever"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
+dependencies = [
+ "log",
+ "phf 0.8.0",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
[[package]]
name = "matchers"
version = "0.0.1"
@@ -2419,6 +3507,15 @@ dependencies = [
"regex-automata",
]
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
[[package]]
name = "matches"
version = "0.1.9"
@@ -2500,6 +3597,21 @@ dependencies = [
"unicase",
]
+[[package]]
+name = "minisign-verify"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db0507fe8e3c68cd62961cf9f87f6c2b21d884d3515a7150a4a3fa9d014e5c12"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
+dependencies = [
+ "adler32",
+]
+
[[package]]
name = "miniz_oxide"
version = "0.4.4"
@@ -2584,7 +3696,7 @@ version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "424f6e86263cd5294cbd7f1e95746b95aca0e0d66bff31e5a40d6baa87b4aa99"
dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 1.1.0",
"proc-macro-error",
"proc-macro2 1.0.32",
"quote 1.0.10",
@@ -2634,6 +3746,68 @@ dependencies = [
"tempfile",
]
+[[package]]
+name = "nb-connect"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1bb540dc6ef51cfe1916ec038ce7a620daf3a111e2502d745197cd53d6bca15"
+dependencies = [
+ "libc",
+ "socket2",
+]
+
+[[package]]
+name = "ndk"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d64d6af06fde0e527b1ba5c7b79a6cc89cfc46325b0b2887dffe8f70197e0c3c"
+dependencies = [
+ "bitflags 1.3.2",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-glue"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e9e94628f24e7a3cb5b96a2dc5683acd9230bf11991c2a1677b87695138420"
+dependencies = [
+ "lazy_static 1.4.0",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-macro",
+ "ndk-sys",
+]
+
+[[package]]
+name = "ndk-macro"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d"
+dependencies = [
+ "darling 0.10.2",
+ "proc-macro-crate 0.1.5",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "ndk-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121"
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
[[package]]
name = "newtype-ops"
version = "0.1.4"
@@ -2649,6 +3823,19 @@ dependencies = [
"smallvec",
]
+[[package]]
+name = "nix"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363"
+dependencies = [
+ "bitflags 1.3.2",
+ "cc",
+ "cfg-if 0.1.10",
+ "libc",
+ "void",
+]
+
[[package]]
name = "nix"
version = "0.22.0"
@@ -2690,10 +3877,25 @@ version = "5.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
dependencies = [
+ "lexical-core",
"memchr",
"version_check 0.9.3",
]
+[[package]]
+name = "notify-rust"
+version = "4.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ebab865e67efdd7182a88d76cadbdd2a8d02d1c7a4e16bb7c234016a12cac"
+dependencies = [
+ "mac-notification-sys",
+ "serde 1.0.130",
+ "winrt-notification",
+ "zbus",
+ "zvariant",
+ "zvariant_derive",
+]
+
[[package]]
name = "ntapi"
version = "0.3.6"
@@ -2822,31 +4024,82 @@ dependencies = [
]
[[package]]
-name = "num-traits"
-version = "0.1.43"
+name = "num-traits"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+dependencies = [
+ "num-traits 0.2.14",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg 1.0.1",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9bd055fb730c4f8f4f57d45d35cd6b3f0980535b056dc7ff119cee6a66ed6f"
+dependencies = [
+ "derivative",
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "486ea01961c4a818096de679a8b740b26d9033146ac5291b1c98557658f8cdd9"
+dependencies = [
+ "proc-macro-crate 1.1.0",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
dependencies = [
- "num-traits 0.2.14",
+ "malloc_buf",
]
[[package]]
-name = "num-traits"
-version = "0.2.14"
+name = "objc-foundation"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
dependencies = [
- "autocfg 1.0.1",
+ "block",
+ "objc",
+ "objc_id",
]
[[package]]
-name = "num_cpus"
-version = "1.13.0"
+name = "objc_id"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
dependencies = [
- "hermit-abi",
- "libc",
+ "objc",
]
[[package]]
@@ -2867,6 +4120,16 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+[[package]]
+name = "open"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176ee4b630d174d2da8241336763bb459281dddc0f4d87f72c3b1efc9a6109b7"
+dependencies = [
+ "pathdiff",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "openssl"
version = "0.10.38"
@@ -2989,6 +4252,33 @@ dependencies = [
"num-traits 0.2.14",
]
+[[package]]
+name = "os_info"
+version = "3.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5501659840950e918d046ad97ebe9702cbb4ec0097e47dbd27abf7692223181"
+dependencies = [
+ "log",
+ "serde 1.0.130",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "os_pipe"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb233f06c2307e1f5ce2ecad9f8121cffbbee2c95428f44ea85222e460d0d213"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85"
+
[[package]]
name = "packed_simd_2"
version = "0.3.6"
@@ -2999,6 +4289,37 @@ dependencies = [
"libm 0.1.4",
]
+[[package]]
+name = "pango"
+version = "0.14.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "546fd59801e5ca735af82839007edd226fe7d3bb06433ec48072be4439c28581"
+dependencies = [
+ "bitflags 1.3.2",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe"
+dependencies = [
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "libc",
+ "system-deps 3.2.0",
+]
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
[[package]]
name = "parking_lot"
version = "0.10.2"
@@ -3065,6 +4386,12 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd"
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
[[package]]
name = "peeking_take_while"
version = "0.1.2"
@@ -3197,6 +4524,104 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_macros 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_macros 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand 0.8.4",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro-hack",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
[[package]]
name = "pin-project"
version = "0.4.28"
@@ -3255,6 +4680,43 @@ version = "0.3.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f"
+[[package]]
+name = "png"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925"
+dependencies = [
+ "bitflags 1.3.2",
+ "deflate 0.7.20",
+ "inflate",
+ "num-iter",
+]
+
+[[package]]
+name = "png"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "deflate 0.8.6",
+ "miniz_oxide 0.3.7",
+]
+
+[[package]]
+name = "polling"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "poly1305"
version = "0.7.2"
@@ -3295,6 +4757,21 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba"
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml 0.5.8",
+]
+
[[package]]
name = "proc-macro-crate"
version = "1.1.0"
@@ -3503,6 +4980,7 @@ dependencies = [
"rand_chacha 0.2.2",
"rand_core 0.5.1",
"rand_hc 0.2.0",
+ "rand_pcg",
]
[[package]]
@@ -3602,6 +5080,15 @@ dependencies = [
"winapi 0.3.9",
]
+[[package]]
+name = "rand_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
[[package]]
name = "rand_xoshiro"
version = "0.1.0"
@@ -3623,6 +5110,25 @@ dependencies = [
"thiserror",
]
+[[package]]
+name = "raw-window-handle"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76"
+dependencies = [
+ "libc",
+ "raw-window-handle 0.4.2",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fba75eee94a9d5273a68c9e1e105d9cffe1ef700532325788389e5a83e2522b7"
+dependencies = [
+ "cty",
+]
+
[[package]]
name = "rayon"
version = "1.5.1"
@@ -3672,6 +5178,17 @@ dependencies = [
"bitflags 1.3.2",
]
+[[package]]
+name = "redox_users"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
+dependencies = [
+ "getrandom 0.1.16",
+ "redox_syscall 0.1.57",
+ "rust-argon2",
+]
+
[[package]]
name = "redox_users"
version = "0.4.0"
@@ -3742,7 +5259,7 @@ dependencies = [
"pin-project-lite",
"serde 1.0.130",
"serde_json",
- "serde_urlencoded",
+ "serde_urlencoded 0.7.0",
"tokio",
"tokio-native-tls",
"url 2.2.2",
@@ -3752,6 +5269,29 @@ dependencies = [
"winreg",
]
+[[package]]
+name = "rfd"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "609ed912e110af7d7084b6b17d2a68b25e766208e015a37beba1be3c2d7cbb3b"
+dependencies = [
+ "block",
+ "dispatch",
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "gtk-sys",
+ "js-sys",
+ "lazy_static 1.4.0",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "raw-window-handle 0.3.4",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "ring"
version = "0.16.20"
@@ -3831,6 +5371,18 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "rust-argon2"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
+dependencies = [
+ "base64 0.13.0",
+ "blake2b_simd",
+ "constant_time_eq",
+ "crossbeam-utils 0.8.5",
+]
+
[[package]]
name = "rust-ini"
version = "0.13.0"
@@ -3880,6 +5432,12 @@ dependencies = [
"webpki",
]
+[[package]]
+name = "rustversion"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
+
[[package]]
name = "rustyline"
version = "9.0.0"
@@ -3894,7 +5452,7 @@ dependencies = [
"libc",
"log",
"memchr",
- "nix",
+ "nix 0.22.0",
"radix_trie",
"scopeguard",
"smallvec",
@@ -3983,8 +5541,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87"
dependencies = [
"bitflags 1.3.2",
- "core-foundation",
- "core-foundation-sys",
+ "core-foundation 0.9.2",
+ "core-foundation-sys 0.8.3",
"libc",
"security-framework-sys",
]
@@ -3995,10 +5553,30 @@ version = "2.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e"
dependencies = [
- "core-foundation-sys",
+ "core-foundation-sys 0.8.3",
"libc",
]
+[[package]]
+name = "selectors"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
+dependencies = [
+ "bitflags 1.3.2",
+ "cssparser",
+ "derive_more",
+ "fxhash",
+ "log",
+ "matches",
+ "phf 0.8.0",
+ "phf_codegen",
+ "precomputed-hash",
+ "servo_arc",
+ "smallvec",
+ "thin-slice",
+]
+
[[package]]
name = "semver"
version = "0.11.0"
@@ -4061,6 +5639,18 @@ dependencies = [
"serde 0.8.23",
]
+[[package]]
+name = "serde-hjson"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a3a4e0ea8a88553209f6cc6cfe8724ecad22e1acf372793c27d995290fe74f8"
+dependencies = [
+ "lazy_static 1.4.0",
+ "num-traits 0.1.43",
+ "regex",
+ "serde 0.8.23",
+]
+
[[package]]
name = "serde-value"
version = "0.5.3"
@@ -4118,9 +5708,21 @@ dependencies = [
name = "serde_test"
version = "0.8.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "110b3dbdf8607ec493c22d5d947753282f3bae73c0f56d322af1e8c78e4c23d5"
+checksum = "110b3dbdf8607ec493c22d5d947753282f3bae73c0f56d322af1e8c78e4c23d5"
+dependencies = [
+ "serde 0.8.23",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97"
dependencies = [
- "serde 0.8.23",
+ "dtoa",
+ "itoa",
+ "serde 1.0.130",
+ "url 2.2.2",
]
[[package]]
@@ -4135,6 +5737,29 @@ dependencies = [
"serde 1.0.130",
]
+[[package]]
+name = "serde_with"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad6056b4cb69b6e43e3a0f055def223380baecc99da683884f205bf347f7c4b3"
+dependencies = [
+ "rustversion",
+ "serde 1.0.130",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12e47be9471c72889ebafb5e14d5ff930d89ae7a67bbdb5f8abb564f845a927e"
+dependencies = [
+ "darling 0.13.1",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
[[package]]
name = "serde_yaml"
version = "0.8.21"
@@ -4147,6 +5772,16 @@ dependencies = [
"yaml-rust",
]
+[[package]]
+name = "servo_arc"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
+dependencies = [
+ "nodrop",
+ "stable_deref_trait",
+]
+
[[package]]
name = "sha-1"
version = "0.8.2"
@@ -4172,6 +5807,12 @@ dependencies = [
"opaque-debug 0.3.0",
]
+[[package]]
+name = "sha1"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
+
[[package]]
name = "sha2"
version = "0.9.8"
@@ -4206,6 +5847,16 @@ dependencies = [
"lazy_static 1.4.0",
]
+[[package]]
+name = "shared_child"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6be9f7d5565b1483af3e72975e2dee33879b3b86bd48c0929fccf6585d79e65a"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
[[package]]
name = "shlex"
version = "0.1.1"
@@ -4270,6 +5921,12 @@ dependencies = [
"num-traits 0.2.14",
]
+[[package]]
+name = "siphasher"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b"
+
[[package]]
name = "slab"
version = "0.4.5"
@@ -4309,18 +5966,48 @@ dependencies = [
"winapi 0.3.9",
]
+[[package]]
+name = "soup-sys"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7adf08565630bbb71f955f11f8a68464817ded2703a3549747c235b58a13e"
+dependencies = [
+ "bitflags 1.3.2",
+ "gio-sys 0.10.1",
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "libc",
+ "pkg-config",
+ "system-deps 1.3.2",
+]
+
[[package]]
name = "spin"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
[[package]]
name = "stack-buf"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7386b49cb287f6fafbfd3bd604914bccb99fb8d53483f40e1ecfda5d45f3370"
+[[package]]
+name = "state"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cf4f5369e6d3044b5e365c9690f451516ac8f0954084622b49ea3fde2f6de5"
+dependencies = [
+ "loom",
+]
+
[[package]]
name = "static_assertions"
version = "1.1.0"
@@ -4342,6 +6029,32 @@ dependencies = [
"futures 0.1.31",
]
+[[package]]
+name = "string_cache"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "923f0f39b6267d37d23ce71ae7235602134b250ace715dd2c90421998ddac0c6"
+dependencies = [
+ "lazy_static 1.4.0",
+ "new_debug_unreachable",
+ "parking_lot 0.11.2",
+ "phf_shared 0.8.0",
+ "precomputed-hash",
+ "serde 1.0.130",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+]
+
[[package]]
name = "strsim"
version = "0.8.0"
@@ -4354,13 +6067,19 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
[[package]]
name = "structopt"
version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40b9788f4202aa75c240ecc9c15c65185e6a39ccdeb0fd5d008b98825464c87c"
dependencies = [
- "clap",
+ "clap 2.33.3",
"lazy_static 1.4.0",
"structopt-derive",
]
@@ -4378,12 +6097,24 @@ dependencies = [
"syn 1.0.81",
]
+[[package]]
+name = "strum"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
+
[[package]]
name = "strum"
version = "0.19.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b89a286a7e3b5720b9a477b23253bc50debac207c8d21505f8e70b36792f11b5"
+[[package]]
+name = "strum"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2"
+
[[package]]
name = "strum"
version = "0.22.0"
@@ -4393,6 +6124,12 @@ dependencies = [
"strum_macros 0.22.0",
]
+[[package]]
+name = "strum"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb"
+
[[package]]
name = "strum_macros"
version = "0.17.1"
@@ -4429,6 +6166,18 @@ dependencies = [
"syn 1.0.81",
]
+[[package]]
+name = "strum_macros"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
+dependencies = [
+ "heck",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
[[package]]
name = "strum_macros"
version = "0.22.0"
@@ -4441,6 +6190,19 @@ dependencies = [
"syn 1.0.81",
]
+[[package]]
+name = "strum_macros"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38"
+dependencies = [
+ "heck",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "rustversion",
+ "syn 1.0.81",
+]
+
[[package]]
name = "subtle"
version = "2.4.1"
@@ -4513,6 +6275,89 @@ dependencies = [
"unicode-xid 0.2.2",
]
+[[package]]
+name = "system-deps"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b"
+dependencies = [
+ "heck",
+ "pkg-config",
+ "strum 0.18.0",
+ "strum_macros 0.18.0",
+ "thiserror",
+ "toml 0.5.8",
+ "version-compare 0.0.10",
+]
+
+[[package]]
+name = "system-deps"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6"
+dependencies = [
+ "anyhow",
+ "cfg-expr",
+ "heck",
+ "itertools 0.10.1",
+ "pkg-config",
+ "strum 0.21.0",
+ "strum_macros 0.21.1",
+ "thiserror",
+ "toml 0.5.8",
+ "version-compare 0.0.11",
+]
+
+[[package]]
+name = "tao"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aa57de7c282b68f8906278543a724ed8f5a2568f069dd0cc05fc10d1f07036b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "cc",
+ "cocoa",
+ "core-foundation 0.9.2",
+ "core-graphics 0.22.3",
+ "core-video-sys",
+ "crossbeam-channel 0.5.1",
+ "dispatch",
+ "gdk",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "glib-sys 0.14.0",
+ "gtk",
+ "instant",
+ "lazy_static 1.4.0",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-glue",
+ "ndk-sys",
+ "objc",
+ "parking_lot 0.11.2",
+ "raw-window-handle 0.3.4",
+ "scopeguard",
+ "serde 1.0.130",
+ "unicode-segmentation",
+ "winapi 0.3.9",
+ "x11-dl",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6f5515d3add52e0bbdcad7b83c388bb36ba7b754dda3b5f5bc2d38640cdba5c"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
[[package]]
name = "tari_app_grpc"
version = "0.22.0"
@@ -4532,7 +6377,7 @@ dependencies = [
name = "tari_app_utilities"
version = "0.22.0"
dependencies = [
- "config",
+ "config 0.9.3",
"dirs-next 1.0.2",
"futures 0.3.17",
"json5",
@@ -4546,9 +6391,9 @@ dependencies = [
"tari_common",
"tari_common_types",
"tari_comms",
- "tari_core",
"tari_crypto",
"tari_p2p",
+ "tari_utilities",
"thiserror",
"tokio",
"tonic",
@@ -4561,7 +6406,7 @@ dependencies = [
"anyhow",
"bincode",
"chrono",
- "config",
+ "config 0.9.3",
"either",
"futures 0.3.17",
"log",
@@ -4593,7 +6438,7 @@ dependencies = [
"tonic",
"tracing",
"tracing-opentelemetry",
- "tracing-subscriber",
+ "tracing-subscriber 0.2.25",
"warp",
]
@@ -4621,7 +6466,7 @@ name = "tari_common"
version = "0.22.0"
dependencies = [
"anyhow",
- "config",
+ "config 0.9.3",
"dirs-next 1.0.2",
"get_if_addrs",
"git2",
@@ -4723,7 +6568,7 @@ dependencies = [
"bytes 0.5.6",
"chacha20",
"chrono",
- "clap",
+ "clap 2.33.3",
"diesel",
"diesel_migrations",
"digest 0.9.0",
@@ -4814,7 +6659,7 @@ dependencies = [
"tonic",
"tracing",
"tracing-opentelemetry",
- "tracing-subscriber",
+ "tracing-subscriber 0.2.25",
"tui",
"unicode-segmentation",
"unicode-width",
@@ -4830,7 +6675,7 @@ dependencies = [
"blake2",
"bytes 0.5.6",
"chrono",
- "config",
+ "config 0.9.3",
"croaring",
"decimal-rs",
"derive_more",
@@ -4932,6 +6777,29 @@ dependencies = [
"thiserror",
]
+[[package]]
+name = "tari_launchpad"
+version = "0.1.0"
+dependencies = [
+ "bollard",
+ "config 0.11.0",
+ "env_logger 0.9.0",
+ "futures 0.3.17",
+ "log",
+ "rand 0.8.4",
+ "serde 1.0.130",
+ "serde_json",
+ "strum 0.23.0",
+ "strum_macros 0.23.1",
+ "tari_app_utilities",
+ "tari_comms",
+ "tauri",
+ "tauri-build",
+ "thiserror",
+ "tokio",
+ "tor-hash-passwd",
+]
+
[[package]]
name = "tari_merge_mining_proxy"
version = "0.22.0"
@@ -4940,7 +6808,7 @@ dependencies = [
"bincode",
"bytes 1.1.0",
"chrono",
- "config",
+ "config 0.9.3",
"derive-error",
"env_logger 0.7.1",
"futures 0.3.17",
@@ -4966,7 +6834,7 @@ dependencies = [
"tonic",
"tracing",
"tracing-futures",
- "tracing-subscriber",
+ "tracing-subscriber 0.2.25",
"url 2.2.2",
]
@@ -5034,7 +6902,7 @@ dependencies = [
"anyhow",
"bytes 0.5.6",
"chrono",
- "clap",
+ "clap 2.33.3",
"env_logger 0.6.2",
"fs2",
"futures 0.3.17",
@@ -5138,7 +7006,7 @@ dependencies = [
"bincode",
"bytes 0.5.6",
"chrono",
- "config",
+ "config 0.9.3",
"derive-error",
"env_logger 0.7.1",
"futures 0.3.17",
@@ -5164,7 +7032,7 @@ dependencies = [
"tonic-build",
"tracing",
"tracing-futures",
- "tracing-subscriber",
+ "tracing-subscriber 0.2.25",
"url 2.2.2",
]
@@ -5272,7 +7140,155 @@ dependencies = [
"tari_wallet",
"tempfile",
"thiserror",
- "tokio",
+ "tokio",
+]
+
+[[package]]
+name = "tauri"
+version = "1.0.0-beta.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79a0579dcc6fb883fe90dd3c66d76b8b8f4a1786e1e915e314b2017a500ede09"
+dependencies = [
+ "attohttpc",
+ "base64 0.13.0",
+ "bincode",
+ "cfg_aliases",
+ "clap 3.0.0-beta.2",
+ "dirs-next 2.0.0",
+ "either",
+ "embed_plist",
+ "flate2",
+ "futures 0.3.17",
+ "futures-lite",
+ "glib",
+ "gtk",
+ "http",
+ "ignore",
+ "minisign-verify",
+ "notify-rust",
+ "once_cell",
+ "open",
+ "os_info",
+ "os_pipe",
+ "percent-encoding 2.1.0",
+ "rand 0.8.4",
+ "raw-window-handle 0.3.4",
+ "rfd",
+ "semver 1.0.4",
+ "serde 1.0.130",
+ "serde_json",
+ "serde_repr",
+ "shared_child",
+ "state",
+ "tar",
+ "tauri-macros",
+ "tauri-runtime",
+ "tauri-runtime-wry",
+ "tauri-utils",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "url 2.2.2",
+ "uuid",
+ "zip",
+]
+
+[[package]]
+name = "tauri-build"
+version = "1.0.0-beta.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c9c9a9bea25b9d6f5845b8662e18447e17218f99860cab37e39e2b57a9fcd49"
+dependencies = [
+ "anyhow",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "serde_json",
+ "tauri-utils",
+ "winres",
+]
+
+[[package]]
+name = "tauri-codegen"
+version = "1.0.0-beta.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1663739ab53e281919676f216fb56a031104d0d2cd1a2dd5b012d279bcdb0ea4"
+dependencies = [
+ "blake3",
+ "kuchiki",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "regex",
+ "serde 1.0.130",
+ "serde_json",
+ "tauri-utils",
+ "thiserror",
+ "walkdir",
+ "zstd",
+]
+
+[[package]]
+name = "tauri-macros"
+version = "1.0.0-beta.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddf9f5868402323f35ef94fa6ab1d5d10b29aea9de598d829723aa1db5693b4"
+dependencies = [
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+ "tauri-codegen",
+]
+
+[[package]]
+name = "tauri-runtime"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9c52eccfb7f2ce5a09262bdc3671f0f07f637e27f8aa25e5f38145cddcd4e01"
+dependencies = [
+ "gtk",
+ "http",
+ "http-range",
+ "infer",
+ "serde 1.0.130",
+ "serde_json",
+ "tauri-utils",
+ "thiserror",
+ "uuid",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "tauri-runtime-wry"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fed8dd0a448c303fa764859d6dfa1c746c4f2c6c30a83c162f8bebb12e4af4e"
+dependencies = [
+ "gtk",
+ "ico",
+ "infer",
+ "png 0.16.8",
+ "tauri-runtime",
+ "tauri-utils",
+ "uuid",
+ "winapi 0.3.9",
+ "wry",
+]
+
+[[package]]
+name = "tauri-utils"
+version = "1.0.0-beta.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb9b79594f22b6ed0cc8362e0dfde5b7969962de3cd8ca683de702e59e8221b"
+dependencies = [
+ "html5ever",
+ "kuchiki",
+ "phf 0.10.1",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "serde 1.0.130",
+ "serde_json",
+ "thiserror",
+ "url 2.2.2",
+ "zstd",
]
[[package]]
@@ -5289,6 +7305,17 @@ dependencies = [
"winapi 0.3.9",
]
+[[package]]
+name = "tendril"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9ef557cb397a4f0a5a3a628f06515f78563f2209e64d47055d9dc6052bf5e33"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
[[package]]
name = "termcolor"
version = "1.1.2"
@@ -5321,6 +7348,21 @@ dependencies = [
"unicode-width",
]
+[[package]]
+name = "textwrap"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "203008d98caf094106cfaba70acfed15e18ed3ddb7d94e49baec153a2b462789"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thin-slice"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
+
[[package]]
name = "thiserror"
version = "1.0.30"
@@ -5602,6 +7644,19 @@ dependencies = [
"syn 1.0.81",
]
+[[package]]
+name = "tor-hash-passwd"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b83cd43a176c0c19d5db4401283e8f5c296b9c6c7fa29029de15cc445f26e12"
+dependencies = [
+ "hex",
+ "hex-literal",
+ "rand 0.8.4",
+ "sha1",
+ "thiserror",
+]
+
[[package]]
name = "tower"
version = "0.4.11"
@@ -5714,7 +7769,7 @@ dependencies = [
"tracing",
"tracing-core",
"tracing-log",
- "tracing-subscriber",
+ "tracing-subscriber 0.2.25",
]
[[package]]
@@ -5736,7 +7791,7 @@ dependencies = [
"ansi_term 0.12.1",
"chrono",
"lazy_static 1.4.0",
- "matchers",
+ "matchers 0.0.1",
"regex",
"serde 1.0.130",
"serde_json",
@@ -5749,6 +7804,24 @@ dependencies = [
"tracing-serde",
]
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245da694cc7fc4729f3f418b304cb57789f1bed2a78c575407ab8a23f53cb4d3"
+dependencies = [
+ "ansi_term 0.12.1",
+ "lazy_static 1.4.0",
+ "matchers 0.1.0",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
[[package]]
name = "traitobject"
version = "0.1.0"
@@ -6022,6 +8095,7 @@ dependencies = [
"idna 0.2.3",
"matches",
"percent-encoding 2.1.0",
+ "serde 1.0.130",
]
[[package]]
@@ -6036,6 +8110,15 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372"
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+dependencies = [
+ "getrandom 0.2.3",
+]
+
[[package]]
name = "vcpkg"
version = "0.2.15"
@@ -6048,6 +8131,18 @@ version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+[[package]]
+name = "version-compare"
+version = "0.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1"
+
+[[package]]
+name = "version-compare"
+version = "0.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
+
[[package]]
name = "version_check"
version = "0.1.5"
@@ -6060,6 +8155,18 @@ version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
[[package]]
name = "walkdir"
version = "2.3.2"
@@ -6102,7 +8209,7 @@ dependencies = [
"scoped-tls",
"serde 1.0.130",
"serde_json",
- "serde_urlencoded",
+ "serde_urlencoded 0.7.0",
"tokio",
"tokio-stream",
"tokio-tungstenite",
@@ -6199,6 +8306,52 @@ dependencies = [
"wasm-bindgen",
]
+[[package]]
+name = "webkit2gtk"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3e47b7f870883fc21612d2a51b74262f7f2cc5371f1621370817292a35300a9"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk",
+ "gdk-sys",
+ "gio",
+ "gio-sys 0.14.0",
+ "glib",
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "gtk",
+ "gtk-sys",
+ "javascriptcore-rs",
+ "libc",
+ "once_cell",
+ "webkit2gtk-sys",
+]
+
+[[package]]
+name = "webkit2gtk-sys"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b66ccc9f0cb4de7c3b92376a5bf64e7ddffb33852f092721731a039ec38dda98"
+dependencies = [
+ "atk-sys",
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys 0.14.0",
+ "glib-sys 0.14.0",
+ "gobject-sys 0.14.0",
+ "gtk-sys",
+ "javascriptcore-rs-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "soup-sys",
+ "system-deps 3.2.0",
+]
+
[[package]]
name = "webpki"
version = "0.21.4"
@@ -6209,6 +8362,38 @@ dependencies = [
"untrusted",
]
+[[package]]
+name = "webview2"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "283bf6b0ed9c83faea8c7bfe40bb261592147a109effaa4077eed294863d5031"
+dependencies = [
+ "com",
+ "once_cell",
+ "webview2-sys",
+ "widestring",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "webview2-sys"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24b7889e893ac4c50d7346356be3ce13a85e56512c38b8fde0526559b8012a4c"
+dependencies = [
+ "com",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
[[package]]
name = "which"
version = "3.1.1"
@@ -6229,6 +8414,18 @@ dependencies = [
"libc",
]
+[[package]]
+name = "widestring"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
+
+[[package]]
+name = "wildmatch"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f44b95f62d34113cf558c93511ac93027e03e9c29a60dd0fd70e6e025c7270a"
+
[[package]]
name = "winapi"
version = "0.2.8"
@@ -6272,6 +8469,42 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+[[package]]
+name = "windows"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9f39345ae0c8ab072c0ac7fe8a8b411636aa34f89be19ddd0d9226544f13944"
+dependencies = [
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0866510a3eca9aed73a077490bbbf03e5eaac4e1fd70849d89539e5830501fd"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf0ffed56b7e9369a29078d2ab3aaeceea48eb58999d2cff3aa2494a275b95c6"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "384a173630588044205a2993b6864a2f56e5a8c1e7668c07b93ec18cf4888dc4"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bd8f062d8ca5446358159d79a90be12c543b3a965c847c8f3eedf14b321d399"
+
[[package]]
name = "winreg"
version = "0.7.0"
@@ -6281,6 +8514,67 @@ dependencies = [
"winapi 0.3.9",
]
+[[package]]
+name = "winres"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
+dependencies = [
+ "toml 0.5.8",
+]
+
+[[package]]
+name = "winrt-notification"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eda101fb8e034a25f3d50a0714d7ca4f234a4fc7bc57427f6d81040db0ccbe6a"
+dependencies = [
+ "strum 0.22.0",
+ "windows",
+ "xml-rs",
+]
+
+[[package]]
+name = "wry"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f9549393a3917b5303277abb0267f8eecf9fd629b25f1c04e5284aa58b61915"
+dependencies = [
+ "cocoa",
+ "core-graphics 0.22.3",
+ "gdk",
+ "gio",
+ "glib",
+ "gtk",
+ "http",
+ "libc",
+ "log",
+ "objc",
+ "objc_id",
+ "once_cell",
+ "serde 1.0.130",
+ "serde_json",
+ "tao",
+ "thiserror",
+ "url 2.2.2",
+ "webkit2gtk",
+ "webkit2gtk-sys",
+ "webview2",
+ "webview2-sys",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59"
+dependencies = [
+ "lazy_static 1.4.0",
+ "libc",
+ "pkg-config",
+]
+
[[package]]
name = "x25519-dalek"
version = "1.2.0"
@@ -6292,6 +8586,21 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "xattr"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
[[package]]
name = "yaml-rust"
version = "0.4.5"
@@ -6315,6 +8624,41 @@ dependencies = [
"static_assertions",
]
+[[package]]
+name = "zbus"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2326acc379a3ac4e34b794089f5bdb17086bf29a5fdf619b7b4cc772dc2e9dad"
+dependencies = [
+ "async-io",
+ "byteorder",
+ "derivative",
+ "enumflags2",
+ "fastrand",
+ "futures 0.3.17",
+ "nb-connect",
+ "nix 0.17.0",
+ "once_cell",
+ "polling",
+ "scoped-tls",
+ "serde 1.0.130",
+ "serde_repr",
+ "zbus_macros",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a482c56029e48681b89b92b5db3c446db0915e8dd1052c0328a574eda38d5f93"
+dependencies = [
+ "proc-macro-crate 0.1.5",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
+
[[package]]
name = "zeroize"
version = "1.3.0"
@@ -6335,3 +8679,72 @@ dependencies = [
"syn 1.0.81",
"synstructure",
]
+
+[[package]]
+name = "zip"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
+dependencies = [
+ "byteorder",
+ "bzip2",
+ "crc32fast",
+ "flate2",
+ "thiserror",
+ "time",
+]
+
+[[package]]
+name = "zstd"
+version = "0.9.0+zstd.1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07749a5dc2cb6b36661290245e350f15ec3bbb304e493db54a1d354480522ccd"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "4.1.1+zstd.1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c91c90f2c593b003603e5e0493c837088df4469da25aafff8bce42ba48caf079"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "1.6.1+zstd.1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "615120c7a2431d16cf1cf979e7fc31ba7a5b5e5707b29c8a99e5dbf8a8392a33"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "zvariant"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a68c7b55f2074489b7e8e07d2d0a6ee6b4f233867a653c664d8020ba53692525"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde 1.0.130",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ca5e22593eb4212382d60d26350065bf2a02c34b85bc850474a74b589a3de9"
+dependencies = [
+ "proc-macro-crate 1.1.0",
+ "proc-macro2 1.0.32",
+ "quote 1.0.10",
+ "syn 1.0.81",
+]
diff --git a/Cargo.toml b/Cargo.toml
index 385dbaf1dd..e26dd17415 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -19,7 +19,7 @@ members = [
"infrastructure/storage",
"infrastructure/test_utils",
"applications/deps_only",
- # "applications/installer",
+ "applications/launchpad/backend",
"applications/tari_base_node",
"applications/tari_console_wallet",
"applications/test_faucet",
diff --git a/applications/installer/Cargo.toml b/applications/installer/Cargo.toml
deleted file mode 100644
index 87b343848d..0000000000
--- a/applications/installer/Cargo.toml
+++ /dev/null
@@ -1,7 +0,0 @@
-[package]
-name = "installer"
-version = "0.1.0"
-edition = "2018"
-
-[dependencies]
-dirs = "3.0"
diff --git a/applications/installer/src/main.rs b/applications/installer/src/main.rs
deleted file mode 100644
index e0265f2609..0000000000
--- a/applications/installer/src/main.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-mod config;
-
-fn main() {}
diff --git a/applications/launchpad/.dockerignore b/applications/launchpad/.dockerignore
new file mode 100644
index 0000000000..b3f92c7597
--- /dev/null
+++ b/applications/launchpad/.dockerignore
@@ -0,0 +1,3 @@
+build_images.sh
+versions.txt
+docker_rig/*.Dockerfile
\ No newline at end of file
diff --git a/applications/launchpad/.gitignore b/applications/launchpad/.gitignore
new file mode 100644
index 0000000000..b1d86c6ef2
--- /dev/null
+++ b/applications/launchpad/.gitignore
@@ -0,0 +1,23 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+gui/node_modules
+gui/.pnp
+gui/.pnp.js
+
+# testing
+gui/coverage
+
+# production
+gui/build
+
+# misc
+.DS_Store
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+gui/npm-debug.log*
+gui/yarn-debug.log*
+gui/yarn-error.log*
diff --git a/applications/launchpad/backend/.gitignore b/applications/launchpad/backend/.gitignore
new file mode 100644
index 0000000000..c123704591
--- /dev/null
+++ b/applications/launchpad/backend/.gitignore
@@ -0,0 +1,4 @@
+# Generated by Cargo
+# will have compiled files and executables
+/target/
+WixTools
diff --git a/applications/launchpad/backend/Cargo.toml b/applications/launchpad/backend/Cargo.toml
new file mode 100644
index 0000000000..a84fc5783a
--- /dev/null
+++ b/applications/launchpad/backend/Cargo.toml
@@ -0,0 +1,36 @@
+[package]
+name = "tari_launchpad"
+version = "0.1.0"
+description = "The Tari Launcher"
+authors = ["The Tari Development Community"]
+license = ""
+repository = ""
+edition = "2018"
+build = "src/build.rs"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[build-dependencies]
+tauri-build = { version = "1.0.0-beta.4" }
+
+[dependencies]
+tari_app_utilities = { version = "0.22.0", path = "../../tari_app_utilities" }
+tari_comms = { version = "0.22.0", path = "../../../comms" }
+bollard = "0.11.0"
+config = "0.11.0"
+env_logger = "0.9.0"
+log = "0.4.14"
+rand = "0.8.4"
+serde_json = "1.0"
+serde = { version = "1.0", features = ["derive"] }
+strum = "0.23.0"
+strum_macros = "0.23.0"
+tauri = { version = "1.0.0-beta.8", features = ["api-all", "cli"] }
+tor-hash-passwd = "1.0.1"
+thiserror = "1.0.30"
+tokio = { version = "1.9", features= ["sync"] }
+futures = "0.3"
+
+[features]
+default = [ "custom-protocol" ]
+custom-protocol = [ "tauri/custom-protocol" ]
diff --git a/applications/launchpad/backend/assets/config.toml b/applications/launchpad/backend/assets/config.toml
new file mode 100644
index 0000000000..5941810e4a
--- /dev/null
+++ b/applications/launchpad/backend/assets/config.toml
@@ -0,0 +1,160 @@
+# Config for launchpad v0.0.2
+########################################################################################################################
+# Common Configuration Options #
+########################################################################################################################
+
+[common]
+network = "weatherwax"
+message_cache_size = 10
+message_cache_ttl = 1440
+denylist_ban_period = 1440
+buffer_rate_limit_console_wallet = 1000
+dedup_cache_capacity = 25000
+rpc_max_simultaneous_sessions = 1000
+
+[common.weatherwax]
+peer_seeds = [
+ # weatherwax
+ "98bc76afc1c35ad4651bdc9ef57bbe0655a2ea3cd86c0e19b5fd5890546eb040::/onion3/33izgtjkrlxhxybj6luqowkpiy2wvte43osejnbqyieqtdfhovzghxad:18141", #jozi
+ "9a26e910288213d649b26f9a7a7ee51fe2b2a67ff7d42334523463bf4be94312::/onion3/56kq54ylttnbl5ikotqex3oqvtzlxdpn7zlx4v56rvzf4kq7eezlclid:18141", #london
+ "6afd5b3c7772ad7d4bb26e0c19668fe04f2d68f99de9e132bee50a6c1846946d::/onion3/may4ajbmcn4dlnzf6fanvqlklxzqiw6qwu6ywqwkjc3bb354rc2i5wid:18141", #ncal
+ "8e7beec9becdc44fe6015a00d97a77fa3dbafe65127dcc988df6326bd9fd040d::/onion3/3pise36l4imoopsbjic5rtw67adx7rms6w5pgjmccpdwiqx66j7oqcqd:18141", #nvir
+ "80bb590d943a46e63ae79af5dc2c7d35a3dcd7922c182b28f619dc4cfc366f44::/onion3/oaxwahri7r3h5qjlcdbveyjmg4jsttausik66bicmhixft73nmvecdad:18141", #oregon
+ "981cc8cd1e4fe2f99ea1bd3e0ab1e7821ca0bfab336a4967cfec053fee86254c::/onion3/7hxpnxrxycdfevirddau7ybofwedaamjrg2ijm57k2kevh5q46ixamid:18141", #seoul
+ "f2ce179fb733725961a5f7e1e45dacdd443dd43ba6237438d6abe344fb717058::/onion3/nvgdmjf4wucgatz7vemzvi2u4sw5o4gyzwuikagpepoj4w7mkii47zid:18141", #stockholm
+ "909c0160f4d8e815aba5c2bbccfcceb448877e7b38759fb160f3e9494484d515::/onion3/qw5uxv533sqdn2qoncfyqo35dgecy4rt4x27rexi2her6q6pcpxbm4qd:18141", #sydney
+ # igor
+ "8e7eb81e512f3d6347bf9b1ca9cd67d2c8e29f2836fc5bd608206505cc72af34::/onion3/l4wouomx42nezhzexjdzfh7pcou5l7df24ggmwgekuih7tkv2rsaokqd:18141",
+ "00b35047a341401bcd336b2a3d564280a72f6dc72ec4c739d30c502acce4e803::/onion3/ojhxd7z6ga7qrvjlr3px66u7eiwasmffnuklscbh5o7g6wrbysj45vid:18141",
+ "40a9d8573745072534bce7d0ecafe882b1c79570375a69841c08a98dee9ecb5f::/onion3/io37fylc2pupg4cte4siqlsmuszkeythgjsxs2i3prm6jyz2dtophaad:18141",
+ "126c7ee64f71aca36398b977dd31fbbe9f9dad615df96473fb655bef5709c540::/onion3/6ilmgndocop7ybgmcvivbdsetzr5ggj4hhsivievoa2dx2b43wqlrlid:18141",
+]
+dns_seeds =["seeds.weatherwax.tari.com"]
+dns_seeds_use_dnssec = false
+
+[common.igor]
+peer_seeds = [
+ # igor
+ "8e7eb81e512f3d6347bf9b1ca9cd67d2c8e29f2836fc5bd608206505cc72af34::/onion3/l4wouomx42nezhzexjdzfh7pcou5l7df24ggmwgekuih7tkv2rsaokqd:18141",
+ "00b35047a341401bcd336b2a3d564280a72f6dc72ec4c739d30c502acce4e803::/onion3/ojhxd7z6ga7qrvjlr3px66u7eiwasmffnuklscbh5o7g6wrbysj45vid:18141",
+ "40a9d8573745072534bce7d0ecafe882b1c79570375a69841c08a98dee9ecb5f::/onion3/io37fylc2pupg4cte4siqlsmuszkeythgjsxs2i3prm6jyz2dtophaad:18141",
+ "126c7ee64f71aca36398b977dd31fbbe9f9dad615df96473fb655bef5709c540::/onion3/6ilmgndocop7ybgmcvivbdsetzr5ggj4hhsivievoa2dx2b43wqlrlid:18141",
+]
+
+dns_seeds =["seeds.igor.tari.com"]
+# dns_seeds_name_server = "1.1.1.1:853/cloudfare-dns.com"
+dns_seeds_use_dnssec = false
+
+# auto_update.check_interval = 300
+# "auto_update.dns_hosts" = ["updates.igor.taripulse.com"]
+# "auto_update.hashes_url" = "https://
/hashes.txt"
+# "auto_update.hashes_sig_url" = "https:///hashes.txt.sig"
+
+[common.dibbler]
+dns_seeds =["seeds.dibbler.tari.com"]
+peer_seeds = [
+ "721e9da488302e69523bca1a9cdcbd2419dddda11698a1e8c6c7bd619659ff21::/onion3/qw4ymrzbanbcr3wwlesxbot72iayd7xdjcrtnacbwgk637vfon47hqad:18141",
+ # 333388d1cbe3e2bd17453d052f
+ "c2eca9cf32261a1343e21ed718e79f25bfc74386e9305350b06f62047f519347::/onion3/6yxqk2ybo43u73ukfhyc42qn25echn4zegjpod2ccxzr2jd5atipwzqd:18141",
+ # 555575715a49fc242d756e52ca
+ "42fcde82b44af1de95a505d858cb31a422c56c4ac4747fbf3da47d648d4fc346::/onion3/2l3e7ysmihc23zybapdrsbcfg6omtjtfkvwj65dstnfxkwtai2fawtyd:18141",
+ # 77771f53be07fab4be5f1e1ff7
+ "50e6aa8f6c50f1b9d9b3d438dfd2a29cfe1f3e3a650bd9e6b1e10f96b6c38f4d::/onion3/7s6y3cz5bnewlj5ypm7sekhgvqjyrq4bpaj5dyvvo7vxydj7hsmyf5ad:18141",
+ # 9999016f1f3a6162dddf5a45aa
+ "36a9df45e1423b5315ffa7a91521924210c8e1d1537ad0968450f20f21e5200d::/onion3/v24qfheti2rztlwzgk6v4kdbes3ra7mo3i2fobacqkbfrk656e3uvnid:18141",
+ # bbbb8358387d81c388fadb4649
+ "be128d570e8ec7b15c101ee1a56d6c56dd7d109199f0bd02f182b71142b8675f::/onion3/ha422qsy743ayblgolui5pg226u42wfcklhc5p7nbhiytlsp4ir2syqd:18141",
+ # eeeeb0a943ed143e613a135392
+ "3e0321c0928ca559ab3c0a396272dfaea705efce88440611a38ff3898b097217::/onion3/sl5ledjoaisst6d4fh7kde746dwweuge4m4mf5nkzdhmy57uwgtb7qqd:18141"
+]
+########################################################################################################################
+# Base Node Configuration Options #
+########################################################################################################################
+
+[base_node]
+network = "weatherwax"
+
+# Configuration options for testnet Weatherwax
+[base_node.weatherwax]
+db_type = "lmdb"
+# db_init_size_mb = 1000
+# db_grow_size_mb = 500
+# db_resize_threshold_mb = 100
+# The maximum number of orphans that can be stored in the Orphan block pool.
+orphan_storage_capacity = 120
+#orphan_db_clean_out_threshold = 0
+# The pruning horizon. Default value is "0", which indicates an archival node without any pruning.
+pruning_horizon = 0
+# The amount of messages that will be permitted in the flood ban timespan of 100s
+flood_ban_max_msg_count = 10000
+# The relative path to store persistent data
+data_dir = "/blockchain/weatherwax"
+# This allowlist provides a method to force syncing from any known nodes you may choose
+# force_sync_peers = ["public_key1::address1", "public_key2::address2",... ]
+force_sync_peers = []
+# Configure the maximum number of threads available for base node operation.
+max_threads = 512
+# The number of threads to spawn and keep active at all times. The default is the number of cores available on this node.
+core_threads = 4
+allow_test_addresses = false
+grpc_enabled = true
+# The socket to expose for the gRPC base node server.
+grpc_base_node_address = "0.0.0.0:18142"
+# The socket to expose for the gRPC wallet server.
+grpc_console_wallet_address = "0.0.0.0:18143"
+# A path to the file that stores your node identity and secret key
+base_node_identity_file = "/var/tari/config/weatherwax/tari_base_node_id.json"
+# A path to the file that stores your console wallet's node identity and secret key
+console_wallet_identity_file = "/var/tari/config/weatherwax/tari_console_wallet_id.json"
+# -------------- Transport configuration --------------
+transport = "tor"
+tor_control_address = "/dns4/tor/tcp/9051"
+# Overridden by the docker environment variables
+tor_control_auth = "password=tari"
+tor_onion_port = 18141
+tor_forward_address = "/dns4/base_node/tcp/18189"
+tor_socks_address_override="/dns4/tor/tcp/9050"
+base_node_tor_identity_file = "/var/tari/config/weatherwax/base_node_tor.json"
+console_wallet_tor_identity_file = "/var/tari/config/weatherwax/console_wallet_tor.json"
+# Optionally bind an additional TCP socket for inbound Tari P2P protocol commms.
+# auxilary_tcp_listener_address = "/ip4/127.0.0.1/tcp/9998"
+# When these addresses are encountered when dialing another peer, the tor proxy is bypassed and the connection is made
+# direcly over TCP. /ip4, /ip6, /dns, /dns4 and /dns6 are supported.
+# tor_proxy_bypass_addresses = ["/dns4/my-foo-base-node/tcp/9998"]
+# When using the tor transport and set to true, outbound TCP connections bypass the tor proxy. Defaults to false for better privacy
+# tor_proxy_bypass_for_outbound_tcp = false;
+
+[base_node.igor]
+db_type = "lmdb"
+#pruning_horizon = 0
+flood_ban_max_msg_count = 10000
+data_dir = "/blockchain/igor"
+allow_test_addresses = false
+grpc_enabled = true
+grpc_base_node_address = "127.0.0.1:18142"
+grpc_console_wallet_address = "127.0.0.1:18143"
+base_node_identity_file = "/var/tari/config/igor/base_node_id.json"
+console_wallet_identity_file = "/var/tari/config/igor/console_wallet_id.json"
+
+# -------------- Transport configuration --------------
+transport = "tor"
+tor_control_address = "/dns4/tor/tcp/9051"
+tor_control_auth = "password=tari"
+tor_onion_port = 18141
+tor_forward_address = "/dns4/base_node/tcp/18189"
+tor_socks_address_override="/dns4/tor/tcp/9050"
+base_node_tor_identity_file = "/var/tari/config/igor/base_node_tor.json"
+console_wallet_tor_identity_file = "/var/tari/config/igor/console_wallet_tor.json"
+# auxilary_tcp_listener_address = "/ip4/127.0.0.1/tcp/9998"
+# tor_proxy_bypass_addresses = ["/dns4/my-foo-base-node/tcp/9998"]
+# tor_proxy_bypass_for_outbound_tcp = false;
+
+########################################################################################################################
+# Mempool Configuration Options #
+########################################################################################################################
+
+[mempool.weatherwax]
+
+[mempool.igor]
+
+
diff --git a/applications/launchpad/backend/assets/log4rs.yml b/applications/launchpad/backend/assets/log4rs.yml
new file mode 100644
index 0000000000..7982521aa0
--- /dev/null
+++ b/applications/launchpad/backend/assets/log4rs.yml
@@ -0,0 +1,162 @@
+# A customised logfile configuration for running the Tari system in docker
+
+# timestamp [target] LEVEL message
+refresh_rate: 30 seconds
+appenders:
+ # An appender named "stdout" that writes to stdout
+ stdout:
+ kind: console
+ encoder:
+ pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{t}] {h({l}):5} {m}{n}"
+
+ # An appender named "network" that writes to a file with a custom pattern encoder
+ network:
+ kind: rolling_file
+ path: "log/network.log"
+ policy:
+ kind: compound
+ trigger:
+ kind: size
+ limit: 10mb
+ roller:
+ kind: fixed_window
+ base: 1
+ count: 5
+ pattern: "log/network.{}.log"
+ encoder:
+ pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{t}] {l:5} {m}{n}"
+
+ # An appender named "core" that writes to a file with a custom pattern encoder
+ core:
+ kind: rolling_file
+ path: "log/core.log"
+ policy:
+ kind: compound
+ trigger:
+ kind: size
+ limit: 10mb
+ roller:
+ kind: fixed_window
+ base: 1
+ count: 5
+ pattern: "log/core.{}.log"
+ encoder:
+ pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{t}] {l:5} {m}{n}"
+
+ # An appender named "other" that writes to a file with a custom pattern encoder
+ other:
+ kind: rolling_file
+ path: "log/other.log"
+ policy:
+ kind: compound
+ trigger:
+ kind: size
+ limit: 10mb
+ roller:
+ kind: fixed_window
+ base: 1
+ count: 5
+ pattern: "log/other.{}.log"
+ encoder:
+ pattern: "{d(%Y-%m-%d %H:%M:%S.%f)} [{t}] {l:5} {m}{n}"
+
+# Set the default logging level to "info"
+root:
+ level: info
+ appenders:
+ - core
+ - stdout
+
+loggers:
+ # All events that get logged to core. Many of these are in separate log folders corresponding to their docker containers
+ tari::application:
+ level: info
+ appenders:
+ - core
+ additive: false
+ base_node::app:
+ level: info
+ appenders:
+ - core
+ additive: false
+ c:
+ level: info
+ appenders:
+ - core
+ additive: false
+ tari:
+ level: info
+ appenders:
+ - core
+ additive: false
+ wallet:
+ level: info
+ appenders:
+ - core
+ additive: false
+ tari_mining_node:
+ level: info
+ appenders:
+ - core
+ additive: false
+ tari_mm_proxy:
+ level: info
+ appenders:
+ - core
+ additive: false
+
+ tracing:
+ level: info
+ appenders:
+ - other
+ additive: false
+
+
+ # Comms messages get logged to the 'network' log
+ comms:
+ level: info
+ appenders:
+ - network
+ additive: false
+ tari_comms:
+ level: info
+ appenders:
+ - network
+ additive: false
+ p2p:
+ level: info
+ appenders:
+ - network
+ additive: false
+ yamux:
+ level: warn
+ appenders:
+ - network
+ additive: false
+ mio:
+ level: error
+ appenders:
+ - network
+ additive: false
+
+ # Miscellaneous events. Log these in 'other'
+ rustyline:
+ level: error
+ appenders:
+ - other
+ additive: false
+ tokio_util:
+ level: error
+ appenders:
+ - other
+ additive: false
+ pgp:
+ level: warn
+ appenders:
+ - other
+ additive: false
+ stress_test:
+ level: info
+ appenders:
+ - other
+ additive: false
diff --git a/applications/launchpad/backend/assets/torrc b/applications/launchpad/backend/assets/torrc
new file mode 100644
index 0000000000..d05b2c7526
--- /dev/null
+++ b/applications/launchpad/backend/assets/torrc
@@ -0,0 +1,2 @@
+# see settings.rs::tor_cmd() for settings sent to docker container
+
diff --git a/applications/launchpad/backend/icons/android-icon-192x192.png b/applications/launchpad/backend/icons/android-icon-192x192.png
new file mode 100644
index 0000000000..19a7b783c0
Binary files /dev/null and b/applications/launchpad/backend/icons/android-icon-192x192.png differ
diff --git a/applications/launchpad/backend/icons/apple-icon-114x114.png b/applications/launchpad/backend/icons/apple-icon-114x114.png
new file mode 100644
index 0000000000..5c4d95a0ae
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-114x114.png differ
diff --git a/applications/launchpad/backend/icons/apple-icon-120x120.png b/applications/launchpad/backend/icons/apple-icon-120x120.png
new file mode 100644
index 0000000000..03ee8dabbc
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-120x120.png differ
diff --git a/applications/launchpad/backend/icons/apple-icon-144x144.png b/applications/launchpad/backend/icons/apple-icon-144x144.png
new file mode 100644
index 0000000000..0546994fae
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-144x144.png differ
diff --git a/applications/launchpad/backend/icons/apple-icon-152x152.png b/applications/launchpad/backend/icons/apple-icon-152x152.png
new file mode 100644
index 0000000000..795baaaf1d
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-152x152.png differ
diff --git a/applications/launchpad/backend/icons/apple-icon-180x180.png b/applications/launchpad/backend/icons/apple-icon-180x180.png
new file mode 100644
index 0000000000..874e750cf1
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-180x180.png differ
diff --git a/applications/launchpad/backend/icons/apple-icon-57x57.png b/applications/launchpad/backend/icons/apple-icon-57x57.png
new file mode 100644
index 0000000000..0ce9b1b437
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-57x57.png differ
diff --git a/applications/launchpad/backend/icons/apple-icon-57x57.png.1 b/applications/launchpad/backend/icons/apple-icon-57x57.png.1
new file mode 100644
index 0000000000..0ce9b1b437
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-57x57.png.1 differ
diff --git a/applications/launchpad/backend/icons/apple-icon-60x60.png b/applications/launchpad/backend/icons/apple-icon-60x60.png
new file mode 100644
index 0000000000..1ff8fcc7ce
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-60x60.png differ
diff --git a/applications/launchpad/backend/icons/apple-icon-72x72.png b/applications/launchpad/backend/icons/apple-icon-72x72.png
new file mode 100644
index 0000000000..86a4c7210d
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-72x72.png differ
diff --git a/applications/launchpad/backend/icons/apple-icon-76x76.png b/applications/launchpad/backend/icons/apple-icon-76x76.png
new file mode 100644
index 0000000000..7b29c60b96
Binary files /dev/null and b/applications/launchpad/backend/icons/apple-icon-76x76.png differ
diff --git a/applications/launchpad/backend/icons/favicon-16x16.png b/applications/launchpad/backend/icons/favicon-16x16.png
new file mode 100644
index 0000000000..223883aacc
Binary files /dev/null and b/applications/launchpad/backend/icons/favicon-16x16.png differ
diff --git a/applications/launchpad/backend/icons/favicon-32x32.png b/applications/launchpad/backend/icons/favicon-32x32.png
new file mode 100644
index 0000000000..bbe1e1bb6b
Binary files /dev/null and b/applications/launchpad/backend/icons/favicon-32x32.png differ
diff --git a/applications/launchpad/backend/icons/favicon-96x96.png b/applications/launchpad/backend/icons/favicon-96x96.png
new file mode 100644
index 0000000000..6cbdcfe045
Binary files /dev/null and b/applications/launchpad/backend/icons/favicon-96x96.png differ
diff --git a/applications/launchpad/backend/icons/icon.ico b/applications/launchpad/backend/icons/icon.ico
new file mode 100644
index 0000000000..b3636e4b22
Binary files /dev/null and b/applications/launchpad/backend/icons/icon.ico differ
diff --git a/applications/launchpad/backend/icons/icon.png b/applications/launchpad/backend/icons/icon.png
new file mode 100644
index 0000000000..329808c607
Binary files /dev/null and b/applications/launchpad/backend/icons/icon.png differ
diff --git a/applications/launchpad/backend/icons/tari_issues.png b/applications/launchpad/backend/icons/tari_issues.png
new file mode 100644
index 0000000000..c559ff3047
Binary files /dev/null and b/applications/launchpad/backend/icons/tari_issues.png differ
diff --git a/applications/launchpad/backend/package.json b/applications/launchpad/backend/package.json
new file mode 100644
index 0000000000..0e8324338f
--- /dev/null
+++ b/applications/launchpad/backend/package.json
@@ -0,0 +1,7 @@
+{
+ "name": "tari_launchpad",
+ "version": "1.0.0",
+ "scripts": {
+ "tauri": "node ../../tooling/cli.js/bin/tauri"
+ }
+}
\ No newline at end of file
diff --git a/applications/launchpad/backend/src/build.rs b/applications/launchpad/backend/src/build.rs
new file mode 100644
index 0000000000..d860e1e6a7
--- /dev/null
+++ b/applications/launchpad/backend/src/build.rs
@@ -0,0 +1,3 @@
+fn main() {
+ tauri_build::build()
+}
diff --git a/applications/launchpad/backend/src/commands/create_workspace.rs b/applications/launchpad/backend/src/commands/create_workspace.rs
new file mode 100644
index 0000000000..95b6a6cac3
--- /dev/null
+++ b/applications/launchpad/backend/src/commands/create_workspace.rs
@@ -0,0 +1,67 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use std::path::Path;
+
+use log::*;
+use tauri::{
+ api::path::{resolve_path, BaseDirectory},
+ AppHandle,
+ Config,
+ Manager,
+ PackageInfo,
+ Wry,
+};
+
+use crate::{commands::AppState, docker::create_workspace_folders, error::LauncherError};
+
+/// Create a new workspace environment by creating a folder hierarchy (if required) at the `root_folder`, and copying
+/// the default config files into it.
+#[tauri::command]
+pub fn create_new_workspace(app: AppHandle, root_path: String) -> Result<(), String> {
+ let config = app.config();
+ let package_info = &app.state::().package_info;
+ let _ = create_workspace_folders(root_path.as_str()).map_err(|e| e.chained_message());
+ let path = Path::new(&root_path);
+ copy_config_file(path, config.as_ref(), package_info, "log4rs.yml").map_err(|e| e.chained_message())?;
+ copy_config_file(path, config.as_ref(), package_info, "config.toml").map_err(|e| e.chained_message())?;
+ info!("Workspace at {} complete!", root_path);
+ Ok(())
+}
+
+pub fn copy_config_file>(
+ root_path: S,
+ config: &Config,
+ package_info: &PackageInfo,
+ file: &str,
+) -> Result<(), LauncherError> {
+ let path = Path::new("assets").join(file);
+ let config_path = resolve_path(config, package_info, &path, Some(BaseDirectory::Resource))?;
+ let cfg = std::fs::read_to_string(&config_path).expect("The config assets were not bundled with the App");
+ info!("Log Configuration file ({}) loaded", file);
+ debug!("{}", cfg);
+ let dest = root_path.as_ref().join("config").join(file);
+ std::fs::write(&dest, &cfg)?;
+ info!("Log configuration file ({}) saved to workspace", file);
+ Ok(())
+}
diff --git a/applications/launchpad/backend/src/commands/events.rs b/applications/launchpad/backend/src/commands/events.rs
new file mode 100644
index 0000000000..2ab0097251
--- /dev/null
+++ b/applications/launchpad/backend/src/commands/events.rs
@@ -0,0 +1,65 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use futures::StreamExt;
+use log::*;
+use tauri::{AppHandle, Manager, Wry};
+
+use crate::commands::AppState;
+
+/// Subscribe to system-level docker events, such as container creation, volume, network events etc.
+/// This function does not actually return a result, but async commands have a [bug](https://github.com/tauri-apps/tauri/issues/2533)
+/// which is avoided by returning a `Result`.
+///
+/// A side effect of this command is that events are emitted to the `tari://docker-system-event` channel. Front-ends
+/// can listen to this event stream to read in the event messages.
+#[tauri::command]
+pub async fn events(app: AppHandle) -> Result<(), ()> {
+ info!("Setting up event stream");
+ let state = app.state::();
+ let docker = state.docker.read().await;
+ let mut stream = docker.events().await;
+ let app_clone = app.clone();
+ tauri::async_runtime::spawn(async move {
+ while let Some(event_result) = stream.next().await {
+ match event_result {
+ Ok(event) => {
+ debug!("Event received: {:?}", event);
+ if let Err(err) = app_clone.emit_all(event_name(), event) {
+ warn!("Could not emit event to front-end, {:?}", err);
+ }
+ },
+ Err(err) => {
+ warn!("Error in event stream: {:#?}", err)
+ },
+ };
+ }
+ info!("Event stream has closed.");
+ });
+ Ok(())
+}
+
+/// Extract data from the event object so we know which channel to emit the payload to
+pub fn event_name() -> &'static str {
+ "tari://docker-system-event"
+}
diff --git a/applications/launchpad/backend/src/commands/launch_docker.rs b/applications/launchpad/backend/src/commands/launch_docker.rs
new file mode 100644
index 0000000000..3f9a70be0e
--- /dev/null
+++ b/applications/launchpad/backend/src/commands/launch_docker.rs
@@ -0,0 +1,192 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use std::{convert::TryFrom, path::PathBuf, time::Duration};
+
+use log::*;
+use serde::{Deserialize, Serialize};
+use tauri::{AppHandle, Manager, Wry};
+
+use crate::{
+ commands::AppState,
+ docker::{
+ helpers::create_password,
+ BaseNodeConfig,
+ DockerWrapperError,
+ LaunchpadConfig,
+ MmProxyConfig,
+ Sha3MinerConfig,
+ TariNetwork,
+ TariWorkspace,
+ WalletConfig,
+ XmRigConfig,
+ DEFAULT_MINING_ADDRESS,
+ },
+ error::LauncherError,
+};
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct WorkspaceLaunchOptions {
+ root_folder: String,
+ tari_network: String,
+ has_base_node: bool,
+ has_wallet: bool,
+ has_sha3_miner: bool,
+ has_mm_proxy: bool,
+ has_xmrig: bool,
+ wait_for_tor: Option,
+ wallet_password: Option,
+ sha3_mining_threads: Option,
+ monerod_url: Option,
+ monero_username: Option,
+ monero_password: Option,
+ monero_use_auth: Option,
+ monero_mining_address: Option,
+ docker_registry: Option,
+ docker_tag: Option,
+}
+
+impl TryFrom for LaunchpadConfig {
+ type Error = LauncherError;
+
+ fn try_from(options: WorkspaceLaunchOptions) -> Result {
+ let tari_network = TariNetwork::try_from(options.tari_network.to_lowercase().as_str())?;
+ let tor_control_password = create_password(16);
+ let tor_delay = Duration::from_secs(options.wait_for_tor.unwrap_or(10));
+ let base_node = match options.has_base_node {
+ false => None,
+ true => Some(BaseNodeConfig { delay: tor_delay }),
+ };
+ let wallet = match options.has_wallet {
+ false => None,
+ true => {
+ if options.wallet_password.is_none() {
+ return Err(LauncherError::ConfigVariableRequired(
+ "wallet".to_string(),
+ "wallet_password".to_string(),
+ ));
+ }
+ Some(WalletConfig {
+ delay: tor_delay,
+ password: options.wallet_password.unwrap(),
+ })
+ },
+ };
+ let sha3_miner = match options.has_sha3_miner {
+ false => None,
+ true => Some(Sha3MinerConfig {
+ delay: Duration::from_secs(options.wait_for_tor.unwrap_or(15)),
+ num_mining_threads: options.sha3_mining_threads.unwrap_or(1),
+ }),
+ };
+ let mm_proxy = match options.has_mm_proxy {
+ false => None,
+ true => {
+ let mut config = MmProxyConfig {
+ delay: Duration::from_secs(options.wait_for_tor.unwrap_or(15)),
+ ..Default::default()
+ };
+ if let Some(val) = options.monerod_url {
+ config.monerod_url = val;
+ }
+ if let Some(val) = options.monero_username {
+ config.monero_username = val;
+ }
+ if let Some(val) = options.monero_password {
+ config.monero_password = val;
+ }
+ if let Some(val) = options.monero_use_auth {
+ config.monero_use_auth = val;
+ }
+ Some(config)
+ },
+ };
+ let xmrig = match options.has_xmrig {
+ false => None,
+ true => {
+ let monero_mining_address = options
+ .monero_mining_address
+ .unwrap_or_else(|| DEFAULT_MINING_ADDRESS.to_string());
+ Some(XmRigConfig {
+ delay: Duration::from_secs(options.wait_for_tor.unwrap_or(20)),
+ monero_mining_address,
+ })
+ },
+ };
+ Ok(LaunchpadConfig {
+ data_directory: PathBuf::from(options.root_folder),
+ tari_network,
+ tor_control_password,
+ base_node,
+ wallet,
+ sha3_miner,
+ mm_proxy,
+ xmrig,
+ registry: options.docker_registry,
+ tag: options.docker_tag,
+ })
+ }
+}
+
+/// This is an example of how we might launch a recipe. It's not currently used in the front-end, but essentially it
+/// launches all the containers in a choreographed fashion to stand up the entire mining infra.
+#[tauri::command]
+pub async fn launch_docker(app: AppHandle, name: String, config: WorkspaceLaunchOptions) -> Result<(), String> {
+ launch_docker_impl(app, name, config)
+ .await
+ .map_err(|e| e.chained_message())
+}
+
+async fn launch_docker_impl(
+ app: AppHandle,
+ name: String,
+ config: WorkspaceLaunchOptions,
+) -> Result<(), LauncherError> {
+ debug!("Starting docker launch sequence");
+ let state = app.state::();
+ let docker = state.docker_handle().await;
+ let should_create_workspace = {
+ let wrapper = state.workspaces.read().await;
+ !wrapper.workspace_exists(name.as_str())
+ }; // drop read-only lock
+ {
+ let mut wrapper = state.workspaces.write().await;
+ // Now that we have a write lock, we can create a new workspace if required
+ if should_create_workspace {
+ let config = LaunchpadConfig::try_from(config)?;
+ info!(
+ "Docker workspace does not exist. Creating one with config, {:#?}",
+ config
+ );
+ wrapper.create_workspace(name.as_str(), config)?;
+ }
+ info!("Launching Tari workspace, {}", name);
+ let workspace: &mut TariWorkspace = wrapper
+ .get_workspace_mut(name.as_str())
+ .ok_or(DockerWrapperError::UnexpectedError)?;
+ // Pipe docker container logs to Tauri using namespaced events
+ workspace.start_recipe(docker.clone()).await?;
+ } // Drop write lock
+ info!("Tari system, {} has launched", name);
+ Ok(())
+}
diff --git a/applications/installer/src/config/base_node.rs b/applications/launchpad/backend/src/commands/mod.rs
similarity index 66%
rename from applications/installer/src/config/base_node.rs
rename to applications/launchpad/backend/src/commands/mod.rs
index d3ab644bcc..1810a984a5 100644
--- a/applications/installer/src/config/base_node.rs
+++ b/applications/launchpad/backend/src/commands/mod.rs
@@ -19,27 +19,26 @@
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
-use crate::config::common::{InstallLocation, SourceLocation};
-
-pub struct BaseNodeOptions {
- // Where do we get the base node code from?
- source: SourceLocation,
- // Where do the base node and related files live?
- install_location: InstallLocation,
- // Tor setup
- tor_options: TorOptions,
-}
-
-pub enum TorLocation {
- // Use the globally instaled system version of tor
- System,
- // Run Tor from a docker image
- Docker,
- // Install a new version of Tor in the base node executable folder
- Local,
-}
+/// ! This module defines all the Tauri commands we expose to the front-end.
+/// ! These are generally constructed as wrappers around the lower-level methods in the `docker` module.
+/// ! All the commands follow roughly the same pattern:
+/// ! - handle input parameters
+/// ! - call the the underlying function
+/// ! - Map results to JSON and errors to String.
+mod create_workspace;
+mod events;
+mod launch_docker;
+mod pull_images;
+mod service;
+mod shutdown;
+mod state;
-pub struct TorOptions {
- location: TorLocation,
-}
+pub use create_workspace::create_new_workspace;
+pub use events::events;
+pub use launch_docker::launch_docker;
+pub use pull_images::{image_list, pull_images};
+pub use service::{create_default_workspace, start_service, stop_service};
+pub use shutdown::shutdown;
+pub use state::AppState;
diff --git a/applications/launchpad/backend/src/commands/pull_images.rs b/applications/launchpad/backend/src/commands/pull_images.rs
new file mode 100644
index 0000000000..8a7bc990a3
--- /dev/null
+++ b/applications/launchpad/backend/src/commands/pull_images.rs
@@ -0,0 +1,99 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use bollard::models::CreateImageInfo;
+use futures::{future::join_all, stream::StreamExt, TryFutureExt};
+use serde::Serialize;
+use tauri::{AppHandle, Manager, Wry};
+
+use crate::{
+ commands::AppState,
+ docker::{ImageType, TariWorkspace},
+ error::LauncherError,
+};
+
+#[derive(Debug, Clone, Serialize)]
+pub struct Payload {
+ image: String,
+ name: String,
+ info: CreateImageInfo,
+}
+
+pub static DEFAULT_IMAGES: [ImageType; 8] = [
+ ImageType::BaseNode,
+ ImageType::Wallet,
+ ImageType::Sha3Miner,
+ ImageType::Tor,
+ ImageType::MmProxy,
+ ImageType::XmRig,
+ ImageType::Monerod,
+ ImageType::Frontail,
+];
+
+/// Provide a list of image names in the Tari "ecosystem"
+#[tauri::command]
+pub fn image_list() -> Vec {
+ DEFAULT_IMAGES
+ .iter()
+ .map(|&image| image.image_name().to_string())
+ .collect()
+}
+
+/// Pulls all the images concurrently using the docker API.
+#[tauri::command]
+pub async fn pull_images(app: AppHandle) -> Result<(), String> {
+ let futures = DEFAULT_IMAGES
+ .iter()
+ .map(|image| pull_image(*image, app.clone()).map_err(|e| e.chained_message()));
+ let results: Vec> = join_all(futures).await;
+ let errors = results
+ .into_iter()
+ .filter(|r| r.is_err())
+ .map(|e| e.unwrap_err())
+ .collect::>();
+ if !errors.is_empty() {
+ return Err(errors.join("\n"));
+ }
+ Ok(())
+}
+
+async fn pull_image(image: ImageType, app: AppHandle) -> Result<(), LauncherError> {
+ let state = app.state::().clone();
+ let docker = state.docker.read().await;
+ let image_name = TariWorkspace::fully_qualified_image(image, None, None);
+ let mut stream = docker.pull_image(image_name.clone()).await;
+ while let Some(update) = stream.next().await {
+ match update {
+ Ok(progress) => {
+ let payload = Payload {
+ image: image_name.clone(),
+ name: image.image_name().to_string(),
+ info: progress,
+ };
+ app.emit_all("image-pull-progress", payload)?
+ },
+ Err(err) => return Err(err.into()),
+ };
+ }
+ Ok(())
+}
diff --git a/applications/launchpad/backend/src/commands/service.rs b/applications/launchpad/backend/src/commands/service.rs
new file mode 100644
index 0000000000..2292235e6c
--- /dev/null
+++ b/applications/launchpad/backend/src/commands/service.rs
@@ -0,0 +1,348 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use std::{convert::TryFrom, path::PathBuf, time::Duration};
+
+use bollard::Docker;
+use futures::StreamExt;
+use log::*;
+use serde::{Deserialize, Serialize};
+use tauri::{AppHandle, Manager, State, Wry};
+
+use crate::{
+ commands::{create_workspace::copy_config_file, AppState},
+ docker::{
+ create_workspace_folders,
+ helpers::create_password,
+ BaseNodeConfig,
+ ContainerId,
+ DockerWrapperError,
+ ImageType,
+ LaunchpadConfig,
+ MmProxyConfig,
+ Sha3MinerConfig,
+ TariNetwork,
+ TariWorkspace,
+ WalletConfig,
+ XmRigConfig,
+ DEFAULT_MINING_ADDRESS,
+ DEFAULT_MONEROD_URL,
+ },
+ error::LauncherError,
+};
+
+/// "Global" settings from the launcher front-end
+#[derive(Clone, Debug, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ServiceSettings {
+ pub tari_network: String,
+ pub root_folder: String,
+ pub wallet_password: String,
+ pub monero_mining_address: Option,
+ pub num_mining_threads: i64,
+ pub docker_registry: Option,
+ pub docker_tag: Option,
+ pub monerod_url: Option,
+ pub monero_username: Option,
+ pub monero_password: Option,
+ pub monero_use_auth: Option,
+}
+
+impl TryFrom for LaunchpadConfig {
+ type Error = LauncherError;
+
+ fn try_from(settings: ServiceSettings) -> Result {
+ let tari_network = TariNetwork::try_from(settings.tari_network.to_lowercase().as_str())?;
+ let tor_control_password = create_password(16);
+ // Since most services are launched manually, we set the delay value to zero.
+ let zero_delay = Duration::from_secs(0);
+ let base_node = BaseNodeConfig { delay: zero_delay };
+ let wallet = WalletConfig {
+ delay: zero_delay,
+ password: settings.wallet_password,
+ };
+ let sha3_miner = Sha3MinerConfig {
+ delay: zero_delay,
+ num_mining_threads: settings.num_mining_threads as usize,
+ };
+ let mut mm_proxy = MmProxyConfig {
+ delay: zero_delay,
+ monerod_url: settings.monerod_url.unwrap_or_else(|| DEFAULT_MONEROD_URL.to_string()),
+ ..Default::default()
+ };
+ if let Some(val) = settings.monero_use_auth {
+ mm_proxy.monero_use_auth = val;
+ mm_proxy.monero_username = settings.monero_username.unwrap_or_else(|| "".to_string());
+ mm_proxy.monero_password = settings.monero_password.unwrap_or_else(|| "".to_string());
+ }
+ let monero_mining_address = settings
+ .monero_mining_address
+ .unwrap_or_else(|| DEFAULT_MINING_ADDRESS.to_string());
+ let xmrig = XmRigConfig {
+ delay: Duration::from_secs(15), // Needs to wait for mm_proxy to be ready
+ monero_mining_address,
+ };
+ Ok(LaunchpadConfig {
+ data_directory: PathBuf::from(settings.root_folder),
+ tari_network,
+ tor_control_password,
+ base_node: Some(base_node),
+ wallet: Some(wallet),
+ sha3_miner: Some(sha3_miner),
+ mm_proxy: Some(mm_proxy),
+ xmrig: Some(xmrig),
+ registry: settings.docker_registry,
+ tag: settings.docker_tag,
+ })
+ }
+}
+
+/// [`start_service`] returns some useful info that the front-end can use to control the docker environment.
+/// In particular, the log and stats event names tell the front end which channels events will be broadcast on.
+#[derive(Clone, Debug, Serialize)]
+#[serde(rename_all(serialize = "camelCase"))]
+pub struct StartServiceResult {
+ /// The name of the service that was created
+ name: String,
+ /// The docker id of the container. Some commands need an id rather than the name.
+ id: String,
+ /// What action was taken. Currently not used.
+ action: String,
+ /// The name of the event stream to subscribe to for log events. These are the _docker_ logs and not the base node
+ /// _et. al._ logs. Those are saved to disk and accessible using the usual means, or with frontail.
+ log_events_name: String,
+ /// The name of the event stream to subscribe to for resource events (CPU, memory etc).
+ stats_events_name: String,
+}
+
+/// Starts the specified service
+///
+/// The workspace will be created if this is the first call to `start_service`. Otherwise, the settings from the first
+/// call will be used and `settings` will be ignored.
+///
+/// Starting a service also:
+/// - creates a new workspace, if required
+/// - creates a network for the network, if required
+/// - creates new volumes, if required
+/// - creates new node identities, if required
+/// - launches the container
+/// - creates the log stream
+/// - creates the resource stats stream
+#[tauri::command]
+pub async fn start_service(
+ app: AppHandle,
+ service_name: String,
+ settings: ServiceSettings,
+) -> Result {
+ start_service_impl(app, service_name, settings).await.map_err(|e| {
+ let error = e.chained_message();
+ error!("{}", error);
+ error
+ })
+}
+
+/// Stops the specified service
+///
+/// Stops the container, if it is running. action is "
+/// Then, deletes the container.
+/// Returns the container id
+#[tauri::command]
+pub async fn stop_service(state: State<'_, AppState>, service_name: String) -> Result<(), String> {
+ stop_service_impl(state, service_name).await.map_err(|e| e.to_string())
+}
+
+/// The "default" workspace is one that is used in the manual front-end configuration (each container is started and
+/// stopped manually)
+#[tauri::command]
+pub async fn create_default_workspace(app: AppHandle, settings: ServiceSettings) -> Result {
+ create_default_workspace_impl(app, settings).await.map_err(|e| {
+ let error = e.chained_message();
+ error!("{}", error);
+ error
+ })
+}
+
+async fn create_default_workspace_impl(app: AppHandle, settings: ServiceSettings) -> Result {
+ let config = LaunchpadConfig::try_from(settings)?;
+ let state = app.state::();
+ let app_config = app.config();
+ let should_create_workspace = {
+ let wrapper = state.workspaces.read().await;
+ !wrapper.workspace_exists("default")
+ }; // drop read-only lock
+ if should_create_workspace {
+ let package_info = &state.package_info;
+ let _ = create_workspace_folders(&config.data_directory).map_err(|e| e.chained_message());
+ copy_config_file(&config.data_directory, app_config.as_ref(), package_info, "log4rs.yml")?;
+ copy_config_file(&config.data_directory, app_config.as_ref(), package_info, "config.toml")?;
+ // Only get a write-lock if we need one
+ let mut wrapper = state.workspaces.write().await;
+ wrapper.create_workspace("default", config)?;
+ }
+ Ok(should_create_workspace)
+}
+
+async fn start_service_impl(
+ app: AppHandle,
+ service_name: String,
+ settings: ServiceSettings,
+) -> Result {
+ let state = app.state::();
+ let docker = state.docker_handle().await;
+ let _ = create_default_workspace_impl(app.clone(), settings).await?;
+ let mut wrapper = state.workspaces.write().await;
+ debug!("Starting {} service", service_name);
+ // We've just checked this, so it should never fail:
+ let workspace: &mut TariWorkspace = wrapper
+ .get_workspace_mut("default")
+ .ok_or(DockerWrapperError::UnexpectedError)?;
+ // Check the identity requirements for the service
+ let ids = workspace.create_or_load_identities()?;
+ for id in ids.values() {
+ debug!("Identity loaded: {}", id);
+ }
+ // Check network requirements for the service
+ if !workspace.network_exists(&docker).await? {
+ workspace.create_network(&docker).await?;
+ }
+ // Launch the container
+ let registry = workspace.config().registry.clone();
+ let tag = workspace.config().tag.clone();
+ let image = ImageType::try_from(service_name.as_str())?;
+ let container_name = workspace.start_service(image, registry, tag, docker.clone()).await?;
+ let state = workspace
+ .container_mut(container_name.as_str())
+ .ok_or(DockerWrapperError::UnexpectedError)?;
+ let id = state.id().to_string();
+ let stats_events_name = stats_event_name(state.id());
+ let log_events_name = log_event_name(state.name());
+ // Set up event streams
+ container_logs(
+ app.clone(),
+ log_events_name.as_str(),
+ container_name.as_str(),
+ docker.clone(),
+ workspace,
+ );
+ container_stats(
+ app.clone(),
+ stats_events_name.as_str(),
+ container_name.as_str(),
+ docker.clone(),
+ workspace,
+ );
+ // Collect data for the return object
+ let result = StartServiceResult {
+ name: service_name,
+ id,
+ action: "unimplemented".to_string(),
+ log_events_name,
+ stats_events_name,
+ };
+ info!("Tari service {} has launched", image.container_name());
+ Ok(result)
+}
+
+pub fn log_event_name(container_name: &str) -> String {
+ format!("tari://docker_log_{}", container_name)
+}
+
+pub fn stats_event_name(container_id: &ContainerId) -> String {
+ format!("tari://docker_stats_{}", container_id.as_str())
+}
+
+fn container_logs(
+ app: AppHandle,
+ event_name: &str,
+ container_name: &str,
+ docker: Docker,
+ workspace: &mut TariWorkspace,
+) {
+ info!("Setting up log events for {}", container_name);
+ if let Some(mut stream) = workspace.logs(container_name, docker) {
+ let event_name = event_name.to_string();
+ tauri::async_runtime::spawn(async move {
+ while let Some(message) = stream.next().await {
+ trace!("log event: {:?}", message);
+ let emit_result = match message {
+ Ok(payload) => app.emit_all(event_name.as_str(), payload),
+ Err(err) => app.emit_all(format!("{}_error", event_name).as_str(), err.chained_message()),
+ };
+ if let Err(err) = emit_result {
+ warn!("Error emitting event: {}", err.to_string());
+ }
+ }
+ info!("Log stream for {} has closed.", event_name);
+ });
+ info!("Container log events configured.");
+ } else {
+ info!(
+ "Log events could not be configured: {} is not a running container",
+ container_name
+ );
+ }
+}
+
+fn container_stats(
+ app: AppHandle,
+ event_name: &str,
+ container_name: &str,
+ docker: Docker,
+ workspace: &mut TariWorkspace,
+) {
+ info!("Setting up Resource stats events for {}", container_name);
+ if let Some(mut stream) = workspace.resource_stats(container_name, docker) {
+ let event_name = event_name.to_string();
+ tauri::async_runtime::spawn(async move {
+ while let Some(message) = stream.next().await {
+ trace!("log event: {:?}", message);
+ let emit_result = match message {
+ Ok(payload) => app.emit_all(event_name.as_str(), payload),
+ Err(err) => app.emit_all(format!("{}_error", event_name).as_str(), err.chained_message()),
+ };
+ if let Err(err) = emit_result {
+ warn!("Error emitting event: {}", err.to_string());
+ }
+ }
+ info!("Resource stats stream for {} has closed.", event_name);
+ });
+ info!("Resource stats events configured.");
+ } else {
+ info!(
+ "Resource stats events could not be configured: {} is not a running container",
+ container_name
+ );
+ }
+}
+
+async fn stop_service_impl(state: State<'_, AppState>, service_name: String) -> Result<(), LauncherError> {
+ let docker = state.docker_handle().await;
+ let mut wrapper = state.workspaces.write().await;
+ debug!("Stopping {} service", service_name);
+ // We've just checked this, so it should never fail:
+ let workspace: &mut TariWorkspace = wrapper
+ .get_workspace_mut("default")
+ .ok_or_else(|| DockerWrapperError::WorkspaceDoesNotExist("default".into()))?;
+ workspace.stop_container(service_name.as_str(), true, &docker).await;
+ Ok(())
+}
diff --git a/applications/installer/src/config/mining.rs b/applications/launchpad/backend/src/commands/shutdown.rs
similarity index 64%
rename from applications/installer/src/config/mining.rs
rename to applications/launchpad/backend/src/commands/shutdown.rs
index f344d57c5a..d5c1031dd4 100644
--- a/applications/installer/src/config/mining.rs
+++ b/applications/launchpad/backend/src/commands/shutdown.rs
@@ -19,31 +19,29 @@
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
-use crate::config::{InstallLocation, SourceLocation};
-
-pub enum PoolStrategy {
- Solo,
- Pool,
-}
-
-pub enum Miners {
- None,
- Sha3Only(PoolStrategy),
- MergeMineOnly(PoolStrategy),
- Both {
- sha3: PoolStrategy,
- merge_mine: PoolStrategy,
- },
-}
+use log::*;
+use tauri::State;
-pub struct MiningOptions {
- source: SourceLocation,
- install_location: InstallLocation,
- miners: Miners,
-}
+use crate::commands::AppState;
-pub struct XmRigOptions {
- source: SourceLocation,
- install_location: InstallLocation,
+/// Gracefully shutdown all containers and delete them. Blockchain volumes are preserved.
+#[tauri::command]
+// Return a Result until https://github.com/tauri-apps/tauri/issues/2533 is fixed
+pub async fn shutdown(state: State<'_, AppState>) -> Result {
+ info!("Shutting down");
+ let docker = state.docker_handle().await;
+ let mut workspaces = state.workspaces.write().await;
+ let msg = match workspaces.shutdown(&docker).await {
+ Ok(()) => {
+ info!("Docker has shut down");
+ "Docker has shut down"
+ },
+ Err(e) => {
+ warn!("Docker may not have shut down gracefully. {}", e.chained_message());
+ "Docker was not cleanly shut down. See logs for details"
+ },
+ };
+ Ok(msg.to_string())
}
diff --git a/applications/launchpad/backend/src/commands/state.rs b/applications/launchpad/backend/src/commands/state.rs
new file mode 100644
index 0000000000..fbd1a39c4d
--- /dev/null
+++ b/applications/launchpad/backend/src/commands/state.rs
@@ -0,0 +1,56 @@
+use bollard::Docker;
+use tauri::PackageInfo;
+use tokio::sync::RwLock as AsyncLock;
+
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
+// following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+// DAMAGE.
+use crate::docker::{DockerWrapper, Workspaces};
+
+/// The state variables that are managed by Tauri. Since the whole app is asynchronous, we need to store
+/// * the [`Workspaces`] object. This tracks global config settings, which containers we are running, and what their
+/// status is.
+/// * A handle to the docker API, via the [`DockerWrapper`] struct. The convenience function [`docker_handle`] gives you
+/// a cheap, thread-safe clone to the underlying docker API.
+/// * Package info, because Tauri doesn't give us an easy way to get at that in command callbacks for some reason.
+///
+/// Things that are mutable (docker, workspaces) are behind an [`AsyncLock`] for thread safety.
+pub struct AppState {
+ pub docker: AsyncLock,
+ pub workspaces: AsyncLock,
+ pub package_info: PackageInfo,
+}
+
+impl AppState {
+ pub fn new(docker: DockerWrapper, workspaces: Workspaces, package_info: PackageInfo) -> Self {
+ Self {
+ docker: AsyncLock::new(docker),
+ workspaces: AsyncLock::new(workspaces),
+ package_info,
+ }
+ }
+
+ pub async fn docker_handle(&self) -> Docker {
+ let wrapper = self.docker.read().await;
+ wrapper.handle()
+ }
+}
diff --git a/applications/installer/src/config/common.rs b/applications/launchpad/backend/src/docker/error.rs
similarity index 52%
rename from applications/installer/src/config/common.rs
rename to applications/launchpad/backend/src/docker/error.rs
index 8c26809355..07f4b8a864 100644
--- a/applications/installer/src/config/common.rs
+++ b/applications/launchpad/backend/src/docker/error.rs
@@ -19,62 +19,44 @@
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
-use std::path::PathBuf;
-
-#[cfg(target_os = "windows")]
-const TARI_FOLDER: &str = "tari";
-#[cfg(any(target_os = "macos", target_os = "unix"))]
-const TARI_FOLDER: &str = ".tari";
-
-pub enum SourceLocation {
- SourceCode(SourceCodeOptions),
- Docker(DockerOptions),
-}
-
-pub struct SourceCodeOptions {}
-
-pub struct DockerOptions {}
-
-pub struct InstallLocation {
- config_folder: PathBuf,
- executable_folder: PathBuf,
- data_folder: PathBuf,
+use std::error::Error;
+
+use tari_app_utilities::common::exit_codes::ExitCodes;
+use thiserror::Error;
+
+#[derive(Debug, Error)]
+pub enum DockerWrapperError {
+ #[error("Something went wrong with the Docker API")]
+ DockerError(#[from] bollard::errors::Error),
+ #[error("Something went wrong on your filesystem")]
+ FileSystemError(#[from] std::io::Error),
+ #[error("The requested container id, {0} is not being managed by the wrapper")]
+ ContainerNotFound(String),
+ #[error("The designated workspace, {0}, already exists")]
+ WorkspaceAlreadyExists(String),
+ #[error("The designated workspace, {0}, does not exist")]
+ WorkspaceDoesNotExist(String),
+ #[error("The network is not supported")]
+ UnsupportedNetwork,
+ #[error("It should not be possible to be in this error state")]
+ UnexpectedError,
+ #[error("Could not create an identity file")]
+ IdentityError(#[from] ExitCodes),
+ #[error("The specified image type is not supported")]
+ InvalidImageType,
}
-impl Default for InstallLocation {
- fn default() -> Self {
- let mut home = dirs::home_dir().expect("No default home folder");
- let mut bin: PathBuf;
- let data = dirs::data_dir().expect("No default data folder");
- #[cfg(target_os = "windows")]
- {
- home.push(TARI_FOLDER);
- bin = PathBuf::from("C:\\Program Files");
- }
- #[cfg(any(target_os = "macos", target_os = "unix"))]
- {
- bin = dirs::home_dir().expect("No default home folder");
- bin.push("bin");
- home.push(TARI_FOLDER);
- }
-
- Self {
- config_folder: home,
- executable_folder: bin,
- data_folder: data,
+impl DockerWrapperError {
+ /// Combine all error messages down the chain into one string.
+ pub fn chained_message(&self) -> String {
+ let mut messages = vec![self.to_string()];
+ let mut this = self as &dyn Error;
+ while let Some(next) = this.source() {
+ messages.push(next.to_string());
+ this = next;
}
+ messages.join(" caused by:\n")
}
}
-
-pub enum TariConfig {
- Default,
- Supplied(PathBuf),
- Inline(String),
-}
-
-pub enum Network {
- Stibbons,
- Weatherwax,
- Mainnet,
-}
diff --git a/applications/launchpad/backend/src/docker/filesystem.rs b/applications/launchpad/backend/src/docker/filesystem.rs
new file mode 100644
index 0000000000..d1a02d29ba
--- /dev/null
+++ b/applications/launchpad/backend/src/docker/filesystem.rs
@@ -0,0 +1,72 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+//! This module does setup and clean up of the host's file system.
+//!
+//! The docker environment places some files in a volume, e.g. the blockchain db, but other files need to be accessible
+//! from the host system, such as logs, and identity files. These all live in a 'workspace' folder, with several sub-
+//! directories for the individual components living under it.
+
+use std::{fs, path::Path};
+
+use log::*;
+use strum::IntoEnumIterator;
+
+use crate::docker::{DockerWrapperError, ImageType};
+
+/// Creates the folders required for a new workspace off of the given root folder.
+/// IF the folders already exist, then nothing happens.
+/// On Linux, the permissions are also set to allow world access
+pub fn create_workspace_folders>(root: P) -> Result<(), DockerWrapperError> {
+ if !root.as_ref().exists() {
+ info!("Creating new workspace at {}", root.as_ref().to_str().unwrap_or("???"));
+ fs::create_dir(&root)?
+ }
+ let make_subfolder = |folder: &str| -> Result<(), std::io::Error> {
+ let p = root.as_ref().join(folder);
+ let p_str = p.as_path().to_str().unwrap_or("???");
+ match p.exists() {
+ true => {
+ debug!("{} already exists", p_str);
+ Ok(())
+ },
+ false => {
+ info!("Creating new data folder, {}", p_str);
+ fs::create_dir(&p)?;
+ #[cfg(any(target_os = "linux", target_os = "macos"))]
+ {
+ use std::os::unix::fs::PermissionsExt;
+ let mut perms = std::fs::metadata(&p)?.permissions();
+ perms.set_mode(0o777);
+ fs::set_permissions(&p, perms)?;
+ }
+ Ok(())
+ },
+ }
+ };
+ let _ = make_subfolder("config")?;
+ for image in ImageType::iter() {
+ let _ = make_subfolder(image.data_folder())?;
+ }
+ Ok(())
+}
diff --git a/applications/installer/src/config/mod.rs b/applications/launchpad/backend/src/docker/helpers.rs
similarity index 84%
rename from applications/installer/src/config/mod.rs
rename to applications/launchpad/backend/src/docker/helpers.rs
index 284fb5100d..3c32bbb1e9 100644
--- a/applications/installer/src/config/mod.rs
+++ b/applications/launchpad/backend/src/docker/helpers.rs
@@ -19,15 +19,12 @@
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
-mod base_node;
-mod combined;
-mod common;
-mod mining;
-mod wallet;
+use rand::distributions::{Alphanumeric, Distribution};
-pub use base_node::BaseNodeOptions;
-pub use combined::InstallerOptions;
-pub use common::{InstallLocation, SourceLocation};
-pub use mining::{Miners, MiningOptions};
-pub use wallet::WalletOptions;
+/// Create a cryptographically secure password on length `len`
+pub fn create_password(len: usize) -> String {
+ let mut rng = rand::thread_rng();
+ Alphanumeric.sample_iter(&mut rng).take(len).map(char::from).collect()
+}
diff --git a/applications/installer/src/config/combined.rs b/applications/launchpad/backend/src/docker/mod.rs
similarity index 73%
rename from applications/installer/src/config/combined.rs
rename to applications/launchpad/backend/src/docker/mod.rs
index c0bfb17542..a1814e2eb9 100644
--- a/applications/installer/src/config/combined.rs
+++ b/applications/launchpad/backend/src/docker/mod.rs
@@ -19,23 +19,29 @@
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
-use crate::config::{
- common::{Network, TariConfig},
- BaseNodeOptions,
- MiningOptions,
- WalletOptions,
-};
+mod error;
+mod filesystem;
+mod models;
+mod settings;
+mod workspace;
+mod wrapper;
-pub struct InstallerOptions {
- // Selects the netowrk to run
- network: Network,
- // A way of getting at the tari global configuration files
- tari_config: TariConfig,
- // Installer options for a base node
- base_node_options: Option,
- // Installer options for the console wallet
- wallet_options: Option,
- // Installer options for mining
- mining_options: Option,
-}
+pub mod helpers;
+
+pub use error::DockerWrapperError;
+pub use filesystem::create_workspace_folders;
+pub use models::{ContainerId, ContainerState, ContainerStatus, ImageType, LogMessage, TariNetwork};
+pub use settings::{
+ BaseNodeConfig,
+ LaunchpadConfig,
+ MmProxyConfig,
+ Sha3MinerConfig,
+ WalletConfig,
+ XmRigConfig,
+ DEFAULT_MINING_ADDRESS,
+ DEFAULT_MONEROD_URL,
+};
+pub use workspace::{TariWorkspace, Workspaces};
+pub use wrapper::DockerWrapper;
diff --git a/applications/launchpad/backend/src/docker/models.rs b/applications/launchpad/backend/src/docker/models.rs
new file mode 100644
index 0000000000..9a5798dfc6
--- /dev/null
+++ b/applications/launchpad/backend/src/docker/models.rs
@@ -0,0 +1,261 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use std::{
+ convert::TryFrom,
+ fmt::{Display, Formatter},
+};
+
+use bollard::{container::LogOutput, models::ContainerCreateResponse};
+use serde::{Deserialize, Serialize};
+use strum_macros::EnumIter;
+
+use crate::docker::DockerWrapperError;
+
+//------------------------------------------- ContainerId ----------------------------------------------
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+pub struct ContainerId(pub String);
+
+impl From for ContainerId {
+ fn from(s: String) -> Self {
+ Self(s)
+ }
+}
+
+impl AsRef for ContainerId {
+ fn as_ref(&self) -> &str {
+ self.0.as_str()
+ }
+}
+
+impl Display for ContainerId {
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
+ f.write_str(self.0.as_str())
+ }
+}
+
+impl ContainerId {
+ pub fn as_str(&self) -> &str {
+ self.0.as_str()
+ }
+}
+
+//------------------------------------------- ContainerStatus ----------------------------------------------
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum ContainerStatus {
+ Created,
+ Running,
+ Stopped,
+ Deleted,
+}
+
+//------------------------------------------- ContainerState ----------------------------------------------
+
+pub struct ContainerState {
+ name: String,
+ id: ContainerId,
+ info: ContainerCreateResponse,
+ status: ContainerStatus,
+}
+
+impl ContainerState {
+ pub fn new(name: String, id: ContainerId, info: ContainerCreateResponse) -> Self {
+ Self {
+ name,
+ id,
+ info,
+ status: ContainerStatus::Created,
+ }
+ }
+
+ pub fn running(&mut self) {
+ self.status = ContainerStatus::Running;
+ }
+
+ pub fn set_stop(&mut self) {
+ self.status = ContainerStatus::Stopped;
+ }
+
+ pub fn set_deleted(&mut self) {
+ self.status = ContainerStatus::Deleted;
+ }
+
+ pub fn name(&self) -> &str {
+ self.name.as_str()
+ }
+
+ pub fn info(&self) -> &ContainerCreateResponse {
+ &self.info
+ }
+
+ pub fn id(&self) -> &ContainerId {
+ &self.id
+ }
+
+ pub fn status(&self) -> ContainerStatus {
+ self.status
+ }
+}
+
+//------------------------------------------- LogMessage ----------------------------------------------
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct LogMessage {
+ pub message: String,
+ pub source: String,
+}
+
+impl From for LogMessage {
+ fn from(log: LogOutput) -> Self {
+ let (source, message) = match log {
+ LogOutput::StdErr { message } => ("StdErr".to_string(), String::from_utf8_lossy(&message).into_owned()),
+ LogOutput::StdOut { message } => ("StdOut".to_string(), String::from_utf8_lossy(&message).into_owned()),
+ LogOutput::Console { message } => ("Console".to_string(), String::from_utf8_lossy(&message).into_owned()),
+ LogOutput::StdIn { message } => ("StdIn".to_string(), String::from_utf8_lossy(&message).into_owned()),
+ };
+ Self { source, message }
+ }
+}
+
+//------------------------------------------- TariNetwork ----------------------------------------------
+
+/// Supported networks for the launchpad
+#[derive(Serialize, Debug, Deserialize, Clone, Copy)]
+pub enum TariNetwork {
+ Weatherwax,
+ Igor,
+ Mainnet,
+}
+
+impl TariNetwork {
+ pub fn lower_case(&self) -> &'static str {
+ match self {
+ Self::Weatherwax => "weatherwax",
+ Self::Igor => "igor",
+ Self::Mainnet => "mainnet",
+ }
+ }
+
+ pub fn upper_case(&self) -> &'static str {
+ match self {
+ Self::Weatherwax => "WEATHERWAX",
+ Self::Igor => "IGOR",
+ Self::Mainnet => "MAINNET",
+ }
+ }
+}
+
+/// Default network is Weatherwax. This will change after mainnet launch
+impl Default for TariNetwork {
+ fn default() -> Self {
+ Self::Weatherwax
+ }
+}
+
+impl TryFrom<&str> for TariNetwork {
+ type Error = DockerWrapperError;
+
+ fn try_from(value: &str) -> Result {
+ match value {
+ "weatherwax" => Ok(TariNetwork::Weatherwax),
+ "igor" => Ok(TariNetwork::Igor),
+ "mainnet" => Ok(TariNetwork::Mainnet),
+ _ => Err(DockerWrapperError::UnsupportedNetwork),
+ }
+ }
+}
+
+//------------------------------------------- ImageType ----------------------------------------------
+
+#[derive(Clone, Copy, EnumIter, PartialEq, Eq, Hash, Serialize)]
+pub enum ImageType {
+ Tor,
+ BaseNode,
+ Wallet,
+ XmRig,
+ Sha3Miner,
+ MmProxy,
+ Monerod,
+ Frontail,
+}
+
+impl ImageType {
+ pub fn image_name(&self) -> &str {
+ match self {
+ Self::Tor => "tor",
+ Self::BaseNode => "tari_base_node",
+ Self::Wallet => "tari_console_wallet",
+ Self::XmRig => "xmrig",
+ Self::Sha3Miner => "tari_sha3_miner",
+ Self::MmProxy => "tari_mm_proxy",
+ Self::Monerod => "monerod",
+ Self::Frontail => "frontail",
+ }
+ }
+
+ pub fn container_name(&self) -> &str {
+ match self {
+ Self::Tor => "tor",
+ Self::BaseNode => "base_node",
+ Self::Wallet => "wallet",
+ Self::XmRig => "xmrig",
+ Self::Sha3Miner => "sha3_miner",
+ Self::MmProxy => "mm_proxy",
+ Self::Monerod => "monerod",
+ Self::Frontail => "frontail",
+ }
+ }
+
+ pub fn data_folder(&self) -> &str {
+ match self {
+ Self::Tor => "tor",
+ Self::BaseNode => "base_node",
+ Self::Wallet => "wallet",
+ Self::XmRig => "xmrig",
+ Self::Sha3Miner => "sha3_miner",
+ Self::MmProxy => "mm_proxy",
+ Self::Monerod => "monerod",
+ Self::Frontail => "frontail",
+ }
+ }
+}
+
+impl TryFrom<&str> for ImageType {
+ type Error = DockerWrapperError;
+
+ fn try_from(value: &str) -> Result {
+ let s = value.to_lowercase();
+ match s.as_str() {
+ "tor" => Ok(Self::Tor),
+ "base_node" | "base node" => Ok(Self::BaseNode),
+ "wallet" => Ok(Self::Wallet),
+ "xmrig" => Ok(Self::XmRig),
+ "sha3_miner" | "sha3 miner" => Ok(Self::Sha3Miner),
+ "mm_proxy" | "mm proxy" => Ok(Self::MmProxy),
+ "monerod" | "monero" => Ok(Self::Monerod),
+ "frontail" => Ok(Self::Frontail),
+ _ => Err(DockerWrapperError::InvalidImageType),
+ }
+ }
+}
diff --git a/applications/launchpad/backend/src/docker/settings.rs b/applications/launchpad/backend/src/docker/settings.rs
new file mode 100644
index 0000000000..7b1f718121
--- /dev/null
+++ b/applications/launchpad/backend/src/docker/settings.rs
@@ -0,0 +1,532 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use std::{collections::HashMap, path::PathBuf, time::Duration};
+
+use bollard::models::{Mount, MountTypeEnum, PortBinding, PortMap};
+use config::ConfigError;
+use serde::{Deserialize, Serialize};
+use thiserror::Error;
+use tor_hash_passwd::EncryptedKey;
+
+use crate::docker::{models::ImageType, TariNetwork};
+
+// TODO get a proper mining address for each network
+pub const DEFAULT_MINING_ADDRESS: &str =
+ "5AJ8FwQge4UjT9Gbj4zn7yYcnpVQzzkqr636pKto59jQcu85CFsuYVeFgbhUdRpiPjUCkA4sQtWApUzCyTMmSigFG2hDo48";
+
+pub const DEFAULT_MONEROD_URL: &str = "http://monero-stagenet.exan.tech:38081";
+
+#[derive(Default, Debug, Serialize, Deserialize)]
+pub struct BaseNodeConfig {
+ /// The time delay before starting the container and running the base node executable
+ pub delay: Duration,
+}
+
+#[derive(Default, Debug, Serialize, Deserialize)]
+pub struct WalletConfig {
+ /// The time delay before starting the container and running the wallet executable
+ pub delay: Duration,
+ /// The password to de/en-crypt the wallet database
+ pub password: String,
+}
+
+#[derive(Default, Debug, Serialize, Deserialize)]
+pub struct XmRigConfig {
+ /// The time delay before starting the container and running the monero miner executable
+ pub delay: Duration,
+ /// The address that will accept Monero mining rewards
+ pub monero_mining_address: String,
+}
+
+#[derive(Default, Debug, Serialize, Deserialize)]
+pub struct Sha3MinerConfig {
+ /// The time delay before starting the container and running the SHA3 CPU miner executable
+ pub delay: Duration,
+ /// The number of threads to employ for SHA3 mining
+ pub num_mining_threads: usize,
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+pub struct MmProxyConfig {
+ /// The time delay before starting the container and running the proxy executable
+ pub delay: Duration,
+ /// A URL specifying the Monero daemon to connect to
+ pub monerod_url: String,
+ /// If required, the monero username for the monero daemon
+ pub monero_username: String,
+ /// If required, the password needed to access the monero deamon
+ pub monero_password: String,
+ /// If true, provide the monero username and password to the daemon. Otherwise those strings are ignored.
+ pub monero_use_auth: bool,
+}
+
+impl Default for MmProxyConfig {
+ fn default() -> Self {
+ MmProxyConfig {
+ delay: Duration::from_secs(5),
+ monerod_url: DEFAULT_MONEROD_URL.to_string(),
+ monero_username: "".to_string(),
+ monero_password: "".to_string(),
+ monero_use_auth: false,
+ }
+ }
+}
+
+impl MmProxyConfig {
+ pub fn monero_use_auth(&self) -> usize {
+ if self.monero_use_auth {
+ 1
+ } else {
+ 0
+ }
+ }
+}
+
+/// Tari Launchpad configuration struct. This will generally be populated from some front-end or persistent storage
+/// file and is used to generate the environment variables needed to configure and run the various docker containers.
+#[derive(Default, Debug, Serialize, Deserialize)]
+pub struct LaunchpadConfig {
+ /// The directory to use for config, id files and logs
+ pub data_directory: PathBuf,
+ /// The Tri network to use. Default = weatherwax
+ pub tari_network: TariNetwork,
+ /// The tor control password to share among containers.
+ pub tor_control_password: String,
+ /// Whether to spin up a base node or not, with the given configuration. Usually you want this.
+ pub base_node: Option,
+ /// Whether to spin up a console wallet daemon, with the given configuration. Optional.
+ pub wallet: Option,
+ /// Whether to spin up a SHA3 miner or not, with the given configuration. If you want to mine Tari natively,
+ /// include this.
+ pub sha3_miner: Option,
+ /// Whether to spin up a merge-mine proxy or not, with the given configuration. If included, you must also include
+ /// xmrig
+ pub mm_proxy: Option,
+ /// Whether to spin up a Monero miner or not, with the given configuration. If included you should also include
+ /// mm_proxy
+ pub xmrig: Option,
+ /// The Docker registry to use to download images. By default we use quay.io
+ pub registry: Option,
+ /// The docker tag to use. By default, we use 'latest'
+ pub tag: Option,
+}
+
+impl LaunchpadConfig {
+ pub fn load() -> Result {
+ unimplemented!()
+ }
+
+ /// Returns a list of environment variables that need to be set in the running container. For Tari containers, we
+ /// use this to override settings in the `config.yml` file that are generated on the fly here (the tor control
+ /// port password for example).
+ pub fn environment(&self, image_type: ImageType) -> Vec {
+ match image_type {
+ ImageType::BaseNode => self.base_node_environment(),
+ ImageType::Wallet => self.wallet_environment(),
+ ImageType::XmRig => self.xmrig_environment(),
+ ImageType::Sha3Miner => self.sha3_miner_environment(),
+ ImageType::MmProxy => self.mm_proxy_environment(),
+ ImageType::Tor => self.tor_environment(),
+ ImageType::Monerod => self.monerod_environment(),
+ ImageType::Frontail => self.common_envars(),
+ }
+ }
+
+ /// Provides a hashmap that bollard needs to mount the volumes we want for each image type.
+ pub fn volumes(&self, image_type: ImageType) -> HashMap> {
+ match image_type {
+ ImageType::BaseNode => self.build_volumes(true, true),
+ ImageType::Wallet => self.build_volumes(true, false),
+ ImageType::XmRig => self.build_volumes(true, false),
+ ImageType::Sha3Miner => self.build_volumes(true, false),
+ ImageType::MmProxy => self.build_volumes(true, false),
+ ImageType::Tor => self.build_volumes(false, false),
+ ImageType::Monerod => self.build_volumes(false, false),
+ ImageType::Frontail => self.build_volumes(true, false),
+ }
+ }
+
+ /// Similar to [`volumes`], provides a bollard configuration for mounting volumes.
+ pub fn mounts(&self, image_type: ImageType, volume_name: String) -> Vec {
+ match image_type {
+ ImageType::BaseNode => self.build_mounts(true, true, volume_name),
+ ImageType::Wallet => self.build_mounts(true, true, volume_name),
+ ImageType::XmRig => self.build_mounts(false, true, volume_name),
+ ImageType::Sha3Miner => self.build_mounts(false, true, volume_name),
+ ImageType::MmProxy => self.build_mounts(false, true, volume_name),
+ ImageType::Tor => self.build_mounts(false, false, volume_name),
+ ImageType::Monerod => self.build_mounts(false, false, volume_name),
+ ImageType::Frontail => self.build_mounts(false, true, volume_name),
+ }
+ }
+
+ fn build_mounts(&self, blockchain: bool, general: bool, volume_name: String) -> Vec {
+ let mut mounts = Vec::with_capacity(2);
+ if general {
+ #[cfg(not(target_os = "linux"))]
+ let host = format!("/host_mnt{}", self.data_directory.to_string_lossy());
+ #[cfg(target_os = "linux")]
+ let host = self.data_directory.to_string_lossy().to_string();
+ let mount = Mount {
+ target: Some("/var/tari".to_string()),
+ source: Some(host),
+ typ: Some(MountTypeEnum::BIND),
+ bind_options: None,
+ ..Default::default()
+ };
+ mounts.push(mount);
+ }
+ if blockchain {
+ let mount = Mount {
+ target: Some("/blockchain".to_string()),
+ source: Some(volume_name),
+ typ: Some(MountTypeEnum::VOLUME),
+ volume_options: None,
+ ..Default::default()
+ };
+ mounts.push(mount);
+ }
+ mounts
+ }
+
+ /// Returns a map of ports to expose to the host system. TODO - remove the hardcoding so that multiple workspaces
+ /// don't have colliding exposed ports.
+ pub fn ports(&self, image_type: ImageType) -> HashMap> {
+ match image_type {
+ ImageType::BaseNode => create_port_map(&["18142", "18189"]),
+ ImageType::Wallet => create_port_map(&["18143", "18188"]),
+ ImageType::XmRig => create_port_map(&[]),
+ ImageType::Sha3Miner => create_port_map(&[]),
+ ImageType::MmProxy => create_port_map(&[]),
+ ImageType::Tor => create_port_map(&[]),
+ ImageType::Monerod => create_port_map(&[]),
+ ImageType::Frontail => create_port_map(&["18130"]),
+ }
+ }
+
+ /// As for [`ports`] returns a bollard configuration for port mappings.
+ pub fn port_map(&self, image_type: ImageType) -> PortMap {
+ let ports = self.ports(image_type);
+ ports
+ .into_iter()
+ .map(|(k, _)| {
+ let binding = vec![PortBinding {
+ host_ip: Some("".to_string()),
+ host_port: Some(k.clone()),
+ }];
+ (k, Some(binding))
+ })
+ .collect()
+ }
+
+ /// Return the command line arguments we want for the given container execution.
+ pub fn command(&self, image_type: ImageType) -> Vec {
+ match image_type {
+ ImageType::BaseNode => vec!["--non-interactive-mode".to_string()],
+ ImageType::Wallet => vec!["--non-interactive-mode".to_string()],
+ ImageType::XmRig => self.xmrig_cmd(),
+ ImageType::Sha3Miner => vec![],
+ ImageType::MmProxy => vec![],
+ ImageType::Tor => self.tor_cmd(),
+ ImageType::Monerod => self.monerod_cmd(),
+ ImageType::Frontail => self.frontail_cmd(),
+ }
+ }
+
+ /// Returns the canonical path to the id files. The canonical path is defined as
+ /// `{root_path}/config/{network}/{image_type}_id.json`
+ pub fn id_path(&self, root_path: &str, image_type: ImageType) -> Option {
+ match image_type {
+ ImageType::BaseNode | ImageType::Wallet => Some(
+ PathBuf::from(root_path)
+ .join("config")
+ .join(self.tari_network.lower_case())
+ .join(format!("{}_id.json", image_type.image_name())),
+ ),
+ _ => None,
+ }
+ }
+
+ fn frontail_cmd(&self) -> Vec {
+ let args = vec![
+ "-p",
+ "18130",
+ "base_node/log/core.log",
+ "wallet/log/core.log",
+ "sha3_miner/log/core.log",
+ "mm_proxy/log/core.log",
+ ];
+ args.into_iter().map(String::from).collect()
+ }
+
+ fn xmrig_cmd(&self) -> Vec {
+ let address = match &self.xmrig {
+ Some(config) => config.monero_mining_address.as_str(),
+ None => DEFAULT_MINING_ADDRESS,
+ };
+ let address = format!("--user={}", address);
+ let args = vec![
+ "--url=mm_proxy:18081",
+ address.as_str(),
+ "--coin=monero",
+ "--daemon",
+ "--log-file=/var/tari/xmrig/xmrig.log",
+ "--verbose",
+ // "--background"
+ ];
+ args.into_iter().map(String::from).collect()
+ }
+
+ fn monerod_cmd(&self) -> Vec {
+ let network = match self.tari_network {
+ TariNetwork::Mainnet => "--mainnet",
+ _ => "--stagenet",
+ };
+ let args = vec![
+ "--non-interactive",
+ "--restricted-rpc",
+ "--rpc-bind-ip=0.0.0.0",
+ "--confirm-external-bind",
+ "--enable-dns-blocklist",
+ "--log-file=/home/monerod/monerod.log",
+ "--fast-block-sync=1",
+ "--prune-blockchain",
+ network,
+ ];
+ args.into_iter().map(String::from).collect()
+ }
+
+ fn tor_cmd(&self) -> Vec {
+ let hashed_password = EncryptedKey::hash_password(self.tor_control_password.as_str()).to_string();
+ let args = vec![
+ "/usr/bin/tor",
+ "--SocksPort",
+ "0.0.0.0:9050",
+ "--ControlPort",
+ "0.0.0.0:9051",
+ "--CookieAuthentication",
+ "0",
+ "--ClientOnly",
+ "1",
+ "--ClientUseIPv6",
+ "1",
+ "--HashedControlPassword",
+ hashed_password.as_str(),
+ ];
+ args.into_iter().map(String::from).collect()
+ }
+
+ /// Returns the bollard configuration map. You can specify any/all of the host-mounted data folder, of the
+ /// blockchain folder to map.
+ pub fn build_volumes(&self, general: bool, tari_blockchain: bool) -> HashMap> {
+ let mut volumes = HashMap::new();
+ if general {
+ volumes.insert("/var/tari".to_string(), HashMap::<(), ()>::new());
+ }
+ if tari_blockchain {
+ volumes.insert("/blockchain".to_string(), HashMap::new());
+ }
+ volumes
+ }
+
+ fn common_envars(&self) -> Vec {
+ vec![
+ format!("TARI_NETWORK={}", self.tari_network.lower_case()),
+ format!("DATA_FOLDER={}", self.data_directory.to_str().unwrap_or("")), // TODO deal with None
+ "TARI_LOG_CONFIGURATION=/var/tari/config/log4rs.yml".to_string(),
+ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin".to_string(),
+ ]
+ }
+
+ /// Generate the vector of ENVAR strings for the docker environment
+ fn base_node_environment(&self) -> Vec {
+ let mut env = self.common_envars();
+ if let Some(base_node) = &self.base_node {
+ env.append(&mut vec![
+ format!("WAIT_FOR_TOR={}", base_node.delay.as_secs()),
+ format!(
+ "TARI_BASE_NODE__{}__TOR_CONTROL_AUTH=password={}",
+ self.tari_network.upper_case(),
+ self.tor_control_password
+ ),
+ format!(
+ "TARI_BASE_NODE__{}__DATA_DIR=/blockchain/{}",
+ self.tari_network.upper_case(),
+ self.tari_network.lower_case()
+ ),
+ format!(
+ "TARI_BASE_NODE__{}__TOR_FORWARD_ADDRESS=/dns4/base_node/tcp/18189",
+ self.tari_network.upper_case()
+ ),
+ format!(
+ "TARI_BASE_NODE__{}__TCP_LISTENER_ADDRESS=/dns4/base_node/tcp/18189",
+ self.tari_network.upper_case()
+ ),
+ format!(
+ "TARI_BASE_NODE__{}__TOR_SOCKS_ADDRESS_OVERRIDE=/dns4/tor/tcp/9050",
+ self.tari_network.upper_case()
+ ),
+ format!(
+ "TARI_BASE_NODE__{}__TOR_CONTROL_ADDRESS=/dns4/tor/tcp/9051",
+ self.tari_network.upper_case()
+ ),
+ format!("TARI_BASE_NODE__{}__GRPC_ENABLED=1", self.tari_network.upper_case()),
+ format!(
+ "TARI_BASE_NODE__{}__GRPC_BASE_NODE_ADDRESS=0.0.0.0:18142",
+ self.tari_network.upper_case()
+ ),
+ "APP_NAME=base_node".to_string(),
+ ]);
+ }
+ env
+ }
+
+ fn wallet_environment(&self) -> Vec {
+ let mut env = self.common_envars();
+ if let Some(config) = &self.wallet {
+ env.append(&mut vec![
+ "APP_NAME=wallet".to_string(),
+ "APP_EXEC=tari_console_wallet".to_string(),
+ format!("WAIT_FOR_TOR={}", config.delay.as_secs() + 3),
+ "SHELL=/bin/bash".to_string(),
+ "TERM=linux".to_string(),
+ format!("TARI_WALLET_PASSWORD={}", config.password),
+ format!(
+ "TARI_WALLET__{}__TOR_CONTROL_AUTH=password={}",
+ self.tari_network.upper_case(),
+ self.tor_control_password
+ ),
+ format!(
+ "TARI_WALLET__{}__TOR_CONTROL_ADDRESS=/dns4/tor/tcp/9051",
+ self.tari_network.upper_case()
+ ),
+ format!(
+ "TARI_WALLET__{}__TOR_SOCKS_ADDRESS_OVERRIDE=/dns4/tor/tcp/9050",
+ self.tari_network.upper_case()
+ ),
+ format!(
+ "TARI_WALLET__{}__TOR_FORWARD_ADDRESS=/dns4/wallet/tcp/18188",
+ self.tari_network.upper_case()
+ ),
+ format!(
+ "TARI_WALLET__{}__TCP_LISTENER_ADDRESS=/dns4/wallet/tcp/18188",
+ self.tari_network.upper_case()
+ ),
+ format!(
+ "TARI_BASE_NODE__{}__GRPC_CONSOLE_WALLET_ADDRESS=0.0.0.0:18143",
+ self.tari_network.upper_case()
+ ),
+ "TARI_WALLET__GRPC_ADDRESS=0.0.0.0:18143".to_string(),
+ ]);
+ }
+ env
+ }
+
+ fn xmrig_environment(&self) -> Vec {
+ let mut env = self.common_envars();
+ if let Some(config) = &self.xmrig {
+ env.append(&mut vec![format!("WAIT_FOR_TOR={}", config.delay.as_secs() + 9)]);
+ }
+ env
+ }
+
+ fn sha3_miner_environment(&self) -> Vec {
+ let mut env = self.common_envars();
+ if let Some(config) = &self.sha3_miner {
+ env.append(&mut vec![
+ format!("WAIT_FOR_TOR={}", config.delay.as_secs() + 6),
+ "APP_NAME: sha3_miner".to_string(),
+ "APP_EXEC: tari_mining_node".to_string(),
+ format!("TARI_MINING_NODE__NUM_MINING_THREADS: {}", config.num_mining_threads),
+ "TARI_MINING_NODE__MINE_ON_TIP_ONLY: 1".to_string(),
+ format!(
+ "TARI_BASE_NODE__{}__GRPC_BASE_NODE_ADDRESS=/dns4/base_node/tcp/18142",
+ self.tari_network.upper_case()
+ ),
+ "TARI_WALLET__GRPC_ADDRESS=/dns4/wallet/tcp/18143".to_string(),
+ ]);
+ }
+ env
+ }
+
+ fn mm_proxy_environment(&self) -> Vec {
+ let mut env = self.common_envars();
+ if let Some(config) = &self.mm_proxy {
+ env.append(&mut vec![
+ format!("WAIT_FOR_TOR={}", config.delay.as_secs() + 6),
+ "APP_NAME=mm_proxy".to_string(),
+ "APP_EXEC=tari_merge_mining_proxy".to_string(),
+ format!(
+ "TARI_BASE_NODE__{}__GRPC_BASE_NODE_ADDRESS=/dns4/base_node/tcp/18142",
+ self.tari_network.upper_case()
+ ),
+ "TARI_WALLET__GRPC_ADDRESS=/dns4/wallet/tcp/18143".to_string(),
+ format!(
+ "TARI_MERGE_MINING_PROXY__{}__MONEROD_URL={}",
+ self.tari_network.upper_case(),
+ config.monerod_url
+ ),
+ format!(
+ "TARI_MERGE_MINING_PROXY__{}__MONEROD_USERNAME={}",
+ self.tari_network.upper_case(),
+ config.monero_username
+ ),
+ format!(
+ "TARI_MERGE_MINING_PROXY__{}__MONEROD_PASSWORD={}",
+ self.tari_network.upper_case(),
+ config.monero_password
+ ),
+ format!(
+ "TARI_MERGE_MINING_PROXY__{}__MONEROD_USE_AUTH={}",
+ self.tari_network.upper_case(),
+ config.monero_use_auth()
+ ),
+ format!(
+ "TARI_MERGE_MINING_PROXY__{}__PROXY_HOST_ADDRESS=0.0.0.0:18081",
+ self.tari_network.upper_case()
+ ),
+ ]);
+ }
+ env
+ }
+
+ fn tor_environment(&self) -> Vec {
+ self.common_envars()
+ }
+
+ fn monerod_environment(&self) -> Vec {
+ self.common_envars()
+ }
+}
+
+#[derive(Debug, Error)]
+pub enum LaunchpadConfigError {}
+
+fn create_port_map(ports: &[&'static str]) -> HashMap> {
+ let mut result = HashMap::new();
+ for &port in ports {
+ result.insert(format!("{}/tcp", port), HashMap::new());
+ }
+ result
+}
diff --git a/applications/launchpad/backend/src/docker/workspace.rs b/applications/launchpad/backend/src/docker/workspace.rs
new file mode 100644
index 0000000000..d16998f07c
--- /dev/null
+++ b/applications/launchpad/backend/src/docker/workspace.rs
@@ -0,0 +1,611 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use std::collections::HashMap;
+
+use bollard::{
+ container::{
+ Config,
+ CreateContainerOptions,
+ LogsOptions,
+ NetworkingConfig,
+ Stats,
+ StatsOptions,
+ StopContainerOptions,
+ },
+ models::{ContainerCreateResponse, EndpointSettings, HostConfig, Network},
+ network::{ConnectNetworkOptions, CreateNetworkOptions, InspectNetworkOptions},
+ volume::CreateVolumeOptions,
+ Docker,
+};
+use futures::{Stream, StreamExt, TryStreamExt};
+use log::*;
+use strum::IntoEnumIterator;
+use tari_app_utilities::identity_management::setup_node_identity;
+use tari_comms::{peer_manager::PeerFeatures, NodeIdentity};
+
+use crate::docker::{
+ models::{ContainerId, ContainerState},
+ DockerWrapperError,
+ ImageType,
+ LaunchpadConfig,
+ LogMessage,
+};
+
+static DEFAULT_REGISTRY: &str = "quay.io/tarilabs";
+static DEFAULT_TAG: &str = "latest";
+
+/// `Workspaces` allows us to spin up multiple [TariWorkspace] recipes or configurations at once. Most users will only
+/// ever need one at a time, and the default one at that, but developers and testers will likely find this useful.
+///
+/// For example, you might want to run a node and wallet on two different networks concurrently.
+/// Or, you might want to spin up two wallets on the same network to test some new feature. Here you would have one
+/// recipe with just a base node and a wallet, and another recipe with just a wallet.
+///
+/// Workspaces are referenced by a name, which is an arbitrary string, but by convention, you'll want to keep workspace
+/// names short and do not use spaces in workspace names.
+///
+/// Docker containers are named using a `{workspace_name}_{image_type}` convention. See [TariWorkspace] for more
+/// details.
+///
+/// Each workspace should also have a unique data folder to keep logs and configuration separate, but this is not a hard
+/// requirement.
+#[derive(Default)]
+pub struct Workspaces {
+ workspaces: HashMap,
+}
+
+impl Workspaces {
+ /// Returns a mutable reference to the `name`d workspace. For an immutable reference, see [workspace_mut].
+ pub fn get_workspace_mut(&mut self, name: &str) -> Option<&mut TariWorkspace> {
+ self.workspaces.get_mut(name)
+ }
+
+ /// Returns an immtable reference to the `name`d workspace. For a mutable reference, see [get_workspace_mut].
+ pub fn get_workspace(&self, name: &str) -> Option<&TariWorkspace> {
+ self.workspaces.get(name)
+ }
+
+ /// Checks if a workspace with the given name exists.
+ pub fn workspace_exists(&self, name: &str) -> bool {
+ self.workspaces.contains_key(name)
+ }
+
+ /// Create a new Tari workspace. It must not previously exist
+ pub fn create_workspace(&mut self, name: &str, config: LaunchpadConfig) -> Result<(), DockerWrapperError> {
+ if self.workspaces.contains_key(name) {
+ return Err(DockerWrapperError::WorkspaceAlreadyExists(name.to_string()));
+ }
+ let new_system = TariWorkspace::new(name, config);
+ self.workspaces.insert(name.to_string(), new_system);
+ Ok(())
+ }
+
+ /// Gracefully shut down the docker images and delete them
+ /// The volumes are kept, since if we restart, we don't want to re-sync the entire blockchain again
+ pub async fn shutdown(&mut self, docker: &Docker) -> Result<(), DockerWrapperError> {
+ for (name, system) in &mut self.workspaces {
+ info!("Shutting down {}", name);
+ system.stop_containers(true, docker).await;
+ }
+ Ok(())
+ }
+}
+
+/// A TariWorkspace is a configuration of docker images (node, wallet, miner etc), configuration files and secrets,
+/// and log files.
+///
+/// ### Data locations
+/// A workspace manages data in several places
+/// * **Blockchain data** is stored in a [Docker volume](https://docs.docker.com/storage/volumes/) that is not directly
+/// accessible to the host system. This is primarily done for performance reasons, but should not be a major issue
+/// since you seldom need direct access to the LMDB database. If you do need the database for some reason, you can
+/// mount the volume and run a bash command, for instance: `docker run --rm -v $(pwd):/backup -v
+/// blockchain:/blockchain ubuntu tar czvf /backup/backup.tar.gz /blockchain`. As currently written, the blockchain
+/// data is namespaced by workspace but it is also possible in principle for different workspaces to (TODO) share
+/// blockchain data (for the same network), thereby preventing the need to keep multiple copies of the blockchain. In
+/// this case, you need to be careful not to introduce contention from multiple nodes running against the same LMDB
+/// database, leading to corrupt db files.
+/// * **Configuration** and log files are stored of the workspace `root_folder`. A typical folder structure looks like
+/// ```text
+/// {root_folder}
+/// ├── base_node
+/// │ └── log
+/// │ ├── core.log
+/// │ ├── network.log
+/// │ └── other.log
+/// ├── config
+/// │ ├── config.toml
+/// │ ├── log4rs.yml
+/// │ └── weatherwax
+/// │ ├── base_node_tor.json
+/// │ ├── tari_base_node_id.json
+/// │ └── tari_console_wallet_id.json
+/// ├── mm_proxy
+/// ├── monerod
+/// ├── sha3_miner
+/// │ └── log
+/// │ ├── core.log
+/// │ ├── network.log
+/// │ └── other.log
+/// ├── tor
+/// ├── wallet
+/// │ ├── log
+/// │ │ ├── core.log
+/// │ │ ├── network.log
+/// │ │ └── other.log
+/// │ └── wallet
+/// │ ├── console-wallet.dat
+/// │ ├── console-wallet.dat-shm
+/// │ └── console-wallet.dat-wal
+/// └── xmrig
+/// ```
+/// the `{root_folder}` is mounted into the docker filesystem and is accessible to all containers in the workspace.
+/// TODO - investigate security issues for this. In particular, we almost certainly want to isolate the wallet data
+/// This means that changes to `config/log4rs.yml` take effect in all running containers immediately.
+/// * **Docker containers** are ephemeral and are created and destroyed at will.
+///
+/// ### Networking
+/// Tor is used by several other containers. The control password for Tor is randomly generated when the workspace is
+/// set up, and shared as an environment variable between containers.
+///
+/// A dedicated, namespaced network is created for each workspace. This means that each container in the network can
+/// talk to any other container in the same workspace, but not to containers in other workspaces.
+///
+/// We also expose some ports to the host system for host-container communication.
+///
+/// * Base node - ports 18142 and 18149. TODO - currently the same port is mapped to the host. For multiple Workspaces
+/// we'd need to expose a different port to the host. e.g. 1n142 where n is the workspace number.
+/// * Wallet - 18143 and 18188
+/// * Frontail - 18130
+pub struct TariWorkspace {
+ name: String,
+ config: LaunchpadConfig,
+ containers: HashMap,
+}
+
+impl TariWorkspace {
+ /// Create a new Tari system using the provided configuration
+ pub fn new(name: &str, config: LaunchpadConfig) -> Self {
+ Self {
+ name: name.to_string(),
+ config,
+ containers: HashMap::new(),
+ }
+ }
+
+ /// Return a reference to the immutable configuration object for this workspace.
+ pub fn config(&self) -> &LaunchpadConfig {
+ &self.config
+ }
+
+ /// Returns the name of this system, which is generally used as the workspace name when running multiple Tari
+ /// systems
+ pub fn name(&self) -> &str {
+ self.name.as_str()
+ }
+
+ /// Returns the full image name for the given image type. for the default registry this is typically something like
+ /// `quay.io/tarilabs/tari_base_node:latest`. One should be able to use this string to do a successful
+ /// `docker pull {image_name}`.
+ ///
+ /// It also lets power users customise which version of docker images they want to run in the workspace.
+ pub fn fully_qualified_image(image: ImageType, registry: Option<&str>, tag: Option<&str>) -> String {
+ let reg = registry.unwrap_or(DEFAULT_REGISTRY);
+ let tag = tag.unwrap_or(DEFAULT_TAG);
+ format!("{}/{}:{}", reg, image.image_name(), tag)
+ }
+
+ /// Starts the Tari workspace recipe.
+ ///
+ /// This is an MVP / PoC version that starts everything in one go, but TODO, should really take some sort of recipe
+ /// object to allow us to build up different recipes (wallet only, full miner, SHA3-mining only etc)
+ pub async fn start_recipe(&mut self, docker: Docker) -> Result<(), DockerWrapperError> {
+ // Create or load identities
+ let _ids = self.create_or_load_identities()?;
+ // Set up the local network
+ if !self.network_exists(&docker).await? {
+ self.create_network(&docker).await?;
+ }
+ // Create or restart the volume
+
+ let registry = self.config.registry.clone();
+ let tag = self.config.tag.clone();
+ for image in self.images_to_start() {
+ // Start each container
+ let name = self
+ .start_service(image, registry.clone(), tag.clone(), docker.clone())
+ .await?;
+ info!(
+ "Docker container {} ({}) successfully started",
+ image.image_name(),
+ name
+ );
+ }
+ Ok(())
+ }
+
+ /// Bootstraps a node identity for the container, typically a base node or wallet instance. If an identity file
+ /// already exists at the canonical path location, it is loaded and returned instead.
+ ///
+ /// The canonical path is defined as `{root_path}/config/{network}/{image_type}_id.json`
+ pub fn create_or_load_identity(
+ &self,
+ root_path: &str,
+ image: ImageType,
+ ) -> Result, DockerWrapperError> {
+ if let Some(id_file_path) = self.config.id_path(root_path, image) {
+ debug!("Loading or creating identity file {}", id_file_path.to_string_lossy());
+ let id = setup_node_identity(id_file_path, &None, true, PeerFeatures::COMMUNICATION_NODE)?
+ .as_ref()
+ .clone();
+ Ok(Some(id))
+ } else {
+ Ok(None)
+ }
+ }
+
+ /// A convenience method that calls [create_or_load_identity] for each image type.
+ pub fn create_or_load_identities(&self) -> Result, DockerWrapperError> {
+ let root_path = self.config.data_directory.to_string_lossy().to_string();
+ let mut ids = HashMap::new();
+ for image in ImageType::iter() {
+ if let Some(id) = self.create_or_load_identity(root_path.as_str(), image)? {
+ let _ = ids.insert(image, id);
+ }
+ }
+ Ok(ids)
+ }
+
+ /// Create and return a [`Stream`] of [`LogMessage`] instances for the `name`d container in the workspace.
+ pub fn logs(
+ &self,
+ container_name: &str,
+ docker: Docker,
+ ) -> Option>> {
+ let options = LogsOptions:: {
+ follow: true,
+ stdout: true,
+ stderr: true,
+ ..Default::default()
+ };
+ self.containers.get(container_name).map(move |container| {
+ let id = container.id();
+ docker
+ .logs(id.as_str(), Some(options))
+ .map(|log| log.map(LogMessage::from).map_err(DockerWrapperError::from))
+ })
+ }
+
+ /// Returns a [`Stream`] of resource stats for the container `name`, if it exists
+ pub fn resource_stats(
+ &self,
+ name: &str,
+ docker: Docker,
+ ) -> Option>> {
+ if let Some(container) = self.containers.get(name) {
+ let options = StatsOptions {
+ stream: true,
+ one_shot: false,
+ };
+ let id = container.id();
+ let stream = docker
+ .stats(id.as_str(), Some(options))
+ .map_err(DockerWrapperError::from);
+ Some(stream)
+ } else {
+ None
+ }
+ }
+
+ /// Create and run a docker container.
+ ///
+ /// ## Arguments
+ /// * `image`: The type of image to start. See [`ImageType`].
+ /// * `registry`: An optional docker registry path to use. The default is `quay.io/tarilabs`
+ /// * `tag`: The image tag to use. The default is `latest`.
+ /// * `docker`: a [`Docker`] instance.
+ ///
+ /// ## Return
+ ///
+ /// The method returns a future that resolves to a [`DockerWrapperError`] on an error, or the container name on
+ /// success.
+ ///
+ /// `start_service` creates a new docker container and runs it. As part of this process,
+ /// * it pulls configuration data from the [`LaunchConfig`] instance attached to this [`DockerWRapper`] to construct
+ /// the Environment, Volume configuration, and exposed Port configuration.
+ /// * creates a new container
+ /// * starts the container
+ /// * adds the container reference to the current list of containers being managed
+ /// * Returns the container name
+ pub async fn start_service(
+ &mut self,
+ image: ImageType,
+ registry: Option,
+ tag: Option,
+ docker: Docker,
+ ) -> Result {
+ let args = self.config.command(image);
+ let image_name = TariWorkspace::fully_qualified_image(image, registry.as_deref(), tag.as_deref());
+ let options = Some(CreateContainerOptions {
+ name: format!("{}_{}", self.name, image.image_name()),
+ });
+ let envars = self.config.environment(image);
+ let volumes = self.config.volumes(image);
+ let ports = self.config.ports(image);
+ let port_map = self.config.port_map(image);
+ let mounts = self.config.mounts(image, self.tari_blockchain_volume_name());
+ let mut endpoints = HashMap::new();
+ let endpoint = EndpointSettings {
+ aliases: Some(vec![image.container_name().to_string()]),
+ ..Default::default()
+ };
+ endpoints.insert(self.network_name(), endpoint);
+ let config = Config:: {
+ image: Some(image_name.clone()),
+ attach_stdin: Some(false),
+ attach_stdout: Some(false),
+ attach_stderr: Some(false),
+ exposed_ports: Some(ports),
+ open_stdin: Some(true),
+ stdin_once: Some(false),
+ tty: Some(true),
+ env: Some(envars),
+ volumes: Some(volumes),
+ cmd: Some(args),
+ host_config: Some(HostConfig {
+ binds: Some(vec![]),
+ network_mode: Some("bridge".to_string()),
+ port_bindings: Some(port_map),
+ mounts: Some(mounts),
+ ..Default::default()
+ }),
+ networking_config: Some(NetworkingConfig {
+ endpoints_config: endpoints,
+ }),
+ ..Default::default()
+ };
+ info!("Creating {}", image_name);
+ debug!("{} has configuration object: {:#?}", image_name, config);
+ let container = docker.create_container(options, config).await?;
+ let name = image.container_name();
+ let id = container.id.clone();
+ self.add_container(name, container);
+ info!("Starting {}.", image_name);
+ docker.start_container::(id.as_str(), None).await?;
+ self.mark_container_running(name)?;
+ info!("{} started with id {}", image_name, id);
+
+ Ok(name.to_string())
+ }
+
+ // helper function for start recipe. This will be overhauled to be more flexible in future
+ fn images_to_start(&self) -> Vec {
+ let mut images = Vec::with_capacity(6);
+ // Always use Tor for now
+ images.push(ImageType::Tor);
+ if self.config.base_node.is_some() {
+ images.push(ImageType::BaseNode);
+ }
+ if self.config.wallet.is_some() {
+ images.push(ImageType::Wallet);
+ }
+ if self.config.xmrig.is_some() {
+ images.push(ImageType::XmRig);
+ }
+ if self.config.sha3_miner.is_some() {
+ images.push(ImageType::Sha3Miner);
+ }
+ if self.config.mm_proxy.is_some() {
+ images.push(ImageType::MmProxy);
+ }
+ // TODO - add monerod support
+ images
+ }
+
+ /// Returns a reference to the set of managed containers. You can only retrieve immutable references from this
+ /// hash map. If you need a mutable reference tot a container's state, see [`container_mut`].
+ pub fn managed_containers(&self) -> &HashMap {
+ &self.containers
+ }
+
+ /// Return a mutable reference to the named container's [`ContainerState`].
+ pub fn container_mut(&mut self, container_name: &str) -> Option<&mut ContainerState> {
+ self.containers.get_mut(container_name)
+ }
+
+ /// Add the container info to the list of containers the wrapper is managing
+ fn add_container(&mut self, name: &str, container: ContainerCreateResponse) {
+ let id = ContainerId::from(container.id.clone());
+ let state = ContainerState::new(name.to_string(), id, container);
+ self.containers.insert(name.to_string(), state);
+ }
+
+ // Tag the container with id `id` as Running
+ fn mark_container_running(&mut self, name: &str) -> Result<(), DockerWrapperError> {
+ if let Some(container) = self.containers.get_mut(name) {
+ container.running();
+ Ok(())
+ } else {
+ Err(DockerWrapperError::ContainerNotFound(name.to_string()))
+ }
+ }
+
+ /// Stop the container with the given `name` and optionally delete it
+ pub async fn stop_container(&mut self, name: &str, delete: bool, docker: &Docker) {
+ let container = match self.container_mut(name) {
+ Some(c) => c,
+ None => {
+ info!(
+ "Cannot stop container {}. It was not found in the current workspace",
+ name
+ );
+ return;
+ },
+ };
+ let options = StopContainerOptions { t: 0 };
+ let id = container.id().clone();
+ match docker.stop_container(id.as_str(), Some(options)).await {
+ Ok(_res) => {
+ info!("Container {} stopped", id);
+ container.set_stop();
+ },
+ Err(err) => {
+ warn!("Could not stop container {} due to {}", id, err.to_string());
+ },
+ }
+ // Even if stopping failed (maybe it was already stopped), try and delete it
+ if delete {
+ match docker.remove_container(id.as_str(), None).await {
+ Ok(()) => {
+ info!("Container {} deleted", id);
+ container.set_deleted();
+ },
+ Err(err) => {
+ warn!("Could not delete container {} due to: {}", id, err.to_string())
+ },
+ }
+ }
+ }
+
+ /// Stop all running containers and optionally delete them
+ pub async fn stop_containers(&mut self, delete: bool, docker: &Docker) {
+ let names = self.containers.keys().cloned().collect::>();
+ for name in names {
+ // Stop the container immediately
+ self.stop_container(name.as_str(), delete, docker).await;
+ }
+ }
+
+ /// Returns the network name
+ pub fn network_name(&self) -> String {
+ format!("{}_network", self.name)
+ }
+
+ /// Returns the name of the volume holding blockchain data. Currently this is namespaced to the workspace. We might
+ /// want to change this to be shareable across networks, i.e. only namespace across the network type.
+ pub fn tari_blockchain_volume_name(&self) -> String {
+ format!("{}_{}_volume", self.name, self.config.tari_network.lower_case())
+ }
+
+ /// Checks if the network for this docker configuration exists
+ pub async fn network_exists(&self, docker: &Docker) -> Result {
+ let name = self.network_name();
+ let options = InspectNetworkOptions {
+ verbose: false,
+ scope: "local",
+ };
+ let network = docker.inspect_network(name.as_str(), Some(options)).await;
+ // hardcore pattern matching yo!
+ if let Ok(Network {
+ name: Some(name),
+ id: Some(id),
+ ..
+ }) = network
+ {
+ info!("Network {} (id:{}) exists", name, id);
+ Ok(true)
+ } else {
+ info!("Network {} does not exist", name);
+ Ok(false)
+ }
+ }
+
+ /// Create a network in docker to allow the containers in this workspace to communicate with each other.
+ pub async fn create_network(&self, docker: &Docker) -> Result<(), DockerWrapperError> {
+ let name = self.network_name();
+ let options = CreateNetworkOptions {
+ name: name.as_str(),
+ check_duplicate: true,
+ driver: "bridge",
+ internal: false,
+ attachable: false,
+ ingress: false,
+ ipam: Default::default(),
+ enable_ipv6: false,
+ options: Default::default(),
+ labels: Default::default(),
+ };
+ let res = docker.create_network(options).await?;
+ if let Some(id) = &res.id {
+ info!("Network {} (id:{}) created", name, id);
+ }
+ if let Some(warn) = res.warning {
+ warn!("Creating {} network had warnings: {}", name, warn);
+ }
+ Ok(())
+ }
+
+ /// Checks whether the blockchain data volume exists
+ pub async fn volume_exists(&self, docker: &Docker) -> Result {
+ let name = self.tari_blockchain_volume_name();
+ let volume = docker.inspect_volume(name.as_str()).await?;
+ trace!("Volume {} exists at {}", name, volume.mountpoint);
+ Ok(true)
+ }
+
+ /// Tries to create a new blockchain data volume for this workspace.
+ pub async fn create_volume(&self, docker: &Docker) -> Result<(), DockerWrapperError> {
+ let name = self.tari_blockchain_volume_name();
+ let config = CreateVolumeOptions {
+ name,
+ driver: "local".to_string(),
+ ..Default::default()
+ };
+ let volume = docker.create_volume(config).await?;
+ info!("Docker volume {} created at {}", volume.name, volume.mountpoint);
+ Ok(())
+ }
+
+ /// Connects a container to the workspace network. This is not typically needed, since the container will
+ /// automatically be connected to the network when it is created in [`start_service`].
+ pub async fn connect_to_network(
+ &self,
+ id: &ContainerId,
+ image: ImageType,
+ docker: &Docker,
+ ) -> Result<(), DockerWrapperError> {
+ let network = self.network_name();
+ let options = ConnectNetworkOptions {
+ container: id.as_str(),
+ endpoint_config: EndpointSettings {
+ aliases: Some(vec![image.container_name().to_string()]),
+ ..Default::default()
+ },
+ };
+ info!(
+ "Connecting container {} ({}) to network {}...",
+ image.image_name(),
+ id,
+ network
+ );
+ docker.connect_network(network.as_str(), options).await?;
+ info!(
+ "Docker container {} ({}) connected to network {}",
+ image.image_name(),
+ id,
+ network
+ );
+ Ok(())
+ }
+}
diff --git a/applications/launchpad/backend/src/docker/wrapper.rs b/applications/launchpad/backend/src/docker/wrapper.rs
new file mode 100644
index 0000000000..13de2c22f4
--- /dev/null
+++ b/applications/launchpad/backend/src/docker/wrapper.rs
@@ -0,0 +1,93 @@
+// Copyright 2021. The Tari Project
+//
+// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+// following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+// disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
+// following disclaimer in the documentation and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
+// products derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use std::collections::HashMap;
+
+use bollard::{
+ image::CreateImageOptions,
+ models::{CreateImageInfo, SystemEventsResponse},
+ system::EventsOptions,
+ Docker,
+};
+use futures::{Stream, TryStreamExt};
+
+use crate::docker::DockerWrapperError;
+
+/// A wrapper around a [`bollard::Docker`] instance providing some opinionated convenience methods for Tari workspaces.
+pub struct DockerWrapper {
+ handle: Docker,
+}
+
+impl DockerWrapper {
+ /// Create a new wrapper
+ pub fn new() -> Result {
+ let handle = Docker::connect_with_local_defaults()?;
+ Ok(Self { handle })
+ }
+
+ /// Returns the version of the _docker client_.
+ pub fn version(&self) -> String {
+ self.handle.client_version().to_string()
+ }
+
+ /// Create a (cheap) clone of the [`Docker`] instance, suitable for passing to threads and futures.
+ pub fn handle(&self) -> Docker {
+ self.handle.clone()
+ }
+
+ /// Pull an image from a repository.
+ ///
+ /// image_name: The fully qualified name of the image, {registry}/{name}:{tag}
+ /// To use the default registry and tag, you can call `Self::fully_qualified_image(image, registry, tag)`
+ /// to build a default full-qualified image name.
+ pub async fn pull_image(
+ &self,
+ image_name: String,
+ ) -> impl Stream- > {
+ let opts = Some(CreateImageOptions {
+ from_image: image_name,
+ ..Default::default()
+ });
+ let stream = self.handle.create_image(opts, None, None);
+ stream.map_err(DockerWrapperError::from)
+ }
+
+ /// Returns a stream of relevant events. We're opinionated here, so we filter the stream to only return
+ /// container, image, network and volume events.
+ pub async fn events(&self) -> impl Stream
- > {
+ let docker = self.handle.clone();
+ let mut type_filter = HashMap::new();
+ type_filter.insert("type".to_string(), vec![
+ "container".to_string(),
+ "image".to_string(),
+ "network".to_string(),
+ "volume".to_string(),
+ ]);
+ let options = EventsOptions {
+ since: None,
+ until: None,
+ filters: type_filter,
+ };
+ docker.events(Some(options)).map_err(DockerWrapperError::from)
+ }
+}
diff --git a/applications/installer/src/config/wallet.rs b/applications/launchpad/backend/src/error.rs
similarity index 56%
rename from applications/installer/src/config/wallet.rs
rename to applications/launchpad/backend/src/error.rs
index 9f2d6fe6fa..cc2907a8e5 100644
--- a/applications/installer/src/config/wallet.rs
+++ b/applications/launchpad/backend/src/error.rs
@@ -19,12 +19,40 @@
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+
+use std::error::Error;
+
+use tauri::{api::Error as TauriApiError, Error as TauriError};
+use thiserror::Error;
-use crate::config::{InstallLocation, SourceLocation};
+use crate::docker::DockerWrapperError;
+
+#[derive(Debug, Error)]
+pub enum LauncherError {
+ #[error("Something went wrong with the Docker Wrapper")]
+ DockerWrapperError(#[from] DockerWrapperError),
+ #[error("Something went wrong on your filesystem")]
+ FileSystemError(#[from] std::io::Error),
+ #[error("Something went screwy with Tauri")]
+ TauriError(#[from] TauriError),
+ #[error("Something went awry with the Tauri API")]
+ TauriApiError(#[from] TauriApiError),
+ #[error("A workspace configuration object is required")]
+ MisingConfig,
+ #[error("{1} is required because we are creating a {0}")]
+ ConfigVariableRequired(String, String),
+}
-pub struct WalletOptions {
- // Where to pull the wallet source or binary from
- source: SourceLocation,
- // Where the wallet and its data will live. SQLite installation will follow the settings chosen here.
- install_location: InstallLocation,
+impl LauncherError {
+ /// Combine all error messages down the chain into one string.
+ pub fn chained_message(&self) -> String {
+ let mut messages = vec![self.to_string()];
+ let mut this = self as &dyn Error;
+ while let Some(next) = this.source() {
+ messages.push(next.to_string());
+ this = next;
+ }
+ messages.join(" caused by:\n")
+ }
}
diff --git a/applications/installer/src/utils/mod.rs b/applications/launchpad/backend/src/lib.rs
similarity index 96%
rename from applications/installer/src/utils/mod.rs
rename to applications/launchpad/backend/src/lib.rs
index a1a28eef6f..6a771f9b15 100644
--- a/applications/installer/src/utils/mod.rs
+++ b/applications/launchpad/backend/src/lib.rs
@@ -19,5 +19,8 @@
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
-
+pub mod commands;
+pub mod docker;
+pub mod error;
diff --git a/applications/launchpad/backend/src/main.rs b/applications/launchpad/backend/src/main.rs
new file mode 100644
index 0000000000..1622ab7ccc
--- /dev/null
+++ b/applications/launchpad/backend/src/main.rs
@@ -0,0 +1,85 @@
+#![cfg_attr(all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows")]
+
+use log::*;
+use tari_launchpad::{
+ __cmd__create_default_workspace,
+ __cmd__create_new_workspace,
+ __cmd__events,
+ __cmd__image_list,
+ __cmd__launch_docker,
+ __cmd__pull_images,
+ __cmd__shutdown,
+ __cmd__start_service,
+ __cmd__stop_service,
+ commands::*,
+ docker::{DockerWrapper, Workspaces},
+};
+use tauri::{api::cli::get_matches, async_runtime::block_on, utils::config::CliConfig, Event, Manager};
+
+fn main() {
+ env_logger::init();
+ let context = tauri::generate_context!();
+ let cli_config = context.config().tauri.cli.clone().unwrap();
+
+ // Handle --help and --version. Exits after printing
+ handle_cli_options(&cli_config);
+
+ let docker = match DockerWrapper::new() {
+ Ok(docker) => docker,
+ Err(err) => {
+ error!("Could not launch docker backend. {}", err.chained_message());
+ std::process::exit(-1);
+ },
+ };
+
+ // TODO - Load workspace definitions from persistent storage here
+ let workspaces = Workspaces::default();
+ // We're going to attach this to the AppState because Tauri does not expose it for some reason
+ let package_info = context.package_info().clone();
+ info!("Using Docker version: {}", docker.version());
+
+ let app = tauri::Builder::default()
+ .manage(AppState::new(docker, workspaces, package_info))
+ .invoke_handler(tauri::generate_handler![
+ image_list,
+ pull_images,
+ create_new_workspace,
+ create_default_workspace,
+ events,
+ launch_docker,
+ start_service,
+ stop_service,
+ shutdown
+ ])
+ .build(context)
+ .expect("error while running Launchpad");
+
+ app.run(|app, event| {
+ if let Event::Exit = event {
+ info!("Received Exit event");
+ block_on(async move {
+ let state = app.state();
+ let _ = shutdown(state).await;
+ });
+ }
+ });
+}
+
+fn handle_cli_options(cli_config: &CliConfig) {
+ match get_matches(cli_config) {
+ Ok(matches) => {
+ if let Some(arg_data) = matches.args.get("help") {
+ debug!("{}", arg_data.value.as_str().unwrap_or("No help available"));
+ std::process::exit(0);
+ }
+ if let Some(arg_data) = matches.args.get("version") {
+ debug!("{}", arg_data.value.as_str().unwrap_or("No version data available"));
+ std::process::exit(0);
+ }
+ },
+ Err(e) => {
+ error!("{}", e.to_string());
+ std::process::exit(1);
+ },
+ }
+}
diff --git a/applications/launchpad/backend/tauri.conf.json b/applications/launchpad/backend/tauri.conf.json
new file mode 100644
index 0000000000..3b61075814
--- /dev/null
+++ b/applications/launchpad/backend/tauri.conf.json
@@ -0,0 +1,80 @@
+{
+ "package": {
+ "productName": "tari-launchpad",
+ "version": "0.1.0"
+ },
+ "build": {
+ "distDir": "../gui-vue/dist",
+ "devPath": "http://localhost:8080",
+ "beforeDevCommand": "cd ../gui-vue && npm run start",
+ "beforeBuildCommand": "cd ../gui-vue && npm run build"
+ },
+ "tauri": {
+ "cli": {
+ "description": "A simple single-click UI to launch a Tari node, wallet and miner",
+ "args": [
+ {
+ "short": "c",
+ "name": "config-file",
+ "description": "The path to the configuration file to use for the launcher",
+ "takesValue": true
+ }
+ ],
+ "subcommands": {}
+ },
+ "bundle": {
+ "active": true,
+ "targets": "all",
+ "identifier": "com.tari.launchpad",
+ "icon": [
+ "icons/favicon-32x32.png",
+ "icons/apple-icon-120x120.png",
+ "icons/android-icon-192x192.png"
+ ],
+ "resources": ["assets/*"],
+ "externalBin": [],
+ "copyright": "(c) The Tari Development community 2021",
+ "category": "DeveloperTool",
+ "shortDescription": "",
+ "longDescription": "",
+ "deb": {
+ "depends": [],
+ "useBootstrapper": false
+ },
+ "macOS": {
+ "frameworks": [],
+ "minimumSystemVersion": "",
+ "useBootstrapper": false,
+ "exceptionDomain": "",
+ "signingIdentity": null,
+ "entitlements": null
+ },
+ "windows": {
+ "certificateThumbprint": null,
+ "digestAlgorithm": "sha256",
+ "timestampUrl": ""
+ }
+ },
+ "updater": {
+ "active": false
+ },
+ "allowlist": {
+ "dialog": {
+ "open": true
+ },
+ "all": true
+ },
+ "windows": [
+ {
+ "title": "Tari Launchpad",
+ "width": 1600,
+ "height": 2400,
+ "resizable": true,
+ "fullscreen": false
+ }
+ ],
+ "security": {
+ "csp": "default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self' img-src: 'self'"
+ }
+ }
+}
\ No newline at end of file
diff --git a/applications/launchpad/build_images.sh b/applications/launchpad/build_images.sh
new file mode 100755
index 0000000000..d8b09f7b94
--- /dev/null
+++ b/applications/launchpad/build_images.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+source versions.txt
+
+build_image() {
+ echo "Building $1 image v$VERSION.."
+ docker build -f docker_rig/$1 --build-arg ARCH=native --build-arg FEATURES=avx2 --build-arg VERSION=$VERSION $3 $4 -t quay.io/tarilabs/$2:latest ./../..
+ docker tag quay.io/tarilabs/$2:latest quay.io/tarilabs/$2:$VERSION
+ docker push quay.io/tarilabs/$2:latest
+ docker push quay.io/tarilabs/$2:$VERSION
+}
+
+build_image base_node.Dockerfile tari_base_node
+build_image console_wallet.Dockerfile tari_console_wallet
+build_image mm_proxy.Dockerfile tari_mm_proxy
+build_image sha3_miner.Dockerfile tari_sha3_miner
+build_image tor.Dockerfile tor
+build_image monerod.Dockerfile monerod
+
+echo "Building XMRig image v$VERSION (XMRig v$XMRIG_VERSION)"
+docker build -f docker_rig/xmrig.Dockerfile --build-arg VERSION=$VERSION --build-arg XMRIG_VERSION=$XMRIG_VERSION -t quay.io/tarilabs/xmrig:latest ./../..
+docker tag quay.io/tarilabs/xmrig:latest quay.io/tarilabs/xmrig:$VERSION
+docker push quay.io/tarilabs/xmrig:latest
+docker push quay.io/tarilabs/xmrig:$VERSION
+
+docker build -f docker_rig/frontail.Dockerfile -t quay.io/tarilabs/frontail ./docker_rig
+docker tag quay.io/tarilabs/frontail:latest quay.io/tarilabs/frontail:$VERSION
+docker push quay.io/tarilabs/frontail:latest
+docker push quay.io/tarilabs/frontail:$VERSION
diff --git a/applications/launchpad/docker_rig/base_node.Dockerfile b/applications/launchpad/docker_rig/base_node.Dockerfile
index 14ac002eff..378480a905 100644
--- a/applications/launchpad/docker_rig/base_node.Dockerfile
+++ b/applications/launchpad/docker_rig/base_node.Dockerfile
@@ -1,17 +1,18 @@
-FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-09-18 as builder
-
+FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-11-01 as builder
WORKDIR /tari
# Adding only necessary things up front and copying the entrypoint script last
# to take advantage of layer caching in docker
-ADD Cargo.lock .
ADD Cargo.toml .
ADD applications applications
ADD base_layer base_layer
+ADD clients clients
ADD common common
+ADD common_sqlite common_sqlite
ADD comms comms
ADD infrastructure infrastructure
ADD meta meta
+ADD Cargo.lock .
ADD rust-toolchain.toml .
ARG ARCH=native
@@ -27,6 +28,7 @@ RUN cargo build --bin tari_base_node --release --features $FEATURES --locked
# Create a base minimal image for the executables
FROM quay.io/bitnami/minideb:bullseye as base
+ARG VERSION=1.0.1
# Disable Prompt During Packages Installation
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && apt -y install \
@@ -50,8 +52,9 @@ RUN mkdir -p "/var/tari/base_node/weatherwax" \
&& mkdir -p "/var/tari/base_node/mainnet" \
&& chown -R tari.tari "/var/tari/base_node"
+RUN mkdir /blockchain && chown tari.tari /blockchain && chmod 777 /blockchain
USER tari
-
+ENV dockerfile_version=$VERSION
ENV APP_NAME=base_node APP_EXEC=tari_base_node
COPY --from=builder /tari/target/release/$APP_EXEC /usr/bin/
diff --git a/applications/launchpad/docker_rig/console_wallet.Dockerfile b/applications/launchpad/docker_rig/console_wallet.Dockerfile
index 0fc7c456a8..b890dfaa88 100644
--- a/applications/launchpad/docker_rig/console_wallet.Dockerfile
+++ b/applications/launchpad/docker_rig/console_wallet.Dockerfile
@@ -1,17 +1,18 @@
-FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-09-18 as builder
-
+FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-11-01 as builder
WORKDIR /tari
# Adding only necessary things up front and copying the entrypoint script last
# to take advantage of layer caching in docker
-ADD Cargo.lock .
ADD Cargo.toml .
ADD applications applications
ADD base_layer base_layer
+ADD clients clients
ADD common common
+ADD common_sqlite common_sqlite
ADD comms comms
ADD infrastructure infrastructure
ADD meta meta
+ADD Cargo.lock .
ADD rust-toolchain.toml .
ARG ARCH=native
@@ -27,6 +28,7 @@ RUN cargo build --bin tari_console_wallet --release --features $FEATURES --locke
# Create a base minimal image for the executables
FROM quay.io/bitnami/minideb:bullseye as base
+ARG VERSION=1.0.1
# Disable Prompt During Packages Installation
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && apt -y install \
@@ -45,7 +47,7 @@ RUN apt update && apt -y install \
RUN groupadd -g 1000 tari && useradd -s /bin/bash -u 1000 -g 1000 tari
USER tari
-
+ENV dockerfile_version=$VERSION
ENV APP_NAME=wallet APP_EXEC=tari_console_wallet
COPY --from=builder /tari/target/release/$APP_EXEC /usr/bin/
diff --git a/applications/launchpad/docker_rig/docker-compose.yml b/applications/launchpad/docker_rig/docker-compose.yml
index f7c0924d27..bacb0b0b6c 100644
--- a/applications/launchpad/docker_rig/docker-compose.yml
+++ b/applications/launchpad/docker_rig/docker-compose.yml
@@ -11,42 +11,6 @@ services:
# - 9050:9050
# - 9051:9051
-
- wallet:
- image: quay.io/tarilabs/tari_console_wallet:latest
- build:
- context: ./../../..
- dockerfile: applications/launchpad/docker_rig/console_wallet.Dockerfile
- args:
- ARCH: native
- FEATURES: avx2
- environment:
- TARI_LOG_CONFIGURATION: "/var/tari/config/log4rs.yml"
- APP_NAME: wallet
- APP_EXEC: tari_console_wallet
- WAIT_FOR_TOR: ${WAIT_FOR_TOR:-0}
- SHELL: "/bin/bash"
- TERM: "linux"
- TARI_WALLET_PASSWORD: ${TARI_WALLET_PASSWORD:-tari}
- TARI_NETWORK: ${TARI_NETWORK:-weatherwax}
- TARI_WALLET__WEATHERWAX__TOR_CONTROL_AUTH: "password=${TOR_CONTROL_AUTH:-tari}"
- TARI_WALLET__WEATHERWAX__TOR_CONTROL_ADDRESS: "/dns4/tor/tcp/9051"
- TARI_WALLET__WEATHERWAX__TOR_SOCKS_ADDRESS_OVERRIDE: "/dns4/tor/tcp/9050"
- TARI_WALLET__WEATHERWAX__TOR_FORWARD_ADDRESS: "/dns4/wallet/tcp/18188"
- TARI_WALLET__WEATHERWAX__TCP_LISTENER_ADDRESS: "/dns4/wallet/tcp/18188"
- TARI_WALLET__GRPC_ADDRESS: "0.0.0.0:18143"
- command: ["--non-interactive"]
- ports:
- - 18188:18188
- - 18143:18143
- depends_on:
- - tor
- volumes:
- - ${DATA_FOLDER}:/var/tari/
- #stdin_open: true
- #tty: true
-
-
base_node:
image: quay.io/tarilabs/tari_base_node:latest
build:
@@ -83,6 +47,39 @@ services:
stdin_open: true
tty: true
+ wallet:
+ image: quay.io/tarilabs/tari_console_wallet:latest
+ build:
+ context: ./../../..
+ dockerfile: applications/launchpad/docker_rig/console_wallet.Dockerfile
+ args:
+ ARCH: native
+ FEATURES: avx2
+ environment:
+ TARI_LOG_CONFIGURATION: "/var/tari/config/log4rs.yml"
+ APP_NAME: wallet
+ APP_EXEC: tari_console_wallet
+ WAIT_FOR_TOR: ${WAIT_FOR_TOR:-0}
+ SHELL: "/bin/bash"
+ TERM: "linux"
+ TARI_WALLET_PASSWORD: ${TARI_WALLET_PASSWORD:-tari}
+ TARI_NETWORK: ${TARI_NETWORK:-weatherwax}
+ TARI_WALLET__WEATHERWAX__TOR_CONTROL_AUTH: "password=${TOR_CONTROL_AUTH:-tari}"
+ TARI_WALLET__WEATHERWAX__TOR_CONTROL_ADDRESS: "/dns4/tor/tcp/9051"
+ TARI_WALLET__WEATHERWAX__TOR_SOCKS_ADDRESS_OVERRIDE: "/dns4/tor/tcp/9050"
+ TARI_WALLET__WEATHERWAX__TOR_FORWARD_ADDRESS: "/dns4/wallet/tcp/18188"
+ TARI_WALLET__WEATHERWAX__TCP_LISTENER_ADDRESS: "/dns4/wallet/tcp/18188"
+ TARI_BASE_NODE__WEATHERWAX__GRPC_CONSOLE_WALLET_ADDRESS: "0.0.0.0:18143"
+ command: ["--non-interactive"]
+ ports:
+ - 18188:18188
+ - 18143:18143
+ depends_on:
+ - tor
+ volumes:
+ - ${DATA_FOLDER}:/var/tari/
+ #stdin_open: true
+ #tty: true
sha3_miner:
image: quay.io/tarilabs/tari_sha3_miner:latest
@@ -101,6 +98,7 @@ services:
TARI_MINING_NODE__NUM_MINING_THREADS: 2
TARI_MINING_NODE__MINE_ON_TIP_ONLY: 1
TARI_BASE_NODE__WEATHERWAX__GRPC_BASE_NODE_ADDRESS: "/dns4/base_node/tcp/18142"
+ TARI_BASE_NODE__WEATHERWAX__GRPC_CONSOLE_WALLET_ADDRESS: "/dns4/wallet/tcp/18143"
TARI_WALLET__GRPC_ADDRESS: "/dns4/wallet/tcp/18143"
command: [ ]
depends_on:
@@ -158,6 +156,7 @@ services:
WAIT_FOR_TOR: 0
TARI_NETWORK: ${TARI_NETWORK}
TARI_BASE_NODE__WEATHERWAX__GRPC_BASE_NODE_ADDRESS: "/dns4/base_node/tcp/18142"
+ TARI_BASE_NODE__WEATHERWAX__GRPC_CONSOLE_WALLET_ADDRESS: "/dns4/wallet/tcp/18143"
TARI_WALLET__GRPC_ADDRESS: "/dns4/wallet/tcp/18143"
TARI_MERGE_MINING_PROXY__WEATHERWAX__MONEROD_URL: ${TARI_MONEROD_URL:-["http://stagenet.community.xmr.to:38081","http://monero-stagenet.exan.tech:38081","http://stagenet.xmr-tw.org:38081","http://xmr-lux.boldsuck.org:38081","http://singapore.node.xmr.pm:38081"]}
TARI_MERGE_MINING_PROXY__WEATHERWAX__MONEROD_USERNAME: ${TARI_MONEROD_USERNAME}
diff --git a/applications/launchpad/docker_rig/frontail.Dockerfile b/applications/launchpad/docker_rig/frontail.Dockerfile
new file mode 100644
index 0000000000..7951a1a6ae
--- /dev/null
+++ b/applications/launchpad/docker_rig/frontail.Dockerfile
@@ -0,0 +1,9 @@
+FROM node:16-alpine
+
+RUN npm install -g frontail
+
+ADD run_frontail.sh /usr/bin/
+WORKDIR /var/tari
+ENTRYPOINT ["/usr/bin/run_frontail.sh"]
+EXPOSE 9001
+CMD ["--help"]
\ No newline at end of file
diff --git a/applications/launchpad/docker_rig/mm_proxy.Dockerfile b/applications/launchpad/docker_rig/mm_proxy.Dockerfile
index 0454105599..c1e35828b9 100644
--- a/applications/launchpad/docker_rig/mm_proxy.Dockerfile
+++ b/applications/launchpad/docker_rig/mm_proxy.Dockerfile
@@ -1,17 +1,18 @@
-FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-09-18 as builder
-
+FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-11-01 as builder
WORKDIR /tari
# Adding only necessary things up front and copying the entrypoint script last
# to take advantage of layer caching in docker
-ADD Cargo.lock .
ADD Cargo.toml .
ADD applications applications
ADD base_layer base_layer
+ADD clients clients
ADD common common
+ADD common_sqlite common_sqlite
ADD comms comms
ADD infrastructure infrastructure
ADD meta meta
+ADD Cargo.lock .
ADD rust-toolchain.toml .
ARG ARCH=native
@@ -29,6 +30,7 @@ RUN cargo build --bin tari_merge_mining_proxy --release --locked --features "$FE
# Create a base minimal image for the executables
FROM quay.io/bitnami/minideb:bullseye as base
# Disable Prompt During Packages Installation
+ARG VERSION=1.0.1
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && apt -y install \
apt-transport-https \
@@ -42,6 +44,7 @@ FROM base
RUN groupadd -g 1000 tari && useradd -s /bin/bash -u 1000 -g 1000 tari
USER tari
+ENV dockerfile_version=$VERSION
ENV APP_NAME=mm_proxy APP_EXEC=tari_merge_mining_proxy
COPY --from=builder /tari/target/release/$APP_EXEC /usr/bin/
diff --git a/applications/launchpad/docker_rig/monerod.Dockerfile b/applications/launchpad/docker_rig/monerod.Dockerfile
index bbf2103b00..34419dbe54 100644
--- a/applications/launchpad/docker_rig/monerod.Dockerfile
+++ b/applications/launchpad/docker_rig/monerod.Dockerfile
@@ -1,6 +1,5 @@
# Usage: docker run --restart=always -v /var/data/blockchain-xmr:/root/.bitmonero -p 18080:18080 -p 18081:18081 --name=monerod -td kannix/monero-full-node
FROM quay.io/bitnami/minideb:bullseye AS build
-
ENV MONERO_VERSION=0.17.2.3 MONERO_SHA256=8069012ad5e7b35f79e35e6ca71c2424efc54b61f6f93238b182981ba83f2311
@@ -16,6 +15,7 @@ RUN curl https://dlsrc.getmonero.org/cli/monero-linux-x64-v$MONERO_VERSION.tar.b
rm -r monero-*
FROM quay.io/bitnami/minideb:bullseye
+ARG VERSION=1.0.1
RUN groupadd -g 1000 tari && useradd -ms /bin/bash -u 1000 -g 1000 tari \
&& mkdir -p /home/tari/.bitmonero \
@@ -27,6 +27,7 @@ COPY --chown=tari:tari --from=build /root/monerod /home/tari/monerod
# blockchain location
VOLUME /home/tari/.bitmonero
+ENV dockerfile_version=$VERSION
EXPOSE 18080 18081
diff --git a/applications/launchpad/docker_rig/push_bundle.sh b/applications/launchpad/docker_rig/push_bundle.sh
deleted file mode 100755
index 051b8767dd..0000000000
--- a/applications/launchpad/docker_rig/push_bundle.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright 2021. The Tari Project
-#
-# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
-# following conditions are met:
-#
-# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
-# disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
-# following disclaimer in the documentation and/or other materials provided with the distribution.
-#
-# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
-# products derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
-# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
-# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
- #!/usr/local/bin/bash
-export DATA_FOLDER="/tmp/push_bundle"
-
-check_data_folder() {
- if [[ ! -d "$DATA_FOLDER" ]]; then
- echo "Creating data folder $DATA_FOLDER.."
- mkdir -p "$DATA_FOLDER"
- mkdir -p "$DATA_FOLDER/tor"
- mkdir -p "$DATA_FOLDER/xmrig"
- mkdir -p "$DATA_FOLDER/monerod"
- mkdir -p "$DATA_FOLDER/mm_proxy"
- cp torrc "$DATA_FOLDER/tor"
- CREATE_CONFIG=1
- CREATE_ID=1
- echo "Done."
- else
- echo "Using existing data folder $DATA_FOLDER"
- fi
-}
-
-check_data_folder
-
-declare -A versions
-
-versions["tari_base_node"]="$(docker compose run --rm base_node --version | awk '/tari_common /{print $NF}')"
-versions["wallet"]="$(docker compose run --rm wallet --version | awk '/tari_common /{print $NF}')"
-versions["sha3_miner"]="$(docker compose run --rm sha3_miner --version | awk '/tari_common /{print $NF}')"
-versions["mm_proxy"]="$(docker compose run --rm mm_proxy --version | awk '/tari_common /{print $NF}')"
-versions["xmrig"]="$(docker compose run --rm xmrig --version | awk '/XMRig /{print $NF}')"
-versions["tor"]="$(docker compose run --rm tor tor --version | awk '/Tor version /{print $NF}')"
-versions["monerod"]="$(docker compose run --rm monerod --version | sed 's/Monero .*(\(.*\)-.*)/\1/')"
-
-echo "${versions[@]}"
-
-for i in tari_base_node wallet sha3_miner mm_proxy_ver xmrig_ver tor_ver monerod; do
- docker image tag quay.io/tarilabs/$i:latest quay.io/tarilabs/$i:${versions[$i]}
- docker push quay.io/tarilabs/$i:${versions[$i]}
- docker push quay.io/tarilabs/$i:latest
-done
\ No newline at end of file
diff --git a/applications/launchpad/docker_rig/run_frontail.sh b/applications/launchpad/docker_rig/run_frontail.sh
new file mode 100755
index 0000000000..7687a3ceb3
--- /dev/null
+++ b/applications/launchpad/docker_rig/run_frontail.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+echo Starting frontail log viewer: $@
+frontail $@
\ No newline at end of file
diff --git a/applications/launchpad/docker_rig/sha3_miner.Dockerfile b/applications/launchpad/docker_rig/sha3_miner.Dockerfile
index 365dbe4418..bba6690c53 100644
--- a/applications/launchpad/docker_rig/sha3_miner.Dockerfile
+++ b/applications/launchpad/docker_rig/sha3_miner.Dockerfile
@@ -1,17 +1,19 @@
-FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-09-18 as builder
+FROM quay.io/tarilabs/rust_tari-build-with-deps:nightly-2021-11-01 as builder
WORKDIR /tari
# Adding only necessary things up front and copying the entrypoint script last
# to take advantage of layer caching in docker
-ADD Cargo.lock .
ADD Cargo.toml .
ADD applications applications
ADD base_layer base_layer
+ADD clients clients
ADD common common
+ADD common_sqlite common_sqlite
ADD comms comms
ADD infrastructure infrastructure
ADD meta meta
+ADD Cargo.lock .
ADD rust-toolchain.toml .
ARG ARCH=native
@@ -27,6 +29,7 @@ RUN cargo build --bin tari_mining_node --release --features $FEATURES --locked
# Create a base minimal image for the executables
FROM quay.io/bitnami/minideb:bullseye as base
+ARG VERSION=1.0.1
# Disable Prompt During Packages Installation
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && apt -y install \
@@ -43,6 +46,7 @@ FROM base
RUN groupadd -g 1000 tari && useradd -s /bin/bash -u 1000 -g 1000 tari
USER tari
+ENV dockerfile_version=$VERSION
ENV APP_NAME=sha3_miner APP_EXEC=tari_mining_node
COPY --from=builder /tari/target/release/$APP_EXEC /usr/bin/
diff --git a/applications/launchpad/docker_rig/tor.Dockerfile b/applications/launchpad/docker_rig/tor.Dockerfile
index 856b5f25d2..a532913eb1 100644
--- a/applications/launchpad/docker_rig/tor.Dockerfile
+++ b/applications/launchpad/docker_rig/tor.Dockerfile
@@ -1,4 +1,5 @@
FROM alpine:latest
+ARG VERSION=1.0.1
RUN apk update \
&& apk upgrade \
@@ -8,7 +9,7 @@ RUN apk update \
EXPOSE 9050
EXPOSE 9051
-ADD torrc /etc/tor
+ENV dockerfile_version=$VERSION
USER tor
CMD /usr/bin/tor -f /etc/tor/torrc
diff --git a/applications/launchpad/docker_rig/xmrig.Dockerfile b/applications/launchpad/docker_rig/xmrig.Dockerfile
index 1205749449..a86ec8ebd9 100644
--- a/applications/launchpad/docker_rig/xmrig.Dockerfile
+++ b/applications/launchpad/docker_rig/xmrig.Dockerfile
@@ -1,6 +1,6 @@
FROM alpine:latest as build
-ARG VERSION="v6.15.3"
+ARG XMRIG_VERSION="v6.15.3"
RUN apk add \
git \
@@ -14,7 +14,7 @@ RUN apk add \
autoconf \
linux-headers
-RUN git clone --branch ${VERSION} https://github.com/xmrig/xmrig.git
+RUN git clone --branch ${XMRIG_VERSION} https://github.com/xmrig/xmrig.git
RUN mkdir xmrig/build
WORKDIR /xmrig/scripts
RUN ./build_deps.sh
@@ -23,13 +23,16 @@ RUN cmake .. -DXMRIG_DEPS=scripts/deps -DBUILD_STATIC=ON
RUN make -j$(nproc)
FROM alpine:latest as base
+ARG VERSION=1.0.1
COPY --from=build /xmrig/build/xmrig /usr/bin/
# Create a user & group
-RUN groupadd -g 1000 tari && useradd -ms /bin/bash -u 1000 -g 1000 tari
-
+RUN addgroup -g 1000 tari && adduser -u 1000 -g 1000 -S tari -G tari
+RUN mkdir -p /home/tari && chown tari.tari /home/tari
# Chown all the files to the app user.
USER tari
+ENV dockerfile_version=$VERSION
+ENV xmrig_version=$XMRIG_VERSION
RUN echo -e "\
{\
@@ -41,6 +44,6 @@ RUN echo -e "\
{ \"coin\": \"monero\", \"url\": \"127.0.0.1:18081\", \"user\": \"44\", \"daemon\": true }\
]\
}\
-" > /home/xmrig/.xmrig.json
+" > /home/tari/.xmrig.json
ENTRYPOINT [ "/usr/bin/xmrig" ]
diff --git a/applications/launchpad/gui-vue/.gitignore b/applications/launchpad/gui-vue/.gitignore
new file mode 100644
index 0000000000..403adbc1e5
--- /dev/null
+++ b/applications/launchpad/gui-vue/.gitignore
@@ -0,0 +1,23 @@
+.DS_Store
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/applications/launchpad/gui-vue/README.md b/applications/launchpad/gui-vue/README.md
new file mode 100644
index 0000000000..06c4379054
--- /dev/null
+++ b/applications/launchpad/gui-vue/README.md
@@ -0,0 +1,24 @@
+# gui-vue
+
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Lints and fixes files
+```
+npm run lint
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).
diff --git a/applications/launchpad/gui-vue/babel.config.js b/applications/launchpad/gui-vue/babel.config.js
new file mode 100644
index 0000000000..e9558405fd
--- /dev/null
+++ b/applications/launchpad/gui-vue/babel.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ presets: [
+ '@vue/cli-plugin-babel/preset'
+ ]
+}
diff --git a/applications/launchpad/gui-vue/package-lock.json b/applications/launchpad/gui-vue/package-lock.json
new file mode 100644
index 0000000000..e047e03dcc
--- /dev/null
+++ b/applications/launchpad/gui-vue/package-lock.json
@@ -0,0 +1,15810 @@
+{
+ "name": "gui-vue",
+ "version": "0.1.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.16.0"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz",
+ "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==",
+ "dev": true
+ },
+ "@babel/core": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz",
+ "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.0",
+ "@babel/helper-compilation-targets": "^7.16.0",
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helpers": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.1.2",
+ "semver": "^6.3.0",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz",
+ "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0",
+ "jsesc": "^2.5.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz",
+ "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz",
+ "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz",
+ "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.0",
+ "@babel/helper-validator-option": "^7.14.5",
+ "browserslist": "^4.17.5",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz",
+ "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0"
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz",
+ "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "regexpu-core": "^4.7.1"
+ }
+ },
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz",
+ "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.13.0",
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/traverse": "^7.13.0",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz",
+ "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz",
+ "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz",
+ "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz",
+ "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz",
+ "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz",
+ "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz",
+ "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-simple-access": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz",
+ "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
+ "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
+ "dev": true
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz",
+ "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-wrap-function": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz",
+ "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz",
+ "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz",
+ "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz",
+ "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.15.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
+ "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
+ "dev": true
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
+ "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+ "dev": true
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz",
+ "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz",
+ "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.3",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz",
+ "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz",
+ "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng=="
+ },
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.16.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz",
+ "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz",
+ "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.0"
+ }
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz",
+ "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-remap-async-to-generator": "^7.16.4",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz",
+ "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-proposal-class-static-block": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz",
+ "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ }
+ },
+ "@babel/plugin-proposal-decorators": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.4.tgz",
+ "integrity": "sha512-RESBNX16eNqnBeEVR5sCJpnW0mHiNLNNvGA8PrRuK/4ZJ4TO+6bHleRUuGQYDERVySOKtOhSya/C4MIhwAMAgg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-decorators": "^7.16.0"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz",
+ "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-export-namespace-from": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz",
+ "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz",
+ "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-logical-assignment-operators": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz",
+ "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz",
+ "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-numeric-separator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz",
+ "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz",
+ "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.0",
+ "@babel/helper-compilation-targets": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.16.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz",
+ "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-optional-chaining": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz",
+ "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ }
+ },
+ "@babel/plugin-proposal-private-methods": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz",
+ "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz",
+ "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-create-class-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz",
+ "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ }
+ },
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-decorators": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.0.tgz",
+ "integrity": "sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz",
+ "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz",
+ "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz",
+ "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-remap-async-to-generator": "^7.16.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz",
+ "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz",
+ "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz",
+ "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.16.0",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz",
+ "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz",
+ "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz",
+ "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz",
+ "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz",
+ "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz",
+ "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz",
+ "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz",
+ "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz",
+ "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz",
+ "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz",
+ "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-simple-access": "^7.16.0",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz",
+ "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.16.0",
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz",
+ "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz",
+ "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz",
+ "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz",
+ "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-replace-supers": "^7.16.0"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz",
+ "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz",
+ "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz",
+ "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.14.2"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz",
+ "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-runtime": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz",
+ "integrity": "sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "babel-plugin-polyfill-corejs2": "^0.3.0",
+ "babel-plugin-polyfill-corejs3": "^0.4.0",
+ "babel-plugin-polyfill-regenerator": "^0.3.0",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz",
+ "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz",
+ "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz",
+ "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz",
+ "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz",
+ "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-escapes": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz",
+ "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz",
+ "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.16.0",
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.16.4",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz",
+ "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.16.4",
+ "@babel/helper-compilation-targets": "^7.16.3",
+ "@babel/helper-plugin-utils": "^7.14.5",
+ "@babel/helper-validator-option": "^7.14.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.16.4",
+ "@babel/plugin-proposal-class-properties": "^7.16.0",
+ "@babel/plugin-proposal-class-static-block": "^7.16.0",
+ "@babel/plugin-proposal-dynamic-import": "^7.16.0",
+ "@babel/plugin-proposal-export-namespace-from": "^7.16.0",
+ "@babel/plugin-proposal-json-strings": "^7.16.0",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
+ "@babel/plugin-proposal-numeric-separator": "^7.16.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.16.0",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.16.0",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.0",
+ "@babel/plugin-proposal-private-methods": "^7.16.0",
+ "@babel/plugin-proposal-private-property-in-object": "^7.16.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.16.0",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-transform-arrow-functions": "^7.16.0",
+ "@babel/plugin-transform-async-to-generator": "^7.16.0",
+ "@babel/plugin-transform-block-scoped-functions": "^7.16.0",
+ "@babel/plugin-transform-block-scoping": "^7.16.0",
+ "@babel/plugin-transform-classes": "^7.16.0",
+ "@babel/plugin-transform-computed-properties": "^7.16.0",
+ "@babel/plugin-transform-destructuring": "^7.16.0",
+ "@babel/plugin-transform-dotall-regex": "^7.16.0",
+ "@babel/plugin-transform-duplicate-keys": "^7.16.0",
+ "@babel/plugin-transform-exponentiation-operator": "^7.16.0",
+ "@babel/plugin-transform-for-of": "^7.16.0",
+ "@babel/plugin-transform-function-name": "^7.16.0",
+ "@babel/plugin-transform-literals": "^7.16.0",
+ "@babel/plugin-transform-member-expression-literals": "^7.16.0",
+ "@babel/plugin-transform-modules-amd": "^7.16.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.16.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.16.0",
+ "@babel/plugin-transform-modules-umd": "^7.16.0",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0",
+ "@babel/plugin-transform-new-target": "^7.16.0",
+ "@babel/plugin-transform-object-super": "^7.16.0",
+ "@babel/plugin-transform-parameters": "^7.16.3",
+ "@babel/plugin-transform-property-literals": "^7.16.0",
+ "@babel/plugin-transform-regenerator": "^7.16.0",
+ "@babel/plugin-transform-reserved-words": "^7.16.0",
+ "@babel/plugin-transform-shorthand-properties": "^7.16.0",
+ "@babel/plugin-transform-spread": "^7.16.0",
+ "@babel/plugin-transform-sticky-regex": "^7.16.0",
+ "@babel/plugin-transform-template-literals": "^7.16.0",
+ "@babel/plugin-transform-typeof-symbol": "^7.16.0",
+ "@babel/plugin-transform-unicode-escapes": "^7.16.0",
+ "@babel/plugin-transform-unicode-regex": "^7.16.0",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.16.0",
+ "babel-plugin-polyfill-corejs2": "^0.3.0",
+ "babel-plugin-polyfill-corejs3": "^0.4.0",
+ "babel-plugin-polyfill-regenerator": "^0.3.0",
+ "core-js-compat": "^3.19.1",
+ "semver": "^6.3.0"
+ }
+ },
+ "@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz",
+ "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==",
+ "dev": true,
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz",
+ "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.16.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz",
+ "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.0",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-hoist-variables": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/parser": "^7.16.3",
+ "@babel/types": "^7.16.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz",
+ "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.15.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@fortawesome/fontawesome-common-types": {
+ "version": "0.2.36",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz",
+ "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg=="
+ },
+ "@fortawesome/fontawesome-svg-core": {
+ "version": "1.2.36",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz",
+ "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "^0.2.36"
+ }
+ },
+ "@fortawesome/free-brands-svg-icons": {
+ "version": "5.15.4",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.15.4.tgz",
+ "integrity": "sha512-f1witbwycL9cTENJegcmcZRYyawAFbm8+c6IirLmwbbpqz46wyjbQYLuxOc7weXFXfB7QR8/Vd2u5R3q6JYD9g==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "^0.2.36"
+ }
+ },
+ "@fortawesome/free-regular-svg-icons": {
+ "version": "5.15.4",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.4.tgz",
+ "integrity": "sha512-9VNNnU3CXHy9XednJ3wzQp6SwNwT3XaM26oS4Rp391GsxVYA+0oDR2J194YCIWf7jNRCYKjUCOduxdceLrx+xw==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "^0.2.36"
+ }
+ },
+ "@fortawesome/free-solid-svg-icons": {
+ "version": "5.15.4",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz",
+ "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "^0.2.36"
+ }
+ },
+ "@fortawesome/vue-fontawesome": {
+ "version": "3.0.0-5",
+ "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.0-5.tgz",
+ "integrity": "sha512-aNmBT4bOecrFsZTog1l6AJDQHPP3ocXV+WQ3Ogy8WZCqstB/ahfhH4CPu5i4N9Hw0MBKXqE+LX+NbUxcj8cVTw=="
+ },
+ "@hapi/address": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
+ "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==",
+ "dev": true
+ },
+ "@hapi/bourne": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz",
+ "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==",
+ "dev": true
+ },
+ "@hapi/hoek": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz",
+ "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==",
+ "dev": true
+ },
+ "@hapi/joi": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
+ "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
+ "dev": true,
+ "requires": {
+ "@hapi/address": "2.x.x",
+ "@hapi/bourne": "1.x.x",
+ "@hapi/hoek": "8.x.x",
+ "@hapi/topo": "3.x.x"
+ }
+ },
+ "@hapi/topo": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
+ "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
+ "dev": true,
+ "requires": {
+ "@hapi/hoek": "^8.3.0"
+ }
+ },
+ "@intervolga/optimize-cssnano-plugin": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz",
+ "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==",
+ "dev": true,
+ "requires": {
+ "cssnano": "^4.0.0",
+ "cssnano-preset-default": "^4.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "dependencies": {
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ }
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@oruga-ui/oruga-next": {
+ "version": "0.4.8",
+ "resolved": "https://registry.npmjs.org/@oruga-ui/oruga-next/-/oruga-next-0.4.8.tgz",
+ "integrity": "sha512-gIN26oHacUcJTeNfQEmgnDWSa0EKOAzGfBqLslFnHpTIHvow/NIiO5raI7N6SqNOvw0q+BU5PKw7AYC2ecAQRw=="
+ },
+ "@sindresorhus/is": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
+ "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==",
+ "dev": true
+ },
+ "@soda/friendly-errors-webpack-plugin": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz",
+ "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^3.0.0",
+ "error-stack-parser": "^2.0.6",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@soda/get-current-script": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz",
+ "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==",
+ "dev": true
+ },
+ "@szmarczak/http-timer": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
+ "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
+ "dev": true,
+ "requires": {
+ "defer-to-connect": "^2.0.0"
+ }
+ },
+ "@tauri-apps/api": {
+ "version": "1.0.0-beta.8",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.0.0-beta.8.tgz",
+ "integrity": "sha512-a56lXB7XvQ4+fKtT0pxpkjTSKhyrQ1Vmjyvt2ox3mT9xw3l7s8IOKHJ1WuqW6TA6xdoy3Cyja3Z3prw8hflS7g=="
+ },
+ "@tauri-apps/cli": {
+ "version": "1.0.0-beta.10",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-1.0.0-beta.10.tgz",
+ "integrity": "sha512-T0cvV5Y5vCeEw6tQ7DfuGhXxxe26AwW9i3oYT/AQZlwrLG9Xk02Pp0/lKqd/WeddE3X/IFfSm8YMRCz3VElIWQ==",
+ "dev": true,
+ "requires": {
+ "@tauri-apps/toml": "2.2.4",
+ "chalk": "4.1.2",
+ "cross-env": "7.0.3",
+ "cross-spawn": "7.0.3",
+ "fs-extra": "10.0.0",
+ "global-agent": "3.0.0",
+ "got": "11.8.2",
+ "imagemin": "8.0.1",
+ "imagemin-optipng": "8.0.0",
+ "imagemin-zopfli": "7.0.0",
+ "inquirer": "8.1.2",
+ "is-png": "3.0.0",
+ "minimist": "1.2.5",
+ "ms": "2.1.3",
+ "png2icons": "2.0.1",
+ "read-chunk": "3.2.0",
+ "semver": "7.3.5",
+ "sharp": "0.28.3",
+ "update-notifier": "5.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "fs-extra": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
+ "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.2.tgz",
+ "integrity": "sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.1",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.21",
+ "mute-stream": "0.0.8",
+ "ora": "^5.3.0",
+ "run-async": "^2.4.0",
+ "rxjs": "^7.2.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "ora": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+ "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+ "dev": true,
+ "requires": {
+ "bl": "^4.1.0",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-spinners": "^2.5.0",
+ "is-interactive": "^1.0.0",
+ "is-unicode-supported": "^0.1.0",
+ "log-symbols": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "rxjs": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz",
+ "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==",
+ "dev": true,
+ "requires": {
+ "tslib": "~2.1.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "tslib": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
+ "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
+ "dev": true
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "@tauri-apps/toml": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/@tauri-apps/toml/-/toml-2.2.4.tgz",
+ "integrity": "sha512-NJV/pdgJObDlDWi5+MTHZ2qyNvdL0dlHqQ72nzQYXWbW1LHMPXgCJYl0pLqL1XxxLtxtInYbtVCGVAcwhGxdkw==",
+ "dev": true
+ },
+ "@tokenizer/token": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
+ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==",
+ "dev": true
+ },
+ "@types/body-parser": {
+ "version": "1.19.2",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
+ "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
+ "dev": true,
+ "requires": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/cacheable-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
+ "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==",
+ "dev": true,
+ "requires": {
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "*",
+ "@types/node": "*",
+ "@types/responselike": "*"
+ }
+ },
+ "@types/connect": {
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
+ "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/connect-history-api-fallback": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz",
+ "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==",
+ "dev": true,
+ "requires": {
+ "@types/express-serve-static-core": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/express": {
+ "version": "4.17.13",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
+ "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==",
+ "dev": true,
+ "requires": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.18",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "@types/express-serve-static-core": {
+ "version": "4.17.25",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.25.tgz",
+ "integrity": "sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*"
+ }
+ },
+ "@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/http-cache-semantics": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
+ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
+ "dev": true
+ },
+ "@types/http-proxy": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz",
+ "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
+ "dev": true
+ },
+ "@types/keyv": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz",
+ "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
+ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+ "dev": true
+ },
+ "@types/minimist": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
+ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "16.11.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz",
+ "integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==",
+ "dev": true
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
+ "@types/q": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz",
+ "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==",
+ "dev": true
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
+ "dev": true
+ },
+ "@types/range-parser": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
+ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
+ "dev": true
+ },
+ "@types/responselike": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
+ "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/serve-static": {
+ "version": "1.13.10",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz",
+ "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==",
+ "dev": true,
+ "requires": {
+ "@types/mime": "^1",
+ "@types/node": "*"
+ }
+ },
+ "@types/source-list-map": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
+ "dev": true
+ },
+ "@types/tapable": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz",
+ "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==",
+ "dev": true
+ },
+ "@types/uglify-js": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz",
+ "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "@types/webpack": {
+ "version": "4.41.32",
+ "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz",
+ "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/tapable": "^1",
+ "@types/uglify-js": "*",
+ "@types/webpack-sources": "*",
+ "anymatch": "^3.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "@types/webpack-dev-server": {
+ "version": "3.11.6",
+ "resolved": "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz",
+ "integrity": "sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==",
+ "dev": true,
+ "requires": {
+ "@types/connect-history-api-fallback": "*",
+ "@types/express": "*",
+ "@types/serve-static": "*",
+ "@types/webpack": "^4",
+ "http-proxy-middleware": "^1.0.0"
+ }
+ },
+ "@types/webpack-sources": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz",
+ "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/source-list-map": "*",
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true
+ }
+ }
+ },
+ "@vue/babel-helper-vue-jsx-merge-props": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz",
+ "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==",
+ "dev": true
+ },
+ "@vue/babel-helper-vue-transform-on": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz",
+ "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==",
+ "dev": true
+ },
+ "@vue/babel-plugin-jsx": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz",
+ "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.0.0",
+ "@babel/template": "^7.0.0",
+ "@babel/traverse": "^7.0.0",
+ "@babel/types": "^7.0.0",
+ "@vue/babel-helper-vue-transform-on": "^1.0.2",
+ "camelcase": "^6.0.0",
+ "html-tags": "^3.1.0",
+ "svg-tags": "^1.0.0"
+ }
+ },
+ "@vue/babel-plugin-transform-vue-jsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz",
+ "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+ "html-tags": "^2.0.0",
+ "lodash.kebabcase": "^4.1.1",
+ "svg-tags": "^1.0.0"
+ },
+ "dependencies": {
+ "html-tags": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
+ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/babel-preset-app": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.5.15.tgz",
+ "integrity": "sha512-J+YttzvwRfV1BPczf8r3qCevznYk+jh531agVF+5EYlHF4Sgh/cGXTz9qkkiux3LQgvhEGXgmCteg1n38WuuKg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.0",
+ "@babel/helper-compilation-targets": "^7.9.6",
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/plugin-proposal-class-properties": "^7.8.3",
+ "@babel/plugin-proposal-decorators": "^7.8.3",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-jsx": "^7.8.3",
+ "@babel/plugin-transform-runtime": "^7.11.0",
+ "@babel/preset-env": "^7.11.0",
+ "@babel/runtime": "^7.11.0",
+ "@vue/babel-plugin-jsx": "^1.0.3",
+ "@vue/babel-preset-jsx": "^1.2.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3",
+ "core-js": "^3.6.5",
+ "core-js-compat": "^3.6.5",
+ "semver": "^6.1.0"
+ }
+ },
+ "@vue/babel-preset-jsx": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz",
+ "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==",
+ "dev": true,
+ "requires": {
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+ "@vue/babel-sugar-composition-api-inject-h": "^1.2.1",
+ "@vue/babel-sugar-composition-api-render-instance": "^1.2.4",
+ "@vue/babel-sugar-functional-vue": "^1.2.2",
+ "@vue/babel-sugar-inject-h": "^1.2.2",
+ "@vue/babel-sugar-v-model": "^1.2.3",
+ "@vue/babel-sugar-v-on": "^1.2.3"
+ }
+ },
+ "@vue/babel-sugar-composition-api-inject-h": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz",
+ "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-composition-api-render-instance": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz",
+ "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-functional-vue": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz",
+ "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-inject-h": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz",
+ "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@vue/babel-sugar-v-model": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz",
+ "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+ "camelcase": "^5.0.0",
+ "html-tags": "^2.0.0",
+ "svg-tags": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "html-tags": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
+ "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/babel-sugar-v-on": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz",
+ "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-jsx": "^7.2.0",
+ "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+ "camelcase": "^5.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
+ }
+ },
+ "@vue/cli-overlay": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.5.15.tgz",
+ "integrity": "sha512-0zI0kANAVmjFO2LWGUIzdGPMeE3+9k+KeRDXsUqB30YfRF7abjfiiRPq5BU9pOzlJbVdpRkisschBrvdJqDuDg==",
+ "dev": true
+ },
+ "@vue/cli-plugin-babel": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.15.tgz",
+ "integrity": "sha512-hBLrwYfFkHldEe34op/YNgPhpOWI5n5DB2Qt9I/1Epeif4M4iFaayrgjvOR9AVM6WbD3Yx7WCFszYpWrQZpBzQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.11.0",
+ "@vue/babel-preset-app": "^4.5.15",
+ "@vue/cli-shared-utils": "^4.5.15",
+ "babel-loader": "^8.1.0",
+ "cache-loader": "^4.1.0",
+ "thread-loader": "^2.1.3",
+ "webpack": "^4.0.0"
+ }
+ },
+ "@vue/cli-plugin-eslint": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.15.tgz",
+ "integrity": "sha512-/2Fl6wY/5bz3HD035oSnFRMsKNxDxU396KqBdpCQdwdvqk4mm6JAbXqihpcBRTNPeTO6w+LwGe6FE56PVbJdbg==",
+ "dev": true,
+ "requires": {
+ "@vue/cli-shared-utils": "^4.5.15",
+ "eslint-loader": "^2.2.1",
+ "globby": "^9.2.0",
+ "inquirer": "^7.1.0",
+ "webpack": "^4.0.0",
+ "yorkie": "^2.0.0"
+ }
+ },
+ "@vue/cli-plugin-router": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.15.tgz",
+ "integrity": "sha512-q7Y6kP9b3k55Ca2j59xJ7XPA6x+iSRB+N4ac0ZbcL1TbInVQ4j5wCzyE+uqid40hLy4fUdlpl4X9fHJEwuVxPA==",
+ "dev": true,
+ "requires": {
+ "@vue/cli-shared-utils": "^4.5.15"
+ }
+ },
+ "@vue/cli-plugin-vuex": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.15.tgz",
+ "integrity": "sha512-fqap+4HN+w+InDxlA3hZTOGE0tzBTgXhKLoDydhywqgmhQ1D9JA6Feh94ze6tG8DsWX58/ujYUqA8jAz17FJtg==",
+ "dev": true
+ },
+ "@vue/cli-service": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.5.15.tgz",
+ "integrity": "sha512-sFWnLYVCn4zRfu45IcsIE9eXM0YpDV3S11vlM2/DVbIPAGoYo5ySpSof6aHcIvkeGsIsrHFpPHzNvDZ/efs7jA==",
+ "dev": true,
+ "requires": {
+ "@intervolga/optimize-cssnano-plugin": "^1.0.5",
+ "@soda/friendly-errors-webpack-plugin": "^1.7.1",
+ "@soda/get-current-script": "^1.0.0",
+ "@types/minimist": "^1.2.0",
+ "@types/webpack": "^4.0.0",
+ "@types/webpack-dev-server": "^3.11.0",
+ "@vue/cli-overlay": "^4.5.15",
+ "@vue/cli-plugin-router": "^4.5.15",
+ "@vue/cli-plugin-vuex": "^4.5.15",
+ "@vue/cli-shared-utils": "^4.5.15",
+ "@vue/component-compiler-utils": "^3.1.2",
+ "@vue/preload-webpack-plugin": "^1.1.0",
+ "@vue/web-component-wrapper": "^1.2.0",
+ "acorn": "^7.4.0",
+ "acorn-walk": "^7.1.1",
+ "address": "^1.1.2",
+ "autoprefixer": "^9.8.6",
+ "browserslist": "^4.12.0",
+ "cache-loader": "^4.1.0",
+ "case-sensitive-paths-webpack-plugin": "^2.3.0",
+ "cli-highlight": "^2.1.4",
+ "clipboardy": "^2.3.0",
+ "cliui": "^6.0.0",
+ "copy-webpack-plugin": "^5.1.1",
+ "css-loader": "^3.5.3",
+ "cssnano": "^4.1.10",
+ "debug": "^4.1.1",
+ "default-gateway": "^5.0.5",
+ "dotenv": "^8.2.0",
+ "dotenv-expand": "^5.1.0",
+ "file-loader": "^4.2.0",
+ "fs-extra": "^7.0.1",
+ "globby": "^9.2.0",
+ "hash-sum": "^2.0.0",
+ "html-webpack-plugin": "^3.2.0",
+ "launch-editor-middleware": "^2.2.1",
+ "lodash.defaultsdeep": "^4.6.1",
+ "lodash.mapvalues": "^4.6.0",
+ "lodash.transform": "^4.6.0",
+ "mini-css-extract-plugin": "^0.9.0",
+ "minimist": "^1.2.5",
+ "pnp-webpack-plugin": "^1.6.4",
+ "portfinder": "^1.0.26",
+ "postcss-loader": "^3.0.0",
+ "ssri": "^8.0.1",
+ "terser-webpack-plugin": "^1.4.4",
+ "thread-loader": "^2.1.3",
+ "url-loader": "^2.2.0",
+ "vue-loader": "^15.9.2",
+ "vue-loader-v16": "npm:vue-loader@^16.1.0",
+ "vue-style-loader": "^4.1.2",
+ "webpack": "^4.0.0",
+ "webpack-bundle-analyzer": "^3.8.0",
+ "webpack-chain": "^6.4.0",
+ "webpack-dev-server": "^3.11.0",
+ "webpack-merge": "^4.2.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "optional": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "optional": true
+ },
+ "loader-utils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
+ "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "vue-loader-v16": {
+ "version": "npm:vue-loader@16.8.3",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
+ "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "hash-sum": "^2.0.0",
+ "loader-utils": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@vue/cli-shared-utils": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.15.tgz",
+ "integrity": "sha512-SKaej9hHzzjKSOw1NlFmc6BSE0vcqUQMQiv1cxQ2DhVyy4QxZXBmzmiLBUBe+hYZZs1neXW7n//udeN9bCAY+Q==",
+ "dev": true,
+ "requires": {
+ "@hapi/joi": "^15.0.1",
+ "chalk": "^2.4.2",
+ "execa": "^1.0.0",
+ "launch-editor": "^2.2.1",
+ "lru-cache": "^5.1.1",
+ "node-ipc": "^9.1.1",
+ "open": "^6.3.0",
+ "ora": "^3.4.0",
+ "read-pkg": "^5.1.1",
+ "request": "^2.88.2",
+ "semver": "^6.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "@vue/compiler-core": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.22.tgz",
+ "integrity": "sha512-uAkovrVeTcjzpiM4ECmVaMrv/bjdgAaLzvjcGqQPBEyUrcqsCgccT9fHJ/+hWVGhyMahmBwLqcn4guULNx7sdw==",
+ "requires": {
+ "@babel/parser": "^7.15.0",
+ "@vue/shared": "3.2.22",
+ "estree-walker": "^2.0.2",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.22.tgz",
+ "integrity": "sha512-VZdsw/VuO1ODs8K7NQwnMQzKITDkIFlYYC03SVnunuf6eNRxBPEonSyqbWNoo6qNaHAEBTG6VVcZC5xC9bAx1g==",
+ "requires": {
+ "@vue/compiler-core": "3.2.22",
+ "@vue/shared": "3.2.22"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.22.tgz",
+ "integrity": "sha512-tWRQ5ge1tsTDhUwHgueicKJ8rYm6WUVAPTaIpFW3GSwZKcOEJ2rXdfkHFShNVGupeRALz2ET2H84OL0GeRxY0A==",
+ "requires": {
+ "@babel/parser": "^7.15.0",
+ "@vue/compiler-core": "3.2.22",
+ "@vue/compiler-dom": "3.2.22",
+ "@vue/compiler-ssr": "3.2.22",
+ "@vue/ref-transform": "3.2.22",
+ "@vue/shared": "3.2.22",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7",
+ "postcss": "^8.1.10",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "postcss": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.1.tgz",
+ "integrity": "sha512-WqLs/TTzXdG+/A4ZOOK9WDZiikrRaiA+eoEb/jz2DT9KUhMNHgP7yKPO8vwi62ZCsb703Gwb7BMZwDzI54Y2Ag==",
+ "requires": {
+ "nanoid": "^3.1.30",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.1"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.22.tgz",
+ "integrity": "sha512-Cl6aoLJtXzzBkk1sKod8S0WBJLts3+ugVC91d22gGpbkw/64WnF12tOZi7Rg54PPLi1NovqyNWPsLH/SAFcu+w==",
+ "requires": {
+ "@vue/compiler-dom": "3.2.22",
+ "@vue/shared": "3.2.22"
+ }
+ },
+ "@vue/component-compiler-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
+ "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==",
+ "dev": true,
+ "requires": {
+ "consolidate": "^0.15.1",
+ "hash-sum": "^1.0.2",
+ "lru-cache": "^4.1.2",
+ "merge-source-map": "^1.1.0",
+ "postcss": "^7.0.36",
+ "postcss-selector-parser": "^6.0.2",
+ "prettier": "^1.18.2 || ^2.0.0",
+ "source-map": "~0.6.1",
+ "vue-template-es2015-compiler": "^1.9.0"
+ },
+ "dependencies": {
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "@vue/devtools-api": {
+ "version": "6.0.0-beta.20.1",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.0.0-beta.20.1.tgz",
+ "integrity": "sha512-R2rfiRY+kZugzWh9ZyITaovx+jpU4vgivAEAiz80kvh3yviiTU3CBuGuyWpSwGz9/C7TkSWVM/FtQRGlZ16n8Q=="
+ },
+ "@vue/preload-webpack-plugin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz",
+ "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==",
+ "dev": true
+ },
+ "@vue/reactivity": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.22.tgz",
+ "integrity": "sha512-xNkLAItjI0xB+lFeDgKCrSItmrHTaAzSnt8LmdSCPQnDyarmzbi/u4ESQnckWvlL7lSRKiEaOvblaNyqAa7OnQ==",
+ "requires": {
+ "@vue/shared": "3.2.22"
+ }
+ },
+ "@vue/ref-transform": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.22.tgz",
+ "integrity": "sha512-qalVWbq5xWWxLZ0L9OroBg/JZhzavQuCcDXblfErxyDEH6Xc5gIJ4feo1SVCICFzhAUgLgQTdSFLpgjBawbFpw==",
+ "requires": {
+ "@babel/parser": "^7.15.0",
+ "@vue/compiler-core": "3.2.22",
+ "@vue/shared": "3.2.22",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7"
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.22.tgz",
+ "integrity": "sha512-e7WOC55wmHPvmoVUk9VBe/Z9k5bJfWJfVIlkUkiADJn0bOgQD29oh/GS14Kb3aEJXIHLI17Em6+HxNut1sIh7Q==",
+ "requires": {
+ "@vue/reactivity": "3.2.22",
+ "@vue/shared": "3.2.22"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.22.tgz",
+ "integrity": "sha512-w7VHYJoliLRTLc5beN77wxuOjla4v9wr2FF22xpZFYBmH4U1V7HkYhoHc1BTuNghI15CXT1tNIMhibI1nrQgdw==",
+ "requires": {
+ "@vue/runtime-core": "3.2.22",
+ "@vue/shared": "3.2.22",
+ "csstype": "^2.6.8"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.22.tgz",
+ "integrity": "sha512-jCwbQgKPXiXoH9VS9F7K+gyEvEMrjutannwEZD1R8fQ9szmOTqC+RRbIY3Uf2ibQjZtZ8DV9a4FjxICvd9zZlQ==",
+ "requires": {
+ "@vue/compiler-ssr": "3.2.22",
+ "@vue/shared": "3.2.22"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.22.tgz",
+ "integrity": "sha512-qWVav014mpjEtbWbEgl0q9pEyrrIySKum8UVYjwhC6njrKzknLZPvfuYdQyVbApsqr94tf/3dP4pCuZmmjdCWQ=="
+ },
+ "@vue/web-component-wrapper": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
+ "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==",
+ "dev": true
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+ "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+ "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+ "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+ "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+ "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+ "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+ "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+ "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
+ "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
+ "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
+ "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
+ "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
+ "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/helper-wasm-section": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-opt": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
+ "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
+ "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
+ "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+ "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-code-frame": "1.9.0",
+ "@webassemblyjs/helper-fsm": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+ "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
+ "CBuffer": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/CBuffer/-/CBuffer-2.2.0.tgz",
+ "integrity": "sha512-dbfGsL/kaEA07tNX4NdUPwToq/elfc+4IbDnq5INOl+LmYlaAqfTXqwnDCfvUeYtO78Ts2WhaCOUn3bSZgDwZA=="
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "dev": true
+ },
+ "address": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz",
+ "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "dev": true
+ },
+ "ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "ansi-align": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
+ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.1.0"
+ }
+ },
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ }
+ },
+ "ansi-html-community": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
+ "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true
+ },
+ "archive-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
+ "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
+ "dev": true,
+ "requires": {
+ "file-type": "^4.2.0"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
+ "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
+ "dev": true
+ }
+ }
+ },
+ "are-we-there-yet": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
+ "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "safer-buffer": "^2.1.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "autoprefixer": {
+ "version": "9.8.8",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
+ "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.12.0",
+ "caniuse-lite": "^1.0.30001109",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "picocolors": "^0.2.1",
+ "postcss": "^7.0.32",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
+ "dev": true
+ },
+ "babel-eslint": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
+ "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0",
+ "eslint-visitor-keys": "^1.0.0",
+ "resolve": "^1.12.0"
+ }
+ },
+ "babel-loader": {
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
+ "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^3.3.1",
+ "loader-utils": "^1.4.0",
+ "make-dir": "^3.1.0",
+ "schema-utils": "^2.6.5"
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
+ "dev": true,
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-plugin-polyfill-corejs2": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz",
+ "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.13.11",
+ "@babel/helper-define-polyfill-provider": "^0.3.0",
+ "semver": "^6.1.1"
+ }
+ },
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz",
+ "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.3.0",
+ "core-js-compat": "^3.18.0"
+ }
+ },
+ "babel-plugin-polyfill-regenerator": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz",
+ "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.3.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "bfj": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
+ "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.5",
+ "check-types": "^8.0.3",
+ "hoopy": "^0.1.4",
+ "tryer": "^1.0.1"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "bin-build": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz",
+ "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==",
+ "dev": true,
+ "requires": {
+ "decompress": "^4.0.0",
+ "download": "^6.2.2",
+ "execa": "^0.7.0",
+ "p-map-series": "^1.0.0",
+ "tempfile": "^2.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "bin-check": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
+ "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "executable": "^4.1.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "bin-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz",
+ "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "find-versions": "^3.0.0"
+ }
+ },
+ "bin-version-check": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz",
+ "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==",
+ "dev": true,
+ "requires": {
+ "bin-version": "^3.0.0",
+ "semver": "^5.6.0",
+ "semver-truncate": "^1.1.2"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "bin-wrapper": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
+ "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
+ "dev": true,
+ "requires": {
+ "bin-check": "^4.1.0",
+ "bin-version-check": "^4.0.0",
+ "download": "^7.1.0",
+ "import-lazy": "^3.1.0",
+ "os-filter-obj": "^2.0.0",
+ "pify": "^4.0.1"
+ },
+ "dependencies": {
+ "@sindresorhus/is": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
+ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==",
+ "dev": true
+ },
+ "cacheable-request": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
+ "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
+ "dev": true,
+ "requires": {
+ "clone-response": "1.0.2",
+ "get-stream": "3.0.0",
+ "http-cache-semantics": "3.8.1",
+ "keyv": "3.0.0",
+ "lowercase-keys": "1.0.0",
+ "normalize-url": "2.0.1",
+ "responselike": "1.0.2"
+ },
+ "dependencies": {
+ "lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+ "dev": true
+ }
+ }
+ },
+ "decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "download": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
+ "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
+ "dev": true,
+ "requires": {
+ "archive-type": "^4.0.0",
+ "caw": "^2.0.1",
+ "content-disposition": "^0.5.2",
+ "decompress": "^4.2.0",
+ "ext-name": "^5.0.0",
+ "file-type": "^8.1.0",
+ "filenamify": "^2.0.0",
+ "get-stream": "^3.0.0",
+ "got": "^8.3.1",
+ "make-dir": "^1.2.0",
+ "p-event": "^2.1.0",
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "file-type": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
+ "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "got": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
+ "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^0.7.0",
+ "cacheable-request": "^2.1.1",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "into-stream": "^3.1.0",
+ "is-retry-allowed": "^1.1.0",
+ "isurl": "^1.0.0-alpha5",
+ "lowercase-keys": "^1.0.0",
+ "mimic-response": "^1.0.0",
+ "p-cancelable": "^0.4.0",
+ "p-timeout": "^2.0.1",
+ "pify": "^3.0.0",
+ "safe-buffer": "^5.1.1",
+ "timed-out": "^4.0.1",
+ "url-parse-lax": "^3.0.0",
+ "url-to-options": "^1.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==",
+ "dev": true
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+ "dev": true
+ },
+ "keyv": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
+ "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-url": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
+ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^2.0.0",
+ "query-string": "^5.0.1",
+ "sort-keys": "^2.0.0"
+ }
+ },
+ "p-cancelable": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
+ "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
+ "dev": true
+ },
+ "p-event": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz",
+ "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
+ "dev": true,
+ "requires": {
+ "p-timeout": "^2.0.1"
+ }
+ },
+ "p-timeout": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+ "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+ "dev": true,
+ "requires": {
+ "p-finally": "^1.0.0"
+ }
+ },
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true
+ },
+ "query-string": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
+ "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
+ "dev": true,
+ "requires": {
+ "decode-uri-component": "^0.2.0",
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^1.0.0"
+ }
+ },
+ "sort-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "optional": true
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "bl": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
+ "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
+ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ }
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boolean": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.4.tgz",
+ "integrity": "sha512-3hx0kwU3uzG6ReQ3pnaFQPSktpBw6RHN3/ivDKEuU8g1XSfafowyvDnadjv1xp8IZqhtSukxlwv9bF6FhX8m0w==",
+ "dev": true
+ },
+ "boxen": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
+ "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
+ "dev": true,
+ "requires": {
+ "ansi-align": "^3.0.0",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.1.0",
+ "cli-boxes": "^2.2.1",
+ "string-width": "^4.2.2",
+ "type-fest": "^0.20.2",
+ "widest-line": "^3.1.0",
+ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
+ "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
+ "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.3",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "browserslist": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz",
+ "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001280",
+ "electron-to-chromium": "^1.3.896",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
+ },
+ "dependencies": {
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ }
+ }
+ },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "requires": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true
+ },
+ "buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "buffer-json": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz",
+ "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ },
+ "cacache": {
+ "version": "12.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
+ "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ },
+ "dependencies": {
+ "ssri": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
+ "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
+ "dev": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "cache-loader": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz",
+ "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==",
+ "dev": true,
+ "requires": {
+ "buffer-json": "^2.0.0",
+ "find-cache-dir": "^3.0.0",
+ "loader-utils": "^1.2.3",
+ "mkdirp": "^0.5.1",
+ "neo-async": "^2.6.1",
+ "schema-utils": "^2.0.0"
+ }
+ },
+ "cacheable-lookup": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
+ "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
+ "dev": true
+ },
+ "cacheable-request": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
+ "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
+ "dev": true,
+ "requires": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^4.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^6.0.1",
+ "responselike": "^2.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "dev": true
+ }
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "camelcase": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz",
+ "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ }
+ }
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001283",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz",
+ "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==",
+ "dev": true
+ },
+ "case-sensitive-paths-webpack-plugin": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
+ "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "caw": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
+ "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
+ "dev": true,
+ "requires": {
+ "get-proxy": "^2.0.0",
+ "isurl": "^1.0.0-alpha5",
+ "tunnel-agent": "^0.6.0",
+ "url-to-options": "^1.0.1"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "check-types": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz",
+ "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "optional": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "dev": true
+ },
+ "chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "clean-css": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
+ "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "cli-boxes": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
+ "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-highlight": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
+ "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.0.0",
+ "highlight.js": "^10.7.1",
+ "mz": "^2.4.0",
+ "parse5": "^5.1.1",
+ "parse5-htmlparser2-tree-adapter": "^6.0.0",
+ "yargs": "^16.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "cli-spinners": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
+ "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==",
+ "dev": true
+ },
+ "cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+ "dev": true
+ },
+ "clipboardy": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz",
+ "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==",
+ "dev": true,
+ "requires": {
+ "arch": "^2.1.1",
+ "execa": "^1.0.0",
+ "is-wsl": "^2.1.1"
+ }
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "dev": true,
+ "requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+ "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.3",
+ "color-string": "^1.6.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-string": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
+ "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "dev": true,
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "configstore": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
+ "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^3.0.0",
+ "unique-string": "^2.0.0",
+ "write-file-atomic": "^3.0.0",
+ "xdg-basedir": "^4.0.0"
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "console-stream": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz",
+ "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=",
+ "dev": true
+ },
+ "consolidate": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz",
+ "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.1.1"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "copy-webpack-plugin": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz",
+ "integrity": "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==",
+ "dev": true,
+ "requires": {
+ "cacache": "^12.0.3",
+ "find-cache-dir": "^2.1.0",
+ "glob-parent": "^3.1.0",
+ "globby": "^7.1.1",
+ "is-glob": "^4.0.1",
+ "loader-utils": "^1.2.3",
+ "minimatch": "^3.0.4",
+ "normalize-path": "^3.0.0",
+ "p-limit": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^4.0.0",
+ "webpack-log": "^2.0.0"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "globby": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
+ "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "dir-glob": "^2.0.0",
+ "glob": "^7.1.2",
+ "ignore": "^3.3.5",
+ "pify": "^3.0.0",
+ "slash": "^1.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ }
+ }
+ },
+ "core-js": {
+ "version": "3.19.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.1.tgz",
+ "integrity": "sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg=="
+ },
+ "core-js-compat": {
+ "version": "3.19.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz",
+ "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.17.6",
+ "semver": "7.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
+ "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.5.3"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-env": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+ "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.1"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "crypto-random-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
+ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
+ "dev": true
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true
+ },
+ "css-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-loader": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
+ "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "cssesc": "^3.0.0",
+ "icss-utils": "^4.1.1",
+ "loader-utils": "^1.2.3",
+ "normalize-path": "^3.0.0",
+ "postcss": "^7.0.32",
+ "postcss-modules-extract-imports": "^2.0.0",
+ "postcss-modules-local-by-default": "^3.0.2",
+ "postcss-modules-scope": "^2.2.0",
+ "postcss-modules-values": "^3.0.0",
+ "postcss-value-parser": "^4.1.0",
+ "schema-utils": "^2.7.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
+ }
+ },
+ "css-select": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
+ "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^5.0.0",
+ "domhandler": "^4.2.0",
+ "domutils": "^2.6.0",
+ "nth-check": "^2.0.0"
+ }
+ },
+ "css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
+ "dev": true
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.37",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
+ "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.4",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "css-what": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
+ "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true
+ },
+ "cssnano": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz",
+ "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.8",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz",
+ "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.1",
+ "postcss-colormin": "^4.0.3",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.2",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.11",
+ "postcss-merge-rules": "^4.0.3",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.2",
+ "postcss-minify-params": "^4.0.2",
+ "postcss-minify-selectors": "^4.0.2",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.2",
+ "postcss-normalize-positions": "^4.0.2",
+ "postcss-normalize-repeat-style": "^4.0.2",
+ "postcss-normalize-string": "^4.0.2",
+ "postcss-normalize-timing-functions": "^4.0.2",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.2",
+ "postcss-ordered-values": "^4.1.2",
+ "postcss-reduce-initial": "^4.0.3",
+ "postcss-reduce-transforms": "^4.0.2",
+ "postcss-svgo": "^4.0.3",
+ "postcss-unique-selectors": "^4.0.1"
+ }
+ },
+ "cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=",
+ "dev": true
+ },
+ "cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=",
+ "dev": true
+ },
+ "cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==",
+ "dev": true
+ },
+ "csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "dev": true,
+ "requires": {
+ "css-tree": "^1.1.2"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "csstype": {
+ "version": "2.6.19",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz",
+ "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ=="
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "cyclist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "decompress": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+ "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
+ "dev": true,
+ "requires": {
+ "decompress-tar": "^4.0.0",
+ "decompress-tarbz2": "^4.0.0",
+ "decompress-targz": "^4.0.0",
+ "decompress-unzip": "^4.0.1",
+ "graceful-fs": "^4.1.10",
+ "make-dir": "^1.0.0",
+ "pify": "^2.3.0",
+ "strip-dirs": "^2.0.0"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^3.1.0"
+ },
+ "dependencies": {
+ "mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "dev": true
+ }
+ }
+ },
+ "decompress-tar": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+ "dev": true,
+ "requires": {
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0",
+ "tar-stream": "^1.5.2"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "dev": true
+ }
+ }
+ },
+ "decompress-tarbz2": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+ "dev": true,
+ "requires": {
+ "decompress-tar": "^4.1.0",
+ "file-type": "^6.1.0",
+ "is-stream": "^1.1.0",
+ "seek-bzip": "^1.0.5",
+ "unbzip2-stream": "^1.0.9"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+ "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
+ "dev": true
+ }
+ }
+ },
+ "decompress-targz": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+ "dev": true,
+ "requires": {
+ "decompress-tar": "^4.1.1",
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "dev": true
+ }
+ }
+ },
+ "decompress-unzip": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+ "dev": true,
+ "requires": {
+ "file-type": "^3.8.0",
+ "get-stream": "^2.2.0",
+ "pify": "^2.3.0",
+ "yauzl": "^2.4.2"
+ },
+ "dependencies": {
+ "file-type": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+ "dev": true,
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
+ "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==",
+ "dev": true
+ },
+ "default-gateway": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz",
+ "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==",
+ "dev": true,
+ "requires": {
+ "execa": "^3.3.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "execa": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
+ "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "human-signals": "^1.1.1",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.0",
+ "onetime": "^5.1.0",
+ "p-finally": "^2.0.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "p-finally": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
+ "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "defer-to-connect": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
+ "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ }
+ },
+ "del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "dir-glob": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+ "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+ "dev": true,
+ "requires": {
+ "path-type": "^3.0.0"
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
+ "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+ "dev": true,
+ "requires": {
+ "utila": "~0.4"
+ }
+ },
+ "dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+ "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
+ "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.2.0"
+ }
+ },
+ "domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^2.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
+ "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
+ "dev": true
+ },
+ "dotenv-expand": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
+ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
+ "dev": true
+ },
+ "download": {
+ "version": "6.2.5",
+ "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz",
+ "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==",
+ "dev": true,
+ "requires": {
+ "caw": "^2.0.0",
+ "content-disposition": "^0.5.2",
+ "decompress": "^4.0.0",
+ "ext-name": "^5.0.0",
+ "file-type": "5.2.0",
+ "filenamify": "^2.0.0",
+ "get-stream": "^3.0.0",
+ "got": "^7.0.0",
+ "make-dir": "^1.0.0",
+ "p-event": "^1.0.0",
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "got": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz",
+ "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",
+ "dev": true,
+ "requires": {
+ "decompress-response": "^3.2.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-plain-obj": "^1.1.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "isurl": "^1.0.0-alpha5",
+ "lowercase-keys": "^1.0.0",
+ "p-cancelable": "^0.3.0",
+ "p-timeout": "^1.1.1",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "url-parse-lax": "^1.0.0",
+ "url-to-options": "^1.0.1"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "p-cancelable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
+ "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==",
+ "dev": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^1.0.1"
+ }
+ }
+ }
+ },
+ "duplexer": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
+ "dev": true
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "easy-stack": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz",
+ "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "ejs": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
+ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.1.tgz",
+ "integrity": "sha512-9ldvb6QMHiDpUNF1iSwBTiTT0qXEN+xIO5WlCJrC5gt0z74ofOiqR698vaJqYWnri0XZiF0YmnrFmGq/EmpGAA==",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
+ "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ }
+ }
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "error-stack-parser": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz",
+ "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==",
+ "dev": true,
+ "requires": {
+ "stackframe": "^1.1.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
+ "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.1",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "string.prototype.trimend": "^1.0.4",
+ "string.prototype.trimstart": "^1.0.4",
+ "unbox-primitive": "^1.0.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true
+ },
+ "escape-goat": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
+ "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "eslint": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
+ "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.10.0",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^1.4.3",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.1.2",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.0.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^7.0.0",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.14",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.3",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^6.1.2",
+ "strip-ansi": "^5.2.0",
+ "strip-json-comments": "^3.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "12.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.8.1"
+ }
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-loader": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
+ "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
+ "dev": true,
+ "requires": {
+ "loader-fs-cache": "^1.0.0",
+ "loader-utils": "^1.0.2",
+ "object-assign": "^4.0.1",
+ "object-hash": "^1.1.4",
+ "rimraf": "^2.6.1"
+ }
+ },
+ "eslint-plugin-vue": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz",
+ "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^2.1.0",
+ "natural-compare": "^1.4.0",
+ "semver": "^6.3.0",
+ "vue-eslint-parser": "^7.10.0"
+ },
+ "dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+ "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-jsx": "^5.2.0",
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "event-pubsub": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz",
+ "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "dev": true
+ },
+ "events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true
+ },
+ "eventsource": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz",
+ "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==",
+ "dev": true,
+ "requires": {
+ "original": "^1.0.0"
+ }
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "exec-buffer": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz",
+ "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "p-finally": "^1.0.0",
+ "pify": "^3.0.0",
+ "rimraf": "^2.5.4",
+ "tempfile": "^2.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "requires": {
+ "pify": "^2.2.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "dev": true
+ },
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ }
+ }
+ },
+ "ext-list": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
+ "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
+ "dev": true,
+ "requires": {
+ "mime-db": "^1.28.0"
+ }
+ },
+ "ext-name": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
+ "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
+ "dev": true,
+ "requires": {
+ "ext-list": "^2.0.0",
+ "sort-keys-length": "^1.0.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
+ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.1.2",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.3",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "faye-websocket": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
+ "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "figgy-pudding": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
+ "dev": true
+ },
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "file-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz",
+ "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.2.3",
+ "schema-utils": "^2.5.0"
+ }
+ },
+ "file-type": {
+ "version": "16.5.3",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz",
+ "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==",
+ "dev": true,
+ "requires": {
+ "readable-web-to-node-stream": "^3.0.0",
+ "strtok3": "^6.2.4",
+ "token-types": "^4.1.1"
+ }
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "dev": true,
+ "optional": true
+ },
+ "filename-reserved-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
+ "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
+ "dev": true
+ },
+ "filenamify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
+ "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
+ "dev": true,
+ "requires": {
+ "filename-reserved-regex": "^2.0.0",
+ "strip-outer": "^1.0.0",
+ "trim-repeated": "^1.0.0"
+ }
+ },
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "find-versions": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
+ "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
+ "dev": true,
+ "requires": {
+ "semver-regex": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "dev": true,
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "flatted": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
+ "dev": true
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.14.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
+ "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "get-proxy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
+ "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
+ "dev": true,
+ "requires": {
+ "npm-conf": "^1.1.0"
+ }
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "github-from-package": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "global-agent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
+ "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==",
+ "dev": true,
+ "requires": {
+ "boolean": "^3.0.1",
+ "es6-error": "^4.1.1",
+ "matcher": "^3.0.0",
+ "roarr": "^2.15.3",
+ "semver": "^7.3.2",
+ "serialize-error": "^7.0.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "global-dirs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
+ "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==",
+ "dev": true,
+ "requires": {
+ "ini": "2.0.0"
+ },
+ "dependencies": {
+ "ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
+ "dev": true
+ }
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "globalthis": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
+ "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3"
+ }
+ },
+ "globby": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
+ "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^1.0.2",
+ "dir-glob": "^2.2.2",
+ "fast-glob": "^2.2.6",
+ "glob": "^7.1.3",
+ "ignore": "^4.0.3",
+ "pify": "^4.0.1",
+ "slash": "^2.0.0"
+ }
+ },
+ "got": {
+ "version": "11.8.2",
+ "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
+ "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^4.0.0",
+ "@szmarczak/http-timer": "^4.0.5",
+ "@types/cacheable-request": "^6.0.1",
+ "@types/responselike": "^1.0.0",
+ "cacheable-lookup": "^5.0.3",
+ "cacheable-request": "^7.0.1",
+ "decompress-response": "^6.0.0",
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
+ "dev": true
+ },
+ "gzip-size": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
+ "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1",
+ "pify": "^4.0.1"
+ }
+ },
+ "handle-thing": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
+ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbol-support-x": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
+ "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
+ "dev": true
+ },
+ "has-to-string-tag-x": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
+ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
+ "dev": true,
+ "requires": {
+ "has-symbol-support-x": "^1.4.1"
+ }
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "has-yarn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
+ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
+ "dev": true
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
+ }
+ },
+ "hash-sum": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
+ "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
+ "dev": true
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
+ "dev": true
+ },
+ "highlight.js": {
+ "version": "10.7.3",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
+ "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hoopy": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
+ "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
+ }
+ },
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+ "dev": true
+ },
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+ "dev": true
+ },
+ "html-entities": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz",
+ "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==",
+ "dev": true
+ },
+ "html-minifier": {
+ "version": "3.5.21",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
+ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
+ "dev": true,
+ "requires": {
+ "camel-case": "3.0.x",
+ "clean-css": "4.2.x",
+ "commander": "2.17.x",
+ "he": "1.2.x",
+ "param-case": "2.1.x",
+ "relateurl": "0.2.x",
+ "uglify-js": "3.4.x"
+ }
+ },
+ "html-tags": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
+ "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
+ "dev": true
+ },
+ "html-webpack-plugin": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
+ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
+ "dev": true,
+ "requires": {
+ "html-minifier": "^3.2.3",
+ "loader-utils": "^0.2.16",
+ "lodash": "^4.17.3",
+ "pretty-error": "^2.0.2",
+ "tapable": "^1.0.0",
+ "toposort": "^1.0.0",
+ "util.promisify": "1.0.0"
+ },
+ "dependencies": {
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+ "dev": true,
+ "requires": {
+ "big.js": "^3.1.3",
+ "emojis-list": "^2.0.0",
+ "json5": "^0.5.0",
+ "object-assign": "^4.0.1"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
+ "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.0.0",
+ "domutils": "^2.5.2",
+ "entities": "^2.0.0"
+ }
+ },
+ "http-cache-semantics": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
+ "dev": true
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "http-parser-js": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz",
+ "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz",
+ "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==",
+ "dev": true,
+ "requires": {
+ "@types/http-proxy": "^1.17.5",
+ "http-proxy": "^1.18.1",
+ "is-glob": "^4.0.1",
+ "is-plain-obj": "^3.0.0",
+ "micromatch": "^4.0.2"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "http2-wrapper": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
+ "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
+ "dev": true,
+ "requires": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.0.0"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "human-signals": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-utils": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.14"
+ }
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "imagemin": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-8.0.1.tgz",
+ "integrity": "sha512-Q/QaPi+5HuwbZNtQRqUVk6hKacI6z9iWiCSQBisAv7uBynZwO7t1svkryKl7+iSQbkU/6t9DWnHz04cFs2WY7w==",
+ "dev": true,
+ "requires": {
+ "file-type": "^16.5.3",
+ "globby": "^12.0.0",
+ "graceful-fs": "^4.2.8",
+ "junk": "^3.1.0",
+ "p-pipe": "^4.0.0",
+ "replace-ext": "^2.0.0",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
+ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
+ "dev": true
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "fast-glob": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
+ "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globby": {
+ "version": "12.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz",
+ "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==",
+ "dev": true,
+ "requires": {
+ "array-union": "^3.0.1",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.7",
+ "ignore": "^5.1.8",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ },
+ "dependencies": {
+ "slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "dev": true
+ }
+ }
+ },
+ "ignore": {
+ "version": "5.1.9",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz",
+ "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ }
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "imagemin-optipng": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz",
+ "integrity": "sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==",
+ "dev": true,
+ "requires": {
+ "exec-buffer": "^3.0.0",
+ "is-png": "^2.0.0",
+ "optipng-bin": "^7.0.0"
+ },
+ "dependencies": {
+ "is-png": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz",
+ "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==",
+ "dev": true
+ }
+ }
+ },
+ "imagemin-zopfli": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/imagemin-zopfli/-/imagemin-zopfli-7.0.0.tgz",
+ "integrity": "sha512-nmffj58rVb0O3AlCZLBBVKGyZ5MYPZZfKxUhvA7bwPGougHl/F7EUKSse9jkgXjdvtJYG2ojJeh5N67mYgBM9g==",
+ "dev": true,
+ "requires": {
+ "exec-buffer": "^3.0.0",
+ "is-png": "^2.0.0",
+ "zopflipng-bin": "^6.0.0"
+ },
+ "dependencies": {
+ "is-png": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz",
+ "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==",
+ "dev": true
+ }
+ }
+ },
+ "import-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+ "dev": true,
+ "requires": {
+ "import-from": "^2.1.0"
+ }
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-from": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-lazy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
+ "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
+ "dev": true
+ },
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ }
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
+ "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.19",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.6.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+ "dev": true,
+ "requires": {
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
+ },
+ "dependencies": {
+ "default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
+ }
+ }
+ }
+ },
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "into-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
+ "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
+ "dev": true,
+ "requires": {
+ "from2": "^2.1.1",
+ "p-is-promise": "^1.1.0"
+ }
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
+ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.5.0"
+ }
+ },
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "dev": true,
+ "requires": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
+ "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true
+ },
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
+ "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
+ "dev": true,
+ "requires": {
+ "global-dirs": "^3.0.0",
+ "is-path-inside": "^3.0.2"
+ },
+ "dependencies": {
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-interactive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
+ "dev": true
+ },
+ "is-natural-number": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
+ "dev": true
+ },
+ "is-negative-zero": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
+ "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
+ "dev": true
+ },
+ "is-npm": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz",
+ "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-number-object": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
+ "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "dev": true
+ },
+ "is-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz",
+ "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "^2.1.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
+ },
+ "is-plain-obj": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
+ "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-png": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-png/-/is-png-3.0.0.tgz",
+ "integrity": "sha512-waa2qEuqgLjjYT14KOUQqAEIRRIv7ttkzPVctY/qv+IAKnzXf+JAPKQas50RgO0ECPDUG/iB1zQmwpyB9kkZtQ==",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
+ "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
+ "dev": true
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
+ "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-weakref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz",
+ "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
+ "is-yarn-global": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
+ "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "isurl": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
+ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+ "dev": true,
+ "requires": {
+ "has-to-string-tag-x": "^1.2.0",
+ "is-object": "^1.0.1"
+ }
+ },
+ "javascript-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
+ "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
+ "dev": true
+ },
+ "js-message": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz",
+ "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==",
+ "dev": true
+ },
+ "js-queue": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz",
+ "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==",
+ "dev": true,
+ "requires": {
+ "easy-stack": "^1.0.1"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+ "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "junk": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
+ "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
+ "dev": true
+ },
+ "keyv": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz",
+ "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true
+ },
+ "latest-version": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
+ "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
+ "dev": true,
+ "requires": {
+ "package-json": "^6.3.0"
+ }
+ },
+ "launch-editor": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz",
+ "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.0",
+ "shell-quote": "^1.6.1"
+ }
+ },
+ "launch-editor-middleware": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz",
+ "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==",
+ "dev": true,
+ "requires": {
+ "launch-editor": "^2.2.1"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "dependencies": {
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "loader-fs-cache": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
+ "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^0.1.1",
+ "mkdirp": "^0.5.1"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "mkdirp": "^0.5.1",
+ "pkg-dir": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0"
+ }
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+ "dev": true
+ },
+ "lodash.defaultsdeep": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
+ "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
+ "dev": true
+ },
+ "lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=",
+ "dev": true
+ },
+ "lodash.mapvalues": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
+ "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.transform": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz",
+ "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "logalot": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz",
+ "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=",
+ "dev": true,
+ "requires": {
+ "figures": "^1.3.5",
+ "squeak": "^1.0.0"
+ },
+ "dependencies": {
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ }
+ }
+ }
+ },
+ "loglevel": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz",
+ "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true
+ },
+ "lpad-align": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz",
+ "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "indent-string": "^2.1.0",
+ "longest": "^1.0.0",
+ "meow": "^3.3.0"
+ }
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "magic-string": {
+ "version": "0.25.7",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
+ "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+ "requires": {
+ "sourcemap-codec": "^1.4.4"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "matcher": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
+ "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^4.0.0"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ }
+ }
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+ "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
+ "dev": true
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "merge-source-map": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
+ "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.51.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true
+ },
+ "mini-css-extract-plugin": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz",
+ "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "normalize-url": "1.9.1",
+ "schema-utils": "^1.0.0",
+ "webpack-sources": "^1.1.0"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "minipass": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
+ "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "dev": true,
+ "requires": {
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "dev": true
+ },
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "requires": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "nan": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
+ "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
+ "dev": true,
+ "optional": true
+ },
+ "nanoid": {
+ "version": "3.1.30",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz",
+ "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ=="
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "napi-build-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.1"
+ }
+ },
+ "node-abi": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz",
+ "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==",
+ "dev": true,
+ "requires": {
+ "semver": "^5.4.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "node-addon-api": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
+ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
+ "dev": true
+ },
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true
+ },
+ "node-ipc": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz",
+ "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==",
+ "dev": true,
+ "requires": {
+ "event-pubsub": "4.3.0",
+ "js-message": "1.0.7",
+ "js-queue": "2.0.2"
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+ "dev": true,
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.1",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "^1.0.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "node-releases": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
+ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "npm-conf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+ "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+ "dev": true,
+ "requires": {
+ "config-chain": "^1.1.11",
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
+ "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-hash": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
+ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==",
+ "dev": true
+ },
+ "object-inspect": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
+ "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz",
+ "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "open": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
+ "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ },
+ "dependencies": {
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ }
+ }
+ },
+ "opener": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
+ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
+ "dev": true
+ },
+ "opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ },
+ "dependencies": {
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ }
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "optipng-bin": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.1.tgz",
+ "integrity": "sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==",
+ "dev": true,
+ "requires": {
+ "bin-build": "^3.0.0",
+ "bin-wrapper": "^4.0.0"
+ }
+ },
+ "ora": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
+ "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^2.0.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^5.2.0",
+ "wcwidth": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+ "dev": true,
+ "requires": {
+ "url-parse": "^1.4.3"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "os-filter-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
+ "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
+ "dev": true,
+ "requires": {
+ "arch": "^2.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-cancelable": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
+ "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
+ "dev": true
+ },
+ "p-event": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz",
+ "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=",
+ "dev": true,
+ "requires": {
+ "p-timeout": "^1.1.1"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-is-promise": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+ "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true
+ },
+ "p-map-series": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz",
+ "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=",
+ "dev": true,
+ "requires": {
+ "p-reduce": "^1.0.0"
+ }
+ },
+ "p-pipe": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-4.0.0.tgz",
+ "integrity": "sha512-HkPfFklpZQPUKBFXzKFB6ihLriIHxnmuQdK9WmLDwe4hf2PdhhfWT/FJa+pc3bA1ywvKXtedxIRmd4Y7BTXE4w==",
+ "dev": true
+ },
+ "p-reduce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
+ "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
+ "dev": true
+ },
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "dev": true,
+ "requires": {
+ "retry": "^0.12.0"
+ }
+ },
+ "p-timeout": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
+ "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
+ "dev": true,
+ "requires": {
+ "p-finally": "^1.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "package-json": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
+ "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
+ "dev": true,
+ "requires": {
+ "got": "^9.6.0",
+ "registry-auth-token": "^4.0.0",
+ "registry-url": "^5.0.0",
+ "semver": "^6.2.0"
+ },
+ "dependencies": {
+ "@sindresorhus/is": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
+ "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+ "dev": true
+ },
+ "@szmarczak/http-timer": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
+ "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "dev": true,
+ "requires": {
+ "defer-to-connect": "^1.0.1"
+ }
+ },
+ "cacheable-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
+ "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
+ "dev": true,
+ "requires": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^3.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^4.1.0",
+ "responselike": "^1.0.2"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
+ },
+ "decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "defer-to-connect": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
+ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
+ "dev": true
+ },
+ "got": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
+ "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^0.14.0",
+ "@szmarczak/http-timer": "^1.1.2",
+ "cacheable-request": "^6.0.0",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^4.1.0",
+ "lowercase-keys": "^1.0.1",
+ "mimic-response": "^1.0.1",
+ "p-cancelable": "^1.0.0",
+ "to-readable-stream": "^1.0.0",
+ "url-parse-lax": "^3.0.0"
+ },
+ "dependencies": {
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ }
+ }
+ },
+ "json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+ "dev": true
+ },
+ "keyv": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
+ "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "normalize-url": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
+ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
+ "dev": true
+ },
+ "p-cancelable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
+ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
+ "dev": true
+ },
+ "responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^1.0.0"
+ },
+ "dependencies": {
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "dev": true
+ },
+ "parallel-transform": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+ "dev": true,
+ "requires": {
+ "cyclist": "^1.0.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ }
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
+ "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^5.2.0",
+ "browserify-aes": "^1.0.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "parse5": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+ "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
+ "dev": true
+ },
+ "parse5-htmlparser2-tree-adapter": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+ "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
+ "dev": true,
+ "requires": {
+ "parse5": "^6.0.1"
+ },
+ "dependencies": {
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+ "dev": true
+ }
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "peek-readable": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.0.1.tgz",
+ "integrity": "sha512-7qmhptnR0WMSpxT5rMHG9bW/mYSR1uqaPFj2MHvT+y/aOUu6msJijpKt5SkTDKySwg65OWG2JwTMBlgcbwMHrQ==",
+ "dev": true
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
+ "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "dev": true
+ },
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "png2icons": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/png2icons/-/png2icons-2.0.1.tgz",
+ "integrity": "sha512-GDEQJr8OG4e6JMp7mABtXFSEpgJa1CCpbQiAR+EjhkHJHnUL9zPPtbOrjsMD8gUbikgv3j7x404b0YJsV3aVFA==",
+ "dev": true
+ },
+ "pnp-webpack-plugin": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz",
+ "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==",
+ "dev": true,
+ "requires": {
+ "ts-pnp": "^1.1.6"
+ }
+ },
+ "portfinder": {
+ "version": "1.0.28",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
+ "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "7.0.39",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
+ "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "dev": true,
+ "requires": {
+ "picocolors": "^0.2.1",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-calc": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz",
+ "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.27",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "postcss-colormin": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-load-config": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz",
+ "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "import-cwd": "^2.0.0"
+ }
+ },
+ "postcss-loader": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
+ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "postcss": "^7.0.0",
+ "postcss-load-config": "^2.0.0",
+ "schema-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+ "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+ "dev": true,
+ "requires": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-params": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
+ "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.5"
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz",
+ "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^4.1.1",
+ "postcss": "^7.0.32",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
+ "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^6.0.0"
+ }
+ },
+ "postcss-modules-values": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+ "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^4.0.0",
+ "postcss": "^7.0.6"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-normalize-display-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
+ "dev": true
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+ "dev": true,
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-svgo": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz",
+ "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==",
+ "dev": true,
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
+ "dev": true
+ },
+ "prebuild-install": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz",
+ "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==",
+ "dev": true,
+ "requires": {
+ "detect-libc": "^1.0.3",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^2.21.0",
+ "npmlog": "^4.0.1",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^3.0.3",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz",
+ "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==",
+ "dev": true,
+ "optional": true
+ },
+ "pretty-error": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
+ "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.20",
+ "renderkid": "^2.0.4"
+ }
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+ "dev": true
+ },
+ "proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "pupa": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
+ "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
+ "dev": true,
+ "requires": {
+ "escape-goat": "^2.0.0"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ }
+ }
+ },
+ "read-chunk": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz",
+ "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "with-open-file": "^0.1.6"
+ }
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readable-web-to-node-stream": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
+ "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^3.6.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ },
+ "dependencies": {
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz",
+ "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
+ "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
+ "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz",
+ "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^9.0.0",
+ "regjsgen": "^0.5.2",
+ "regjsparser": "^0.7.0",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.0.0"
+ }
+ },
+ "registry-auth-token": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
+ "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
+ "dev": true,
+ "requires": {
+ "rc": "^1.2.8"
+ }
+ },
+ "registry-url": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
+ "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
+ "dev": true,
+ "requires": {
+ "rc": "^1.2.8"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
+ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz",
+ "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "renderkid": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
+ "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
+ "dev": true,
+ "requires": {
+ "css-select": "^4.1.3",
+ "dom-converter": "^0.2.0",
+ "htmlparser2": "^6.1.0",
+ "lodash": "^4.17.21",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-alpn": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
+ "dev": true
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "responselike": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
+ "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^2.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+ "dev": true
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "roarr": {
+ "version": "2.15.4",
+ "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
+ "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
+ "dev": true,
+ "requires": {
+ "boolean": "^3.0.1",
+ "detect-node": "^2.0.4",
+ "globalthis": "^1.0.1",
+ "json-stringify-safe": "^5.0.1",
+ "semver-compare": "^1.0.0",
+ "sprintf-js": "^1.1.2"
+ },
+ "dependencies": {
+ "sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true
+ }
+ }
+ },
+ "run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "dev": true
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
+ "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.5",
+ "ajv": "^6.12.4",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
+ "seek-bzip": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
+ "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.8.1"
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.11",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz",
+ "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==",
+ "dev": true,
+ "requires": {
+ "node-forge": "^0.10.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true
+ },
+ "semver-diff": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
+ "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.3.0"
+ }
+ },
+ "semver-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
+ "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
+ "dev": true
+ },
+ "semver-truncate": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
+ "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
+ "dev": true,
+ "requires": {
+ "semver": "^5.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "serialize-error": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
+ "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.13.1"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "dev": true
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
+ "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "sharp": {
+ "version": "0.28.3",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz",
+ "integrity": "sha512-21GEP45Rmr7q2qcmdnjDkNP04Ooh5v0laGS5FDpojOO84D1DJwUijLiSq8XNNM6e8aGXYtoYRh3sVNdm8NodMA==",
+ "dev": true,
+ "requires": {
+ "color": "^3.1.3",
+ "detect-libc": "^1.0.3",
+ "node-addon-api": "^3.2.0",
+ "prebuild-install": "^6.1.2",
+ "semver": "^7.3.5",
+ "simple-get": "^3.1.0",
+ "tar-fs": "^2.1.1",
+ "tunnel-agent": "^0.6.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shell-quote": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
+ "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
+ "dev": true
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz",
+ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==",
+ "dev": true
+ },
+ "simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "dev": true
+ },
+ "simple-get": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz",
+ "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==",
+ "dev": true,
+ "requires": {
+ "decompress-response": "^4.2.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ },
+ "dependencies": {
+ "decompress-response": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^2.0.0"
+ }
+ },
+ "mimic-response": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+ "dev": true
+ }
+ }
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "dev": true
+ }
+ }
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sockjs": {
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz",
+ "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "^0.11.3",
+ "uuid": "^3.4.0",
+ "websocket-driver": "^0.7.4"
+ }
+ },
+ "sockjs-client": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz",
+ "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "^0.11.3",
+ "inherits": "^2.0.4",
+ "json3": "^3.3.3",
+ "url-parse": "^1.5.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ }
+ }
+ },
+ "sort-keys-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
+ "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
+ "dev": true,
+ "requires": {
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz",
+ "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA=="
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+ "dev": true
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
+ "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+ "dev": true
+ },
+ "spdy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+ "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "handle-thing": "^2.0.0",
+ "http-deceiver": "^1.2.7",
+ "select-hose": "^2.0.0",
+ "spdy-transport": "^3.0.0"
+ }
+ },
+ "spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "detect-node": "^2.0.4",
+ "hpack.js": "^2.1.6",
+ "obuf": "^1.1.2",
+ "readable-stream": "^3.0.6",
+ "wbuf": "^1.7.3"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "squeak": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz",
+ "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0",
+ "console-stream": "^0.1.1",
+ "lpad-align": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.1.1"
+ }
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "stackframe": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz",
+ "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
+ "dev": true
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
+ "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
+ "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-dirs": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+ "dev": true,
+ "requires": {
+ "is-natural-number": "^4.0.1"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "strip-outer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+ "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.2"
+ }
+ },
+ "strtok3": {
+ "version": "6.2.4",
+ "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.2.4.tgz",
+ "integrity": "sha512-GO8IcFF9GmFDvqduIspUBwCzCbqzegyVKIsSymcMgiZKeCfrN9SowtUoi8+b59WZMAjIzVZic/Ft97+pynR3Iw==",
+ "dev": true,
+ "requires": {
+ "@tokenizer/token": "^0.3.0",
+ "peek-readable": "^4.0.1"
+ }
+ },
+ "stylehacks": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
+ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz",
+ "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^5.2.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svg-tags": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+ "dev": true
+ },
+ "svgo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
+ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "coa": "^2.0.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "^0.1.1",
+ "css-tree": "1.0.0-alpha.37",
+ "csso": "^4.0.2",
+ "js-yaml": "^3.13.1",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.1.0",
+ "sax": "~1.2.4",
+ "stable": "^0.1.8",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ },
+ "dependencies": {
+ "css-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-what": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
+ "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==",
+ "dev": true
+ },
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ }
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ }
+ }
+ },
+ "table": {
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.10.2",
+ "lodash": "^4.17.14",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "dev": true
+ },
+ "tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dev": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ },
+ "dependencies": {
+ "bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "dev": true,
+ "requires": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ }
+ }
+ }
+ },
+ "tar-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+ "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+ "dev": true,
+ "requires": {
+ "bl": "^1.0.0",
+ "buffer-alloc": "^1.2.0",
+ "end-of-stream": "^1.0.0",
+ "fs-constants": "^1.0.0",
+ "readable-stream": "^2.3.0",
+ "to-buffer": "^1.1.1",
+ "xtend": "^4.0.0"
+ }
+ },
+ "temp-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+ "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+ "dev": true
+ },
+ "tempfile": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
+ "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
+ "dev": true,
+ "requires": {
+ "temp-dir": "^1.0.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "terser": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
+ "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
+ "dev": true,
+ "requires": {
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
+ "is-wsl": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^4.0.0",
+ "source-map": "^0.6.1",
+ "terser": "^4.1.2",
+ "webpack-sources": "^1.4.0",
+ "worker-farm": "^1.7.0"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "requires": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+ "dev": true,
+ "requires": {
+ "thenify": ">= 3.1.0 < 4"
+ }
+ },
+ "thread-loader": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz",
+ "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==",
+ "dev": true,
+ "requires": {
+ "loader-runner": "^2.3.1",
+ "loader-utils": "^1.1.0",
+ "neo-async": "^2.6.0"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "dev": true
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+ "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
+ "dev": true,
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-buffer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-readable-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
+ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
+ "dev": true
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
+ "token-types": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz",
+ "integrity": "sha512-hD+QyuUAyI2spzsI0B7gf/jJ2ggR4RjkAo37j3StuePhApJUwcWDjnHDOFdIWYSwNR28H14hpwm4EI+V1Ted1w==",
+ "dev": true,
+ "requires": {
+ "@tokenizer/token": "^0.3.0",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "toposort": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
+ "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-repeated": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+ "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.2"
+ }
+ },
+ "tryer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
+ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==",
+ "dev": true
+ },
+ "ts-pnp": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz",
+ "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "dev": true,
+ "requires": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
+ "uglify-js": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
+ "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.19.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "unbox-primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
+ "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has-bigints": "^1.0.1",
+ "has-symbols": "^1.0.2",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
+ "unbzip2-stream": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.2.1",
+ "through": "^2.3.8"
+ },
+ "dependencies": {
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ }
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ }
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dev": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unique-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
+ "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "^2.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true
+ },
+ "update-notifier": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz",
+ "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==",
+ "dev": true,
+ "requires": {
+ "boxen": "^5.0.0",
+ "chalk": "^4.1.0",
+ "configstore": "^5.0.1",
+ "has-yarn": "^2.1.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^2.0.0",
+ "is-installed-globally": "^0.4.0",
+ "is-npm": "^5.0.0",
+ "is-yarn-global": "^0.3.0",
+ "latest-version": "^5.1.0",
+ "pupa": "^2.1.1",
+ "semver": "^7.3.4",
+ "semver-diff": "^3.1.1",
+ "xdg-basedir": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^2.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "url-loader": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz",
+ "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^1.2.3",
+ "mime": "^2.4.4",
+ "schema-utils": "^2.5.0"
+ }
+ },
+ "url-parse": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz",
+ "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^2.0.0"
+ },
+ "dependencies": {
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true
+ }
+ }
+ },
+ "url-to-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
+ "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ }
+ }
+ },
+ "vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
+ "dev": true
+ },
+ "vue": {
+ "version": "3.2.22",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.22.tgz",
+ "integrity": "sha512-KD5nZpXVZquOC6926Xnp3zOvswrUyO9Rya7ZUoxWFQEjFDW4iACtwzubRB4Um2Om9kj6CaJOqAVRDSFlqLpdgw==",
+ "requires": {
+ "@vue/compiler-dom": "3.2.22",
+ "@vue/compiler-sfc": "3.2.22",
+ "@vue/runtime-dom": "3.2.22",
+ "@vue/server-renderer": "3.2.22",
+ "@vue/shared": "3.2.22"
+ }
+ },
+ "vue-eslint-parser": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz",
+ "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "eslint-scope": "^5.1.1",
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^6.2.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ }
+ }
+ },
+ "vue-hot-reload-api": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
+ "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
+ "dev": true
+ },
+ "vue-loader": {
+ "version": "15.9.8",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz",
+ "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==",
+ "dev": true,
+ "requires": {
+ "@vue/component-compiler-utils": "^3.1.0",
+ "hash-sum": "^1.0.2",
+ "loader-utils": "^1.1.0",
+ "vue-hot-reload-api": "^2.3.0",
+ "vue-style-loader": "^4.1.0"
+ },
+ "dependencies": {
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+ "dev": true
+ }
+ }
+ },
+ "vue-style-loader": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
+ "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==",
+ "dev": true,
+ "requires": {
+ "hash-sum": "^1.0.2",
+ "loader-utils": "^1.0.2"
+ },
+ "dependencies": {
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+ "dev": true
+ }
+ }
+ },
+ "vue-template-es2015-compiler": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
+ "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
+ "dev": true
+ },
+ "vuex": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz",
+ "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==",
+ "requires": {
+ "@vue/devtools-api": "^6.0.0-beta.11"
+ }
+ },
+ "watchpack": {
+ "version": "1.7.5",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
+ "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^3.4.1",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.1"
+ }
+ },
+ "watchpack-chokidar2": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
+ "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chokidar": "^2.1.8"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true,
+ "optional": true
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ }
+ }
+ },
+ "wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "webpack": {
+ "version": "4.46.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
+ "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/wasm-edit": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "acorn": "^6.4.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^4.5.0",
+ "eslint-scope": "^4.0.3",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.3",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.3",
+ "watchpack": "^1.7.4",
+ "webpack-sources": "^1.4.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
+ "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "webpack-bundle-analyzer": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz",
+ "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1",
+ "bfj": "^6.1.1",
+ "chalk": "^2.4.1",
+ "commander": "^2.18.0",
+ "ejs": "^2.6.1",
+ "express": "^4.16.3",
+ "filesize": "^3.6.1",
+ "gzip-size": "^5.0.0",
+ "lodash": "^4.17.19",
+ "mkdirp": "^0.5.1",
+ "opener": "^1.5.1",
+ "ws": "^6.0.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-chain": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz",
+ "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==",
+ "dev": true,
+ "requires": {
+ "deepmerge": "^1.5.2",
+ "javascript-stringify": "^2.0.1"
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
+ "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
+ "dev": true,
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ }
+ },
+ "webpack-dev-server": {
+ "version": "3.11.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz",
+ "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==",
+ "dev": true,
+ "requires": {
+ "ansi-html-community": "0.0.8",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.8",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.3.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.3",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.8",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.26",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.8",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "^0.3.21",
+ "sockjs-client": "^1.5.0",
+ "spdy": "^4.0.2",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "^13.3.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+ "dev": true,
+ "requires": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "webpack-merge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
+ "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.15"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
+ "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
+ "dev": true,
+ "requires": {
+ "http-parser-js": ">=0.5.1",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
+ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "requires": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "widest-line": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
+ "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.0.0"
+ }
+ },
+ "with-open-file": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz",
+ "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==",
+ "dev": true,
+ "requires": {
+ "p-finally": "^1.0.0",
+ "p-try": "^2.1.0",
+ "pify": "^4.0.1"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+ "dev": true,
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
+ "ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xdg-basedir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
+ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ },
+ "yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "yorkie": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz",
+ "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.8.0",
+ "is-ci": "^1.0.10",
+ "normalize-path": "^1.0.0",
+ "strip-indent": "^2.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "normalize-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
+ "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "zopflipng-bin": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/zopflipng-bin/-/zopflipng-bin-6.0.1.tgz",
+ "integrity": "sha512-+aybvXv/xafL6I67uSH5yLHrSy4/OaSOV9tniw4yZFIHpINXUcctVHE/WzHxOONrL2GHzJ8Fd4iDrNyaS6TVbg==",
+ "dev": true,
+ "requires": {
+ "bin-build": "^3.0.0",
+ "bin-wrapper": "^4.0.1",
+ "logalot": "^2.1.0"
+ }
+ }
+ }
+}
diff --git a/applications/launchpad/gui-vue/package.json b/applications/launchpad/gui-vue/package.json
new file mode 100644
index 0000000000..288b5ed967
--- /dev/null
+++ b/applications/launchpad/gui-vue/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "gui-vue",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "serve": "vue-cli-service serve",
+ "build": "vue-cli-service build",
+ "lint": "vue-cli-service lint",
+ "tauri": "tauri"
+ },
+ "dependencies": {
+ "@fortawesome/fontawesome-svg-core": "^1.2.36",
+ "@fortawesome/free-brands-svg-icons": "^5.15.4",
+ "@fortawesome/free-regular-svg-icons": "^5.15.4",
+ "@fortawesome/free-solid-svg-icons": "^5.15.4",
+ "@fortawesome/vue-fontawesome": "^3.0.0-5",
+ "@oruga-ui/oruga-next": "^0.4.8",
+ "@tauri-apps/api": "^1.0.0-beta.8",
+ "CBuffer": "^2.2.0",
+ "core-js": "^3.6.5",
+ "vue": "^3.0.0",
+ "vuex": "^4.0.2"
+ },
+ "devDependencies": {
+ "@tauri-apps/cli": "^1.0.0-beta.10",
+ "@vue/cli-plugin-babel": "~4.5.0",
+ "@vue/cli-plugin-eslint": "~4.5.0",
+ "@vue/cli-service": "~4.5.0",
+ "@vue/compiler-sfc": "^3.0.0",
+ "babel-eslint": "^10.1.0",
+ "eslint": "^6.7.2",
+ "eslint-plugin-vue": "^7.0.0"
+ },
+ "eslintConfig": {
+ "root": true,
+ "env": {
+ "node": true
+ },
+ "extends": [
+ "plugin:vue/vue3-essential",
+ "eslint:recommended"
+ ],
+ "parserOptions": {
+ "parser": "babel-eslint"
+ },
+ "rules": {}
+ },
+ "browserslist": [
+ "> 1%",
+ "last 2 versions",
+ "not dead"
+ ]
+}
diff --git a/applications/launchpad/gui-vue/public/favicon.ico b/applications/launchpad/gui-vue/public/favicon.ico
new file mode 100644
index 0000000000..df36fcfb72
Binary files /dev/null and b/applications/launchpad/gui-vue/public/favicon.ico differ
diff --git a/applications/launchpad/gui-vue/public/index.html b/applications/launchpad/gui-vue/public/index.html
new file mode 100644
index 0000000000..3e5a139621
--- /dev/null
+++ b/applications/launchpad/gui-vue/public/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+ <%= htmlWebpackPlugin.options.title %>
+
+
+
+ We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.
+
+
+
+
+
diff --git a/applications/launchpad/gui-vue/src/App.vue b/applications/launchpad/gui-vue/src/App.vue
new file mode 100644
index 0000000000..3c8efdf85b
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/App.vue
@@ -0,0 +1,44 @@
+
+
+ Tari Launchpad
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/applications/launchpad/gui-vue/src/assets/logo.png b/applications/launchpad/gui-vue/src/assets/logo.png
new file mode 100644
index 0000000000..f3d2503fc2
Binary files /dev/null and b/applications/launchpad/gui-vue/src/assets/logo.png differ
diff --git a/applications/launchpad/gui-vue/src/assets/material.css b/applications/launchpad/gui-vue/src/assets/material.css
new file mode 100644
index 0000000000..df6736e364
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/assets/material.css
@@ -0,0 +1,12183 @@
+/* Copyright 2021. The Tari Project */
+/* */
+/* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the */
+/* following conditions are met: */
+/* */
+/* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following */
+/* disclaimer. */
+/* */
+/* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the */
+/* following disclaimer in the documentation and/or other materials provided with the distribution. */
+/* */
+/* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote */
+/* products derived from this software without specific prior written permission. */
+/* */
+/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */
+/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
+/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
+/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR */
+/* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, */
+/* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE */
+/* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
+/* */
+
+.card {
+ font-size: .875rem;
+ font-weight: 400
+}
+
+/*!
+ * Bootstrap v4.0.0 (https://getbootstrap.com)
+ * Copyright 2011-2018 The Bootstrap Authors
+ * Copyright 2011-2018 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+:root {
+ --blue: #2196f3;
+ --indigo: #3f51b5;
+ --purple: #9c27b0;
+ --pink: #e91e63;
+ --red: #f44336;
+ --orange: #ff9800;
+ --yellow: #ffeb3b;
+ --green: #4caf50;
+ --teal: #009688;
+ --cyan: #00bcd4;
+ --white: #fff;
+ --gray: #6c757d;
+ --gray-dark: #343a40;
+ --primary: #009688;
+ --secondary: #6c757d;
+ --success: #4caf50;
+ --info: #03a9f4;
+ --warning: #ff5722;
+ --danger: #f44336;
+ --light: #f5f5f5;
+ --dark: #424242;
+ --breakpoint-xs: 0;
+ --breakpoint-sm: 576px;
+ --breakpoint-md: 768px;
+ --breakpoint-lg: 992px;
+ --breakpoint-xl: 1200px;
+ --font-family-sans-serif: "Roboto", "Helvetica", "Arial", sans-serif;
+ --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace
+}
+
+*, :after, :before {
+ box-sizing: border-box
+}
+
+html {
+ font-family: sans-serif;
+ line-height: 1.15;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+ -ms-overflow-style: scrollbar;
+ -webkit-tap-highlight-color: transparent
+}
+
+@-ms-viewport {
+ width: device-width
+}
+
+article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
+ display: block
+}
+
+body {
+ margin: 0;
+ font-family: Roboto, Helvetica, Arial, sans-serif;
+ font-size: 1rem;
+ line-height: 1.5;
+ color: #212529;
+ text-align: left;
+ background-color: #fafafa
+}
+
+[tabindex="-1"]:focus {
+ outline: 0 !important
+}
+
+hr {
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible
+}
+
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 0;
+ margin-bottom: .5rem
+}
+
+p {
+ margin-top: 0;
+ margin-bottom: 1rem
+}
+
+abbr[data-original-title], abbr[title] {
+ text-decoration: underline;
+ text-decoration: underline dotted;
+ cursor: help;
+ border-bottom: 0
+}
+
+address {
+ font-style: normal;
+ line-height: inherit
+}
+
+address, dl, ol, ul {
+ margin-bottom: 1rem
+}
+
+dl, ol, ul {
+ margin-top: 0
+}
+
+ol ol, ol ul, ul ol, ul ul {
+ margin-bottom: 0
+}
+
+dt {
+ font-weight: 700
+}
+
+dd {
+ margin-bottom: .5rem;
+ margin-left: 0
+}
+
+blockquote {
+ margin: 0 0 1rem
+}
+
+dfn {
+ font-style: italic
+}
+
+b, strong {
+ font-weight: bolder
+}
+
+small {
+ font-size: 80%
+}
+
+sub, sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline
+}
+
+sub {
+ bottom: -.25em
+}
+
+sup {
+ top: -.5em
+}
+
+a {
+ color: #009688;
+ text-decoration: none;
+ background-color: transparent;
+ -webkit-text-decoration-skip: objects
+}
+
+a:hover {
+ color: #004a43;
+ text-decoration: underline
+}
+
+a:not([href]):not([tabindex]), a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {
+ color: inherit;
+ text-decoration: none
+}
+
+a:not([href]):not([tabindex]):focus {
+ outline: 0
+}
+
+code, kbd, pre, samp {
+ font-family: monospace, monospace;
+ font-size: 1em
+}
+
+pre {
+ margin-top: 0;
+ margin-bottom: 1rem;
+ overflow: auto;
+ -ms-overflow-style: scrollbar
+}
+
+figure {
+ margin: 0 0 1rem
+}
+
+img {
+ vertical-align: middle;
+ border-style: none
+}
+
+svg:not(:root) {
+ overflow: hidden
+}
+
+table {
+ border-collapse: collapse
+}
+
+caption {
+ padding-top: .75rem;
+ padding-bottom: .75rem;
+ color: #6c757d;
+ text-align: left;
+ caption-side: bottom
+}
+
+th {
+ text-align: inherit
+}
+
+label {
+ display: inline-block;
+ margin-bottom: .5rem
+}
+
+button {
+ border-radius: 0
+}
+
+button:focus {
+ outline: 1px dotted;
+ outline: 5px auto -webkit-focus-ring-color
+}
+
+button, input, optgroup, select, textarea {
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit
+}
+
+button, input {
+ overflow: visible
+}
+
+button, select {
+ text-transform: none
+}
+
+[type=reset], [type=submit], button, html [type=button] {
+ -webkit-appearance: button
+}
+
+[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner {
+ padding: 0;
+ border-style: none
+}
+
+input[type=checkbox], input[type=radio] {
+ box-sizing: border-box;
+ padding: 0
+}
+
+input[type=date], input[type=datetime-local], input[type=month], input[type=time] {
+ -webkit-appearance: listbox
+}
+
+textarea {
+ overflow: auto;
+ resize: vertical
+}
+
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0
+}
+
+legend {
+ display: block;
+ width: 100%;
+ max-width: 100%;
+ padding: 0;
+ margin-bottom: .5rem;
+ font-size: 1.5rem;
+ line-height: inherit;
+ color: inherit;
+ white-space: normal
+}
+
+progress {
+ vertical-align: baseline
+}
+
+[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button {
+ height: auto
+}
+
+[type=search] {
+ outline-offset: -2px;
+ -webkit-appearance: none
+}
+
+[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration {
+ -webkit-appearance: none
+}
+
+::-webkit-file-upload-button {
+ font: inherit;
+ -webkit-appearance: button
+}
+
+output {
+ display: inline-block
+}
+
+summary {
+ display: list-item;
+ cursor: pointer
+}
+
+template {
+ display: none
+}
+
+[hidden] {
+ display: none !important
+}
+
+.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
+ margin-bottom: .5rem;
+ font-family: inherit;
+ font-weight: 400;
+ line-height: 1.2;
+ color: inherit
+}
+
+.h1, h1 {
+ font-size: 2.5rem
+}
+
+.h2, h2 {
+ font-size: 2rem
+}
+
+.h3, h3 {
+ font-size: 1.75rem
+}
+
+.h4, h4 {
+ font-size: 1.5rem
+}
+
+.h5, h5 {
+ font-size: 1.25rem
+}
+
+.h6, h6 {
+ font-size: 1rem
+}
+
+.lead {
+ font-size: 1.25rem;
+ font-weight: 300
+}
+
+.display-1 {
+ font-size: 7rem
+}
+
+.display-1, .display-2 {
+ font-weight: 300;
+ line-height: 1.2
+}
+
+.display-2 {
+ font-size: 3.5rem
+}
+
+.display-3 {
+ font-size: 2.8125rem
+}
+
+.display-3, .display-4 {
+ font-weight: 300;
+ line-height: 1.2
+}
+
+.display-4 {
+ font-size: 2.125rem
+}
+
+hr {
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+ border: 0;
+ border-top: 1px solid rgba(0, 0, 0, .1)
+}
+
+.small, small {
+ font-size: 80%;
+ font-weight: 400
+}
+
+.mark, mark {
+ padding: .2em;
+ background-color: #fcf8e3
+}
+
+.list-inline, .list-unstyled {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-inline-item {
+ display: inline-block
+}
+
+.list-inline-item:not(:last-child) {
+ margin-right: .5rem
+}
+
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase
+}
+
+.blockquote {
+ margin-bottom: 1rem;
+ font-size: 1.25rem
+}
+
+.blockquote-footer {
+ display: block;
+ font-size: 80%;
+ color: #6c757d
+}
+
+.blockquote-footer:before {
+ content: "\2014 \00A0"
+}
+
+.img-fluid, .img-thumbnail {
+ max-width: 100%;
+ height: auto
+}
+
+.img-thumbnail {
+ padding: .25rem;
+ background-color: #fafafa;
+ border: 1px solid #dee2e6;
+ border-radius: .125rem;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075)
+}
+
+.figure {
+ display: inline-block
+}
+
+.figure-img {
+ margin-bottom: .5rem;
+ line-height: 1
+}
+
+.figure-caption {
+ font-size: 90%;
+ color: #6c757d
+}
+
+code, kbd, pre, samp {
+ font-family: SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace
+}
+
+code {
+ font-size: 87.5%;
+ color: #e91e63;
+ word-break: break-word
+}
+
+a > code {
+ color: inherit
+}
+
+kbd {
+ padding: .2rem .4rem;
+ font-size: 87.5%;
+ color: #fff;
+ background-color: #212529;
+ border-radius: .0625rem;
+ box-shadow: inset 0 -.1rem 0 rgba(0, 0, 0, .25)
+}
+
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: 700;
+ box-shadow: none
+}
+
+pre {
+ display: block;
+ font-size: 87.5%;
+ color: #212529
+}
+
+pre code {
+ font-size: inherit;
+ color: inherit;
+ word-break: normal
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll
+}
+
+.container {
+ width: 100%;
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto
+}
+
+@media (min-width: 576px) {
+ .container {
+ max-width: 540px
+ }
+}
+
+@media (min-width: 768px) {
+ .container {
+ max-width: 720px
+ }
+}
+
+@media (min-width: 992px) {
+ .container {
+ max-width: 960px
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ max-width: 1140px
+ }
+}
+
+.container-fluid {
+ width: 100%;
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto
+}
+
+.row {
+ display: flex;
+ flex-wrap: wrap;
+ margin-right: -15px;
+ margin-left: -15px
+}
+
+.no-gutters {
+ margin-right: 0;
+ margin-left: 0
+}
+
+.no-gutters > .col, .no-gutters > [class*=col-] {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.col, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-auto, .col-lg, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-auto, .col-md, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md-auto, .col-sm, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-auto {
+ position: relative;
+ width: 100%;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px
+}
+
+.col {
+ flex-basis: 0;
+ flex-grow: 1;
+ max-width: 100%
+}
+
+.col-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: none
+}
+
+.col-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+}
+
+.col-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+}
+
+.col-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+}
+
+.col-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+}
+
+.col-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+}
+
+.col-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+}
+
+.col-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+}
+
+.col-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+}
+
+.col-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+}
+
+.col-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+}
+
+.col-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+}
+
+.col-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+}
+
+.order-first {
+ order: -1
+}
+
+.order-last {
+ order: 13
+}
+
+.order-0 {
+ order: 0
+}
+
+.order-1 {
+ order: 1
+}
+
+.order-2 {
+ order: 2
+}
+
+.order-3 {
+ order: 3
+}
+
+.order-4 {
+ order: 4
+}
+
+.order-5 {
+ order: 5
+}
+
+.order-6 {
+ order: 6
+}
+
+.order-7 {
+ order: 7
+}
+
+.order-8 {
+ order: 8
+}
+
+.order-9 {
+ order: 9
+}
+
+.order-10 {
+ order: 10
+}
+
+.order-11 {
+ order: 11
+}
+
+.order-12 {
+ order: 12
+}
+
+.offset-1 {
+ margin-left: 8.33333%
+}
+
+.offset-2 {
+ margin-left: 16.66667%
+}
+
+.offset-3 {
+ margin-left: 25%
+}
+
+.offset-4 {
+ margin-left: 33.33333%
+}
+
+.offset-5 {
+ margin-left: 41.66667%
+}
+
+.offset-6 {
+ margin-left: 50%
+}
+
+.offset-7 {
+ margin-left: 58.33333%
+}
+
+.offset-8 {
+ margin-left: 66.66667%
+}
+
+.offset-9 {
+ margin-left: 75%
+}
+
+.offset-10 {
+ margin-left: 83.33333%
+}
+
+.offset-11 {
+ margin-left: 91.66667%
+}
+
+@media (min-width: 576px) {
+ .col-sm {
+ flex-basis: 0;
+ flex-grow: 1;
+ max-width: 100%
+ }
+
+ .col-sm-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: none
+ }
+
+ .col-sm-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+ }
+
+ .col-sm-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-sm-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .col-sm-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .col-sm-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+ }
+
+ .col-sm-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .col-sm-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+ }
+
+ .col-sm-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+ }
+
+ .col-sm-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+ }
+
+ .col-sm-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+ }
+
+ .col-sm-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+ }
+
+ .col-sm-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .order-sm-first {
+ order: -1
+ }
+
+ .order-sm-last {
+ order: 13
+ }
+
+ .order-sm-0 {
+ order: 0
+ }
+
+ .order-sm-1 {
+ order: 1
+ }
+
+ .order-sm-2 {
+ order: 2
+ }
+
+ .order-sm-3 {
+ order: 3
+ }
+
+ .order-sm-4 {
+ order: 4
+ }
+
+ .order-sm-5 {
+ order: 5
+ }
+
+ .order-sm-6 {
+ order: 6
+ }
+
+ .order-sm-7 {
+ order: 7
+ }
+
+ .order-sm-8 {
+ order: 8
+ }
+
+ .order-sm-9 {
+ order: 9
+ }
+
+ .order-sm-10 {
+ order: 10
+ }
+
+ .order-sm-11 {
+ order: 11
+ }
+
+ .order-sm-12 {
+ order: 12
+ }
+
+ .offset-sm-0 {
+ margin-left: 0
+ }
+
+ .offset-sm-1 {
+ margin-left: 8.33333%
+ }
+
+ .offset-sm-2 {
+ margin-left: 16.66667%
+ }
+
+ .offset-sm-3 {
+ margin-left: 25%
+ }
+
+ .offset-sm-4 {
+ margin-left: 33.33333%
+ }
+
+ .offset-sm-5 {
+ margin-left: 41.66667%
+ }
+
+ .offset-sm-6 {
+ margin-left: 50%
+ }
+
+ .offset-sm-7 {
+ margin-left: 58.33333%
+ }
+
+ .offset-sm-8 {
+ margin-left: 66.66667%
+ }
+
+ .offset-sm-9 {
+ margin-left: 75%
+ }
+
+ .offset-sm-10 {
+ margin-left: 83.33333%
+ }
+
+ .offset-sm-11 {
+ margin-left: 91.66667%
+ }
+}
+
+@media (min-width: 768px) {
+ .col-md {
+ flex-basis: 0;
+ flex-grow: 1;
+ max-width: 100%
+ }
+
+ .col-md-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: none
+ }
+
+ .col-md-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+ }
+
+ .col-md-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-md-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .col-md-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .col-md-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+ }
+
+ .col-md-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .col-md-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+ }
+
+ .col-md-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+ }
+
+ .col-md-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+ }
+
+ .col-md-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+ }
+
+ .col-md-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+ }
+
+ .col-md-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .order-md-first {
+ order: -1
+ }
+
+ .order-md-last {
+ order: 13
+ }
+
+ .order-md-0 {
+ order: 0
+ }
+
+ .order-md-1 {
+ order: 1
+ }
+
+ .order-md-2 {
+ order: 2
+ }
+
+ .order-md-3 {
+ order: 3
+ }
+
+ .order-md-4 {
+ order: 4
+ }
+
+ .order-md-5 {
+ order: 5
+ }
+
+ .order-md-6 {
+ order: 6
+ }
+
+ .order-md-7 {
+ order: 7
+ }
+
+ .order-md-8 {
+ order: 8
+ }
+
+ .order-md-9 {
+ order: 9
+ }
+
+ .order-md-10 {
+ order: 10
+ }
+
+ .order-md-11 {
+ order: 11
+ }
+
+ .order-md-12 {
+ order: 12
+ }
+
+ .offset-md-0 {
+ margin-left: 0
+ }
+
+ .offset-md-1 {
+ margin-left: 8.33333%
+ }
+
+ .offset-md-2 {
+ margin-left: 16.66667%
+ }
+
+ .offset-md-3 {
+ margin-left: 25%
+ }
+
+ .offset-md-4 {
+ margin-left: 33.33333%
+ }
+
+ .offset-md-5 {
+ margin-left: 41.66667%
+ }
+
+ .offset-md-6 {
+ margin-left: 50%
+ }
+
+ .offset-md-7 {
+ margin-left: 58.33333%
+ }
+
+ .offset-md-8 {
+ margin-left: 66.66667%
+ }
+
+ .offset-md-9 {
+ margin-left: 75%
+ }
+
+ .offset-md-10 {
+ margin-left: 83.33333%
+ }
+
+ .offset-md-11 {
+ margin-left: 91.66667%
+ }
+}
+
+@media (min-width: 992px) {
+ .col-lg {
+ flex-basis: 0;
+ flex-grow: 1;
+ max-width: 100%
+ }
+
+ .col-lg-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: none
+ }
+
+ .col-lg-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+ }
+
+ .col-lg-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-lg-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .col-lg-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .col-lg-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+ }
+
+ .col-lg-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .col-lg-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+ }
+
+ .col-lg-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+ }
+
+ .col-lg-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+ }
+
+ .col-lg-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+ }
+
+ .col-lg-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+ }
+
+ .col-lg-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .order-lg-first {
+ order: -1
+ }
+
+ .order-lg-last {
+ order: 13
+ }
+
+ .order-lg-0 {
+ order: 0
+ }
+
+ .order-lg-1 {
+ order: 1
+ }
+
+ .order-lg-2 {
+ order: 2
+ }
+
+ .order-lg-3 {
+ order: 3
+ }
+
+ .order-lg-4 {
+ order: 4
+ }
+
+ .order-lg-5 {
+ order: 5
+ }
+
+ .order-lg-6 {
+ order: 6
+ }
+
+ .order-lg-7 {
+ order: 7
+ }
+
+ .order-lg-8 {
+ order: 8
+ }
+
+ .order-lg-9 {
+ order: 9
+ }
+
+ .order-lg-10 {
+ order: 10
+ }
+
+ .order-lg-11 {
+ order: 11
+ }
+
+ .order-lg-12 {
+ order: 12
+ }
+
+ .offset-lg-0 {
+ margin-left: 0
+ }
+
+ .offset-lg-1 {
+ margin-left: 8.33333%
+ }
+
+ .offset-lg-2 {
+ margin-left: 16.66667%
+ }
+
+ .offset-lg-3 {
+ margin-left: 25%
+ }
+
+ .offset-lg-4 {
+ margin-left: 33.33333%
+ }
+
+ .offset-lg-5 {
+ margin-left: 41.66667%
+ }
+
+ .offset-lg-6 {
+ margin-left: 50%
+ }
+
+ .offset-lg-7 {
+ margin-left: 58.33333%
+ }
+
+ .offset-lg-8 {
+ margin-left: 66.66667%
+ }
+
+ .offset-lg-9 {
+ margin-left: 75%
+ }
+
+ .offset-lg-10 {
+ margin-left: 83.33333%
+ }
+
+ .offset-lg-11 {
+ margin-left: 91.66667%
+ }
+}
+
+@media (min-width: 1200px) {
+ .col-xl {
+ flex-basis: 0;
+ flex-grow: 1;
+ max-width: 100%
+ }
+
+ .col-xl-auto {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: none
+ }
+
+ .col-xl-1 {
+ flex: 0 0 8.33333%;
+ max-width: 8.33333%
+ }
+
+ .col-xl-2 {
+ flex: 0 0 16.66667%;
+ max-width: 16.66667%
+ }
+
+ .col-xl-3 {
+ flex: 0 0 25%;
+ max-width: 25%
+ }
+
+ .col-xl-4 {
+ flex: 0 0 33.33333%;
+ max-width: 33.33333%
+ }
+
+ .col-xl-5 {
+ flex: 0 0 41.66667%;
+ max-width: 41.66667%
+ }
+
+ .col-xl-6 {
+ flex: 0 0 50%;
+ max-width: 50%
+ }
+
+ .col-xl-7 {
+ flex: 0 0 58.33333%;
+ max-width: 58.33333%
+ }
+
+ .col-xl-8 {
+ flex: 0 0 66.66667%;
+ max-width: 66.66667%
+ }
+
+ .col-xl-9 {
+ flex: 0 0 75%;
+ max-width: 75%
+ }
+
+ .col-xl-10 {
+ flex: 0 0 83.33333%;
+ max-width: 83.33333%
+ }
+
+ .col-xl-11 {
+ flex: 0 0 91.66667%;
+ max-width: 91.66667%
+ }
+
+ .col-xl-12 {
+ flex: 0 0 100%;
+ max-width: 100%
+ }
+
+ .order-xl-first {
+ order: -1
+ }
+
+ .order-xl-last {
+ order: 13
+ }
+
+ .order-xl-0 {
+ order: 0
+ }
+
+ .order-xl-1 {
+ order: 1
+ }
+
+ .order-xl-2 {
+ order: 2
+ }
+
+ .order-xl-3 {
+ order: 3
+ }
+
+ .order-xl-4 {
+ order: 4
+ }
+
+ .order-xl-5 {
+ order: 5
+ }
+
+ .order-xl-6 {
+ order: 6
+ }
+
+ .order-xl-7 {
+ order: 7
+ }
+
+ .order-xl-8 {
+ order: 8
+ }
+
+ .order-xl-9 {
+ order: 9
+ }
+
+ .order-xl-10 {
+ order: 10
+ }
+
+ .order-xl-11 {
+ order: 11
+ }
+
+ .order-xl-12 {
+ order: 12
+ }
+
+ .offset-xl-0 {
+ margin-left: 0
+ }
+
+ .offset-xl-1 {
+ margin-left: 8.33333%
+ }
+
+ .offset-xl-2 {
+ margin-left: 16.66667%
+ }
+
+ .offset-xl-3 {
+ margin-left: 25%
+ }
+
+ .offset-xl-4 {
+ margin-left: 33.33333%
+ }
+
+ .offset-xl-5 {
+ margin-left: 41.66667%
+ }
+
+ .offset-xl-6 {
+ margin-left: 50%
+ }
+
+ .offset-xl-7 {
+ margin-left: 58.33333%
+ }
+
+ .offset-xl-8 {
+ margin-left: 66.66667%
+ }
+
+ .offset-xl-9 {
+ margin-left: 75%
+ }
+
+ .offset-xl-10 {
+ margin-left: 83.33333%
+ }
+
+ .offset-xl-11 {
+ margin-left: 91.66667%
+ }
+}
+
+.table {
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: 1rem;
+ background-color: transparent
+}
+
+.table td, .table th {
+ padding: .75rem;
+ vertical-align: top;
+ border-top: 1px solid rgba(0, 0, 0, .06)
+}
+
+.table thead th {
+ vertical-align: bottom;
+ border-bottom: 2px solid rgba(0, 0, 0, .06)
+}
+
+.table tbody + tbody {
+ border-top: 2px solid rgba(0, 0, 0, .06)
+}
+
+.table .table {
+ background-color: #fafafa
+}
+
+.table-sm td, .table-sm th {
+ padding: .3rem
+}
+
+.table-bordered, .table-bordered td, .table-bordered th {
+ border: 1px solid rgba(0, 0, 0, .06)
+}
+
+.table-bordered thead td, .table-bordered thead th {
+ border-bottom-width: 2px
+}
+
+.table-striped tbody tr:nth-of-type(odd) {
+ background-color: rgba(0, 0, 0, .05)
+}
+
+.table-hover tbody tr:hover {
+ background-color: rgba(0, 0, 0, .075)
+}
+
+.table-primary, .table-primary > td, .table-primary > th {
+ background-color: #b8e2de
+}
+
+.table-hover .table-primary:hover, .table-hover .table-primary:hover > td, .table-hover .table-primary:hover > th {
+ background-color: #a6dbd6
+}
+
+.table-secondary, .table-secondary > td, .table-secondary > th {
+ background-color: #d6d8db
+}
+
+.table-hover .table-secondary:hover, .table-hover .table-secondary:hover > td, .table-hover .table-secondary:hover > th {
+ background-color: #c8cbcf
+}
+
+.table-success, .table-success > td, .table-success > th {
+ background-color: #cde9ce
+}
+
+.table-hover .table-success:hover, .table-hover .table-success:hover > td, .table-hover .table-success:hover > th {
+ background-color: #bbe1bd
+}
+
+.table-info, .table-info > td, .table-info > th {
+ background-color: #b8e7fc
+}
+
+.table-hover .table-info:hover, .table-hover .table-info:hover > td, .table-hover .table-info:hover > th {
+ background-color: #a0dffb
+}
+
+.table-warning, .table-warning > td, .table-warning > th {
+ background-color: #ffd0c1
+}
+
+.table-hover .table-warning:hover, .table-hover .table-warning:hover > td, .table-hover .table-warning:hover > th {
+ background-color: #ffbda8
+}
+
+.table-danger, .table-danger > td, .table-danger > th {
+ background-color: #fccac7
+}
+
+.table-hover .table-danger:hover, .table-hover .table-danger:hover > td, .table-hover .table-danger:hover > th {
+ background-color: #fbb3af
+}
+
+.table-light, .table-light > td, .table-light > th {
+ background-color: #fcfcfc
+}
+
+.table-hover .table-light:hover, .table-hover .table-light:hover > td, .table-hover .table-light:hover > th {
+ background-color: #efefef
+}
+
+.table-dark, .table-dark > td, .table-dark > th {
+ background-color: #cacaca
+}
+
+.table-hover .table-dark:hover, .table-hover .table-dark:hover > td, .table-hover .table-dark:hover > th {
+ background-color: #bdbdbd
+}
+
+.table-active, .table-active > td, .table-active > th, .table-hover .table-active:hover, .table-hover .table-active:hover > td, .table-hover .table-active:hover > th {
+ background-color: rgba(0, 0, 0, .075)
+}
+
+.table .thead-dark th {
+ color: #fafafa;
+ background-color: #212529;
+ border-color: #32383e
+}
+
+.table .thead-light th {
+ color: #495057;
+ background-color: #e9ecef;
+ border-color: rgba(0, 0, 0, .06)
+}
+
+.table-dark {
+ color: #fafafa;
+ background-color: #212529
+}
+
+.table-dark td, .table-dark th, .table-dark thead th {
+ border-color: #32383e
+}
+
+.table-dark.table-bordered {
+ border: 0
+}
+
+.table-dark.table-striped tbody tr:nth-of-type(odd) {
+ background-color: hsla(0, 0%, 100%, .05)
+}
+
+.table-dark.table-hover tbody tr:hover {
+ background-color: hsla(0, 0%, 100%, .075)
+}
+
+@media (max-width: 575.98px) {
+ .table-responsive-sm {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar
+ }
+
+ .table-responsive-sm > .table-bordered {
+ border: 0
+ }
+}
+
+@media (max-width: 767.98px) {
+ .table-responsive-md {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar
+ }
+
+ .table-responsive-md > .table-bordered {
+ border: 0
+ }
+}
+
+@media (max-width: 991.98px) {
+ .table-responsive-lg {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar
+ }
+
+ .table-responsive-lg > .table-bordered {
+ border: 0
+ }
+}
+
+@media (max-width: 1199.98px) {
+ .table-responsive-xl {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar
+ }
+
+ .table-responsive-xl > .table-bordered {
+ border: 0
+ }
+}
+
+.table-responsive {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar
+}
+
+.table-responsive > .table-bordered {
+ border: 0
+}
+
+.custom-file-control, .form-control {
+ display: block;
+ width: 100%;
+ padding: .4375rem 0;
+ font-size: 1rem;
+ line-height: 1.5;
+ color: #495057;
+ background-color: transparent;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, .26);
+ border-radius: 0;
+ box-shadow: none;
+ transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out
+}
+
+.custom-file-control::-ms-expand, .form-control::-ms-expand {
+ background-color: transparent;
+ border: 0
+}
+
+.custom-file-control:focus, .form-control:focus {
+ color: #495057;
+ background-color: transparent;
+ border-color: #17ffe9;
+ outline: 0;
+ box-shadow: none, 0 0 0 .2rem rgba(0, 150, 136, .25)
+}
+
+.custom-file-control::placeholder, .form-control::placeholder {
+ color: #6c757d;
+ opacity: 1
+}
+
+.custom-file-control:disabled, .form-control:disabled, .form-control[readonly], [readonly].custom-file-control {
+ background-color: #e9ecef;
+ opacity: 1
+}
+
+select.custom-file-control:not([size]):not([multiple]), select.form-control:not([size]):not([multiple]) {
+ height: calc(2.4375rem + 2px)
+}
+
+select.custom-file-control:focus::-ms-value, select.form-control:focus::-ms-value {
+ color: #495057;
+ background-color: transparent
+}
+
+.form-control-file, .form-control-range {
+ display: block;
+ width: 100%
+}
+
+.col-form-label {
+ padding-top: calc(.4375rem + 1px);
+ padding-bottom: calc(.4375rem + 1px);
+ margin-bottom: 0;
+ font-size: inherit;
+ line-height: 1.5
+}
+
+.col-form-label-lg {
+ padding-top: calc(.5625rem + 1px);
+ padding-bottom: calc(.5625rem + 1px);
+ font-size: 1.25rem;
+ line-height: 1.5
+}
+
+.col-form-label-sm {
+ padding-top: calc(.25rem + 1px);
+ padding-bottom: calc(.25rem + 1px);
+ font-size: .875rem;
+ line-height: 1.5
+}
+
+.form-control-plaintext {
+ display: block;
+ width: 100%;
+ padding-top: .4375rem;
+ padding-bottom: .4375rem;
+ margin-bottom: 0;
+ line-height: 1.5;
+ background-color: transparent;
+ border: solid transparent;
+ border-width: 1px 0
+}
+
+.form-control-plaintext.form-control-lg, .form-control-plaintext.form-control-sm, .input-group-lg > .form-control-plaintext.custom-file-control, .input-group-lg > .form-control-plaintext.form-control, .input-group-lg > .input-group-append > .form-control-plaintext.btn, .input-group-lg > .input-group-append > .form-control-plaintext.custom-file-control:before, .input-group-lg > .input-group-append > .form-control-plaintext.input-group-text, .input-group-lg > .input-group-prepend > .form-control-plaintext.btn, .input-group-lg > .input-group-prepend > .form-control-plaintext.custom-file-control:before, .input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text, .input-group-sm > .form-control-plaintext.custom-file-control, .input-group-sm > .form-control-plaintext.form-control, .input-group-sm > .input-group-append > .form-control-plaintext.btn, .input-group-sm > .input-group-append > .form-control-plaintext.custom-file-control:before, .input-group-sm > .input-group-append > .form-control-plaintext.input-group-text, .input-group-sm > .input-group-prepend > .form-control-plaintext.btn, .input-group-sm > .input-group-prepend > .form-control-plaintext.custom-file-control:before, .input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.form-control-sm, .input-group-sm > .custom-file-control, .input-group-sm > .form-control, .input-group-sm > .input-group-append > .btn, .input-group-sm > .input-group-append > .custom-file-control:before, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-prepend > .custom-file-control:before, .input-group-sm > .input-group-prepend > .input-group-text {
+ padding: .25rem 0;
+ font-size: .875rem;
+ line-height: 1.5;
+ border-radius: .0625rem
+}
+
+.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]), .input-group-sm > .input-group-append > select.custom-file-control:not([size]):not([multiple]):before, .input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]), .input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]), .input-group-sm > .input-group-prepend > select.custom-file-control:not([size]):not([multiple]):before, .input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), .input-group-sm > select.custom-file-control:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), select.form-control-sm:not([size]):not([multiple]) {
+ height: calc(2.125rem + 2px)
+}
+
+.form-control-lg, .input-group-lg > .custom-file-control, .input-group-lg > .form-control, .input-group-lg > .input-group-append > .btn, .input-group-lg > .input-group-append > .custom-file-control:before, .input-group-lg > .input-group-append > .input-group-text, .input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-prepend > .custom-file-control:before, .input-group-lg > .input-group-prepend > .input-group-text {
+ padding: .5625rem 0;
+ font-size: 1.25rem;
+ line-height: 1.5;
+ border-radius: .3rem
+}
+
+.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]), .input-group-lg > .input-group-append > select.custom-file-control:not([size]):not([multiple]):before, .input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]), .input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]), .input-group-lg > .input-group-prepend > select.custom-file-control:not([size]):not([multiple]):before, .input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), .input-group-lg > select.custom-file-control:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), select.form-control-lg:not([size]):not([multiple]) {
+ height: calc(2.875rem + 2px)
+}
+
+.form-group {
+ margin-bottom: 1rem
+}
+
+.form-text {
+ display: block;
+ margin-top: .25rem
+}
+
+.form-row {
+ display: flex;
+ flex-wrap: wrap;
+ margin-right: -5px;
+ margin-left: -5px
+}
+
+.form-row > .col, .form-row > [class*=col-] {
+ padding-right: 5px;
+ padding-left: 5px
+}
+
+.form-check {
+ position: relative;
+ display: block;
+ padding-left: 1.25rem
+}
+
+.form-check-input {
+ position: absolute;
+ margin-top: .3rem;
+ margin-left: -1.25rem
+}
+
+.form-check-input:disabled ~ .form-check-label {
+ color: #6c757d
+}
+
+.form-check-label {
+ margin-bottom: 0
+}
+
+.form-check-inline {
+ display: inline-flex;
+ align-items: center;
+ padding-left: 0;
+ margin-right: .75rem
+}
+
+.form-check-inline .form-check-input {
+ position: static;
+ margin-top: 0;
+ margin-right: .3125rem;
+ margin-left: 0
+}
+
+.valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: #4caf50
+}
+
+.valid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1;
+ color: #fff;
+ background-color: rgba(76, 175, 80, .8);
+ border-radius: .2rem
+}
+
+.custom-select.is-valid, .form-control.is-valid, .is-valid.custom-file-control, .was-validated .custom-file-control:valid, .was-validated .custom-select:valid, .was-validated .form-control:valid {
+ border-color: #4caf50
+}
+
+.custom-select.is-valid:focus, .form-control.is-valid:focus, .is-valid.custom-file-control:focus, .was-validated .custom-file-control:valid:focus, .was-validated .custom-select:valid:focus, .was-validated .form-control:valid:focus {
+ border-color: #4caf50;
+ box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .25)
+}
+
+.custom-select.is-valid ~ .valid-feedback, .custom-select.is-valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, .form-control.is-valid ~ .valid-tooltip, .is-valid.custom-file-control ~ .valid-feedback, .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .custom-file-control:valid ~ .valid-feedback, .was-validated .custom-file-control:valid ~ .valid-tooltip, .was-validated .custom-select:valid ~ .valid-feedback, .was-validated .custom-select:valid ~ .valid-tooltip, .was-validated .form-control:valid ~ .valid-feedback, .was-validated .form-control:valid ~ .valid-tooltip {
+ display: block
+}
+
+.form-check-input.is-valid ~ .form-check-label, .was-validated .form-check-input:valid ~ .form-check-label {
+ color: #4caf50
+}
+
+.form-check-input.is-valid ~ .valid-feedback, .form-check-input.is-valid ~ .valid-tooltip, .was-validated .form-check-input:valid ~ .valid-feedback, .was-validated .form-check-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.custom-control-input.is-valid ~ .custom-control-label, .was-validated .custom-control-input:valid ~ .custom-control-label {
+ color: #4caf50
+}
+
+.custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .custom-control-input:valid ~ .custom-control-label:before {
+ background-color: #a3d7a5
+}
+
+.custom-control-input.is-valid ~ .valid-feedback, .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-control-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .custom-control-input:valid:checked ~ .custom-control-label:before {
+ background-color: #6ec071
+}
+
+.custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .custom-control-input:valid:focus ~ .custom-control-label:before {
+ box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(76, 175, 80, .25)
+}
+
+.custom-file-input.is-valid ~ .custom-file-label, .was-validated .custom-file-input:valid ~ .custom-file-label {
+ border-color: #4caf50
+}
+
+.custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .custom-file-input:valid ~ .custom-file-label:before {
+ border-color: inherit
+}
+
+.custom-file-input.is-valid ~ .valid-feedback, .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .custom-file-input:valid:focus ~ .custom-file-label {
+ box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .25)
+}
+
+.invalid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: #f44336
+}
+
+.invalid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1;
+ color: #fff;
+ background-color: rgba(244, 67, 54, .8);
+ border-radius: .2rem
+}
+
+.custom-select.is-invalid, .form-control.is-invalid, .is-invalid.custom-file-control, .was-validated .custom-file-control:invalid, .was-validated .custom-select:invalid, .was-validated .form-control:invalid {
+ border-color: #f44336
+}
+
+.custom-select.is-invalid:focus, .form-control.is-invalid:focus, .is-invalid.custom-file-control:focus, .was-validated .custom-file-control:invalid:focus, .was-validated .custom-select:invalid:focus, .was-validated .form-control:invalid:focus {
+ border-color: #f44336;
+ box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .25)
+}
+
+.custom-select.is-invalid ~ .invalid-feedback, .custom-select.is-invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, .form-control.is-invalid ~ .invalid-tooltip, .is-invalid.custom-file-control ~ .invalid-feedback, .is-invalid.custom-file-control ~ .invalid-tooltip, .was-validated .custom-file-control:invalid ~ .invalid-feedback, .was-validated .custom-file-control:invalid ~ .invalid-tooltip, .was-validated .custom-select:invalid ~ .invalid-feedback, .was-validated .custom-select:invalid ~ .invalid-tooltip, .was-validated .form-control:invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-tooltip {
+ display: block
+}
+
+.form-check-input.is-invalid ~ .form-check-label, .was-validated .form-check-input:invalid ~ .form-check-label {
+ color: #f44336
+}
+
+.form-check-input.is-invalid ~ .invalid-feedback, .form-check-input.is-invalid ~ .invalid-tooltip, .was-validated .form-check-input:invalid ~ .invalid-feedback, .was-validated .form-check-input:invalid ~ .invalid-tooltip {
+ display: block
+}
+
+.custom-control-input.is-invalid ~ .custom-control-label, .was-validated .custom-control-input:invalid ~ .custom-control-label {
+ color: #f44336
+}
+
+.custom-control-input.is-invalid ~ .custom-control-label:before, .was-validated .custom-control-input:invalid ~ .custom-control-label:before {
+ background-color: #fbb4af
+}
+
+.custom-control-input.is-invalid ~ .invalid-feedback, .custom-control-input.is-invalid ~ .invalid-tooltip, .was-validated .custom-control-input:invalid ~ .invalid-feedback, .was-validated .custom-control-input:invalid ~ .invalid-tooltip {
+ display: block
+}
+
+.custom-control-input.is-invalid:checked ~ .custom-control-label:before, .was-validated .custom-control-input:invalid:checked ~ .custom-control-label:before {
+ background-color: #f77066
+}
+
+.custom-control-input.is-invalid:focus ~ .custom-control-label:before, .was-validated .custom-control-input:invalid:focus ~ .custom-control-label:before {
+ box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(244, 67, 54, .25)
+}
+
+.custom-file-input.is-invalid ~ .custom-file-label, .was-validated .custom-file-input:invalid ~ .custom-file-label {
+ border-color: #f44336
+}
+
+.custom-file-input.is-invalid ~ .custom-file-label:before, .was-validated .custom-file-input:invalid ~ .custom-file-label:before {
+ border-color: inherit
+}
+
+.custom-file-input.is-invalid ~ .invalid-feedback, .custom-file-input.is-invalid ~ .invalid-tooltip, .was-validated .custom-file-input:invalid ~ .invalid-feedback, .was-validated .custom-file-input:invalid ~ .invalid-tooltip {
+ display: block
+}
+
+.custom-file-input.is-invalid:focus ~ .custom-file-label, .was-validated .custom-file-input:invalid:focus ~ .custom-file-label {
+ box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .25)
+}
+
+.form-inline {
+ display: flex;
+ flex-flow: row wrap;
+ align-items: center
+}
+
+.form-inline .form-check {
+ width: 100%
+}
+
+@media (min-width: 576px) {
+ .form-inline label {
+ justify-content: center
+ }
+
+ .form-inline .form-group, .form-inline label {
+ display: flex;
+ align-items: center;
+ margin-bottom: 0
+ }
+
+ .form-inline .form-group {
+ flex: 0 0 auto;
+ flex-flow: row wrap
+ }
+
+ .form-inline .custom-file-control, .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle
+ }
+
+ .form-inline .form-control-plaintext {
+ display: inline-block
+ }
+
+ .form-inline .input-group {
+ width: auto
+ }
+
+ .form-inline .form-check {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: auto;
+ padding-left: 0
+ }
+
+ .form-inline .form-check-input {
+ position: relative;
+ margin-top: 0;
+ margin-right: .25rem;
+ margin-left: 0
+ }
+
+ .form-inline .custom-control {
+ align-items: center;
+ justify-content: center
+ }
+
+ .form-inline .custom-control-label {
+ margin-bottom: 0
+ }
+}
+
+.btn, .custom-file-control:before {
+ display: inline-block;
+ font-weight: 500;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ user-select: none;
+ border: 1px solid transparent;
+ padding: .46875rem 1rem;
+ font-size: 1rem;
+ line-height: 1.5;
+ border-radius: .125rem;
+ transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out
+}
+
+.btn:focus, .btn:hover, .custom-file-control:focus:before, .custom-file-control:hover:before {
+ text-decoration: none
+}
+
+.btn.focus, .btn:focus, .custom-file-control:focus:before, .focus.custom-file-control:before {
+ outline: 0;
+ box-shadow: none
+}
+
+.btn.disabled, .btn:disabled, .custom-file-control:disabled:before, .disabled.custom-file-control:before {
+ opacity: .65;
+ box-shadow: none
+}
+
+.btn:not(:disabled):not(.disabled), .custom-file-control:not(:disabled):not(.disabled):before {
+ cursor: pointer
+}
+
+.btn:not(:disabled):not(.disabled).active, .btn:not(:disabled):not(.disabled):active, .custom-file-control:not(:disabled):not(.disabled).active:before, .custom-file-control:not(:disabled):not(.disabled):active:before {
+ background-image: none;
+ box-shadow: none
+}
+
+.btn:not(:disabled):not(.disabled).active:focus, .btn:not(:disabled):not(.disabled):active:focus, .custom-file-control:not(:disabled):not(.disabled).active:focus:before, .custom-file-control:not(:disabled):not(.disabled):active:focus:before {
+ box-shadow: none, none
+}
+
+a.btn.disabled, a.disabled.custom-file-control:before, fieldset:disabled a.btn, fieldset:disabled a.custom-file-control:before {
+ pointer-events: none
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #009688;
+ border-color: #009688;
+ box-shadow: none
+}
+
+.btn-primary:hover {
+ color: #fff;
+ background-color: #007065;
+ border-color: #00635a
+}
+
+.btn-primary.focus, .btn-primary:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(0, 150, 136, .5)
+}
+
+.btn-primary.disabled, .btn-primary:disabled {
+ color: #fff;
+ background-color: #009688;
+ border-color: #009688
+}
+
+.btn-primary:not(:disabled):not(.disabled).active, .btn-primary:not(:disabled):not(.disabled):active, .show > .btn-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #00635a;
+ border-color: #00564e
+}
+
+.btn-primary:not(:disabled):not(.disabled).active:focus, .btn-primary:not(:disabled):not(.disabled):active:focus, .show > .btn-primary.dropdown-toggle:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(0, 150, 136, .5)
+}
+
+.btn-secondary {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d;
+ box-shadow: none
+}
+
+.btn-secondary:hover {
+ color: #fff;
+ background-color: #5a6268;
+ border-color: #545b62
+}
+
+.btn-secondary.focus, .btn-secondary:focus {
+ box-shadow: none, 0 0 0 .2rem hsla(208, 7%, 46%, .5)
+}
+
+.btn-secondary.disabled, .btn-secondary:disabled {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d
+}
+
+.btn-secondary:not(:disabled):not(.disabled).active, .btn-secondary:not(:disabled):not(.disabled):active, .show > .btn-secondary.dropdown-toggle {
+ color: #fff;
+ background-color: #545b62;
+ border-color: #4e555b
+}
+
+.btn-secondary:not(:disabled):not(.disabled).active:focus, .btn-secondary:not(:disabled):not(.disabled):active:focus, .show > .btn-secondary.dropdown-toggle:focus {
+ box-shadow: none, 0 0 0 .2rem hsla(208, 7%, 46%, .5)
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #4caf50;
+ border-color: #4caf50;
+ box-shadow: none
+}
+
+.btn-success:hover {
+ color: #fff;
+ background-color: #409444;
+ border-color: #3d8b40
+}
+
+.btn-success.focus, .btn-success:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(76, 175, 80, .5)
+}
+
+.btn-success.disabled, .btn-success:disabled {
+ color: #fff;
+ background-color: #4caf50;
+ border-color: #4caf50
+}
+
+.btn-success:not(:disabled):not(.disabled).active, .btn-success:not(:disabled):not(.disabled):active, .show > .btn-success.dropdown-toggle {
+ color: #fff;
+ background-color: #3d8b40;
+ border-color: #39833c
+}
+
+.btn-success:not(:disabled):not(.disabled).active:focus, .btn-success:not(:disabled):not(.disabled):active:focus, .show > .btn-success.dropdown-toggle:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(76, 175, 80, .5)
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #03a9f4;
+ border-color: #03a9f4;
+ box-shadow: none
+}
+
+.btn-info:hover {
+ color: #fff;
+ background-color: #038fce;
+ border-color: #0286c2
+}
+
+.btn-info.focus, .btn-info:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(3, 169, 244, .5)
+}
+
+.btn-info.disabled, .btn-info:disabled {
+ color: #fff;
+ background-color: #03a9f4;
+ border-color: #03a9f4
+}
+
+.btn-info:not(:disabled):not(.disabled).active, .btn-info:not(:disabled):not(.disabled):active, .show > .btn-info.dropdown-toggle {
+ color: #fff;
+ background-color: #0286c2;
+ border-color: #027db5
+}
+
+.btn-info:not(:disabled):not(.disabled).active:focus, .btn-info:not(:disabled):not(.disabled):active:focus, .show > .btn-info.dropdown-toggle:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(3, 169, 244, .5)
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #ff5722;
+ border-color: #ff5722;
+ box-shadow: none
+}
+
+.btn-warning:hover {
+ color: #fff;
+ background-color: #fb3c00;
+ border-color: #ee3900
+}
+
+.btn-warning.focus, .btn-warning:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(255, 87, 34, .5)
+}
+
+.btn-warning.disabled, .btn-warning:disabled {
+ color: #fff;
+ background-color: #ff5722;
+ border-color: #ff5722
+}
+
+.btn-warning:not(:disabled):not(.disabled).active, .btn-warning:not(:disabled):not(.disabled):active, .show > .btn-warning.dropdown-toggle {
+ color: #fff;
+ background-color: #ee3900;
+ border-color: #e13600
+}
+
+.btn-warning:not(:disabled):not(.disabled).active:focus, .btn-warning:not(:disabled):not(.disabled):active:focus, .show > .btn-warning.dropdown-toggle:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(255, 87, 34, .5)
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #f44336;
+ border-color: #f44336;
+ box-shadow: none
+}
+
+.btn-danger:hover {
+ color: #fff;
+ background-color: #f22112;
+ border-color: #ea1c0d
+}
+
+.btn-danger.focus, .btn-danger:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(244, 67, 54, .5)
+}
+
+.btn-danger.disabled, .btn-danger:disabled {
+ color: #fff;
+ background-color: #f44336;
+ border-color: #f44336
+}
+
+.btn-danger:not(:disabled):not(.disabled).active, .btn-danger:not(:disabled):not(.disabled):active, .show > .btn-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #ea1c0d;
+ border-color: #de1b0c
+}
+
+.btn-danger:not(:disabled):not(.disabled).active:focus, .btn-danger:not(:disabled):not(.disabled):active:focus, .show > .btn-danger.dropdown-toggle:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(244, 67, 54, .5)
+}
+
+.btn-light {
+ color: #212529;
+ background-color: #f5f5f5;
+ border-color: #f5f5f5;
+ box-shadow: none
+}
+
+.btn-light:hover {
+ color: #212529;
+ background-color: #e2e2e2;
+ border-color: #dcdcdc
+}
+
+.btn-light.focus, .btn-light:focus {
+ box-shadow: none, 0 0 0 .2rem hsla(0, 0%, 96%, .5)
+}
+
+.btn-light.disabled, .btn-light:disabled {
+ color: #212529;
+ background-color: #f5f5f5;
+ border-color: #f5f5f5
+}
+
+.btn-light:not(:disabled):not(.disabled).active, .btn-light:not(:disabled):not(.disabled):active, .show > .btn-light.dropdown-toggle {
+ color: #212529;
+ background-color: #dcdcdc;
+ border-color: #d5d5d5
+}
+
+.btn-light:not(:disabled):not(.disabled).active:focus, .btn-light:not(:disabled):not(.disabled):active:focus, .show > .btn-light.dropdown-toggle:focus {
+ box-shadow: none, 0 0 0 .2rem hsla(0, 0%, 96%, .5)
+}
+
+.btn-dark {
+ color: #fff;
+ background-color: #424242;
+ border-color: #424242;
+ box-shadow: none
+}
+
+.btn-dark:hover {
+ color: #fff;
+ background-color: #2f2f2f;
+ border-color: #292929
+}
+
+.btn-dark.focus, .btn-dark:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(66, 66, 66, .5)
+}
+
+.btn-dark.disabled, .btn-dark:disabled {
+ color: #fff;
+ background-color: #424242;
+ border-color: #424242
+}
+
+.btn-dark:not(:disabled):not(.disabled).active, .btn-dark:not(:disabled):not(.disabled):active, .show > .btn-dark.dropdown-toggle {
+ color: #fff;
+ background-color: #292929;
+ border-color: #222
+}
+
+.btn-dark:not(:disabled):not(.disabled).active:focus, .btn-dark:not(:disabled):not(.disabled):active:focus, .show > .btn-dark.dropdown-toggle:focus {
+ box-shadow: none, 0 0 0 .2rem rgba(66, 66, 66, .5)
+}
+
+.btn-outline-primary {
+ color: #009688;
+ background-color: transparent;
+ background-image: none;
+ border-color: #009688
+}
+
+.btn-outline-primary:hover {
+ color: #fff;
+ background-color: #009688;
+ border-color: #009688
+}
+
+.btn-outline-primary.focus, .btn-outline-primary:focus {
+ box-shadow: 0 0 0 .2rem rgba(0, 150, 136, .5)
+}
+
+.btn-outline-primary.disabled, .btn-outline-primary:disabled {
+ color: #009688;
+ background-color: transparent
+}
+
+.btn-outline-primary:not(:disabled):not(.disabled).active, .btn-outline-primary:not(:disabled):not(.disabled):active, .show > .btn-outline-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #009688;
+ border-color: #009688
+}
+
+.btn-outline-primary:not(:disabled):not(.disabled).active:focus, .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-primary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(0, 150, 136, .5)
+}
+
+.btn-outline-secondary {
+ color: #6c757d;
+ background-color: transparent;
+ background-image: none;
+ border-color: #6c757d
+}
+
+.btn-outline-secondary:hover {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d
+}
+
+.btn-outline-secondary.focus, .btn-outline-secondary:focus {
+ box-shadow: 0 0 0 .2rem hsla(208, 7%, 46%, .5)
+}
+
+.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {
+ color: #6c757d;
+ background-color: transparent
+}
+
+.btn-outline-secondary:not(:disabled):not(.disabled).active, .btn-outline-secondary:not(:disabled):not(.disabled):active, .show > .btn-outline-secondary.dropdown-toggle {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d
+}
+
+.btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-secondary.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem hsla(208, 7%, 46%, .5)
+}
+
+.btn-outline-success {
+ color: #4caf50;
+ background-color: transparent;
+ background-image: none;
+ border-color: #4caf50
+}
+
+.btn-outline-success:hover {
+ color: #fff;
+ background-color: #4caf50;
+ border-color: #4caf50
+}
+
+.btn-outline-success.focus, .btn-outline-success:focus {
+ box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .5)
+}
+
+.btn-outline-success.disabled, .btn-outline-success:disabled {
+ color: #4caf50;
+ background-color: transparent
+}
+
+.btn-outline-success:not(:disabled):not(.disabled).active, .btn-outline-success:not(:disabled):not(.disabled):active, .show > .btn-outline-success.dropdown-toggle {
+ color: #fff;
+ background-color: #4caf50;
+ border-color: #4caf50
+}
+
+.btn-outline-success:not(:disabled):not(.disabled).active:focus, .btn-outline-success:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-success.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .5)
+}
+
+.btn-outline-info {
+ color: #03a9f4;
+ background-color: transparent;
+ background-image: none;
+ border-color: #03a9f4
+}
+
+.btn-outline-info:hover {
+ color: #fff;
+ background-color: #03a9f4;
+ border-color: #03a9f4
+}
+
+.btn-outline-info.focus, .btn-outline-info:focus {
+ box-shadow: 0 0 0 .2rem rgba(3, 169, 244, .5)
+}
+
+.btn-outline-info.disabled, .btn-outline-info:disabled {
+ color: #03a9f4;
+ background-color: transparent
+}
+
+.btn-outline-info:not(:disabled):not(.disabled).active, .btn-outline-info:not(:disabled):not(.disabled):active, .show > .btn-outline-info.dropdown-toggle {
+ color: #fff;
+ background-color: #03a9f4;
+ border-color: #03a9f4
+}
+
+.btn-outline-info:not(:disabled):not(.disabled).active:focus, .btn-outline-info:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-info.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(3, 169, 244, .5)
+}
+
+.btn-outline-warning {
+ color: #ff5722;
+ background-color: transparent;
+ background-image: none;
+ border-color: #ff5722
+}
+
+.btn-outline-warning:hover {
+ color: #fff;
+ background-color: #ff5722;
+ border-color: #ff5722
+}
+
+.btn-outline-warning.focus, .btn-outline-warning:focus {
+ box-shadow: 0 0 0 .2rem rgba(255, 87, 34, .5)
+}
+
+.btn-outline-warning.disabled, .btn-outline-warning:disabled {
+ color: #ff5722;
+ background-color: transparent
+}
+
+.btn-outline-warning:not(:disabled):not(.disabled).active, .btn-outline-warning:not(:disabled):not(.disabled):active, .show > .btn-outline-warning.dropdown-toggle {
+ color: #fff;
+ background-color: #ff5722;
+ border-color: #ff5722
+}
+
+.btn-outline-warning:not(:disabled):not(.disabled).active:focus, .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-warning.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(255, 87, 34, .5)
+}
+
+.btn-outline-danger {
+ color: #f44336;
+ background-color: transparent;
+ background-image: none;
+ border-color: #f44336
+}
+
+.btn-outline-danger:hover {
+ color: #fff;
+ background-color: #f44336;
+ border-color: #f44336
+}
+
+.btn-outline-danger.focus, .btn-outline-danger:focus {
+ box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .5)
+}
+
+.btn-outline-danger.disabled, .btn-outline-danger:disabled {
+ color: #f44336;
+ background-color: transparent
+}
+
+.btn-outline-danger:not(:disabled):not(.disabled).active, .btn-outline-danger:not(:disabled):not(.disabled):active, .show > .btn-outline-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #f44336;
+ border-color: #f44336
+}
+
+.btn-outline-danger:not(:disabled):not(.disabled).active:focus, .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-danger.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .5)
+}
+
+.btn-outline-light {
+ color: #f5f5f5;
+ background-color: transparent;
+ background-image: none;
+ border-color: #f5f5f5
+}
+
+.btn-outline-light:hover {
+ color: #212529;
+ background-color: #f5f5f5;
+ border-color: #f5f5f5
+}
+
+.btn-outline-light.focus, .btn-outline-light:focus {
+ box-shadow: 0 0 0 .2rem hsla(0, 0%, 96%, .5)
+}
+
+.btn-outline-light.disabled, .btn-outline-light:disabled {
+ color: #f5f5f5;
+ background-color: transparent
+}
+
+.btn-outline-light:not(:disabled):not(.disabled).active, .btn-outline-light:not(:disabled):not(.disabled):active, .show > .btn-outline-light.dropdown-toggle {
+ color: #212529;
+ background-color: #f5f5f5;
+ border-color: #f5f5f5
+}
+
+.btn-outline-light:not(:disabled):not(.disabled).active:focus, .btn-outline-light:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-light.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem hsla(0, 0%, 96%, .5)
+}
+
+.btn-outline-dark {
+ color: #424242;
+ background-color: transparent;
+ background-image: none;
+ border-color: #424242
+}
+
+.btn-outline-dark:hover {
+ color: #fff;
+ background-color: #424242;
+ border-color: #424242
+}
+
+.btn-outline-dark.focus, .btn-outline-dark:focus {
+ box-shadow: 0 0 0 .2rem rgba(66, 66, 66, .5)
+}
+
+.btn-outline-dark.disabled, .btn-outline-dark:disabled {
+ color: #424242;
+ background-color: transparent
+}
+
+.btn-outline-dark:not(:disabled):not(.disabled).active, .btn-outline-dark:not(:disabled):not(.disabled):active, .show > .btn-outline-dark.dropdown-toggle {
+ color: #fff;
+ background-color: #424242;
+ border-color: #424242
+}
+
+.btn-outline-dark:not(:disabled):not(.disabled).active:focus, .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .show > .btn-outline-dark.dropdown-toggle:focus {
+ box-shadow: 0 0 0 .2rem rgba(66, 66, 66, .5)
+}
+
+.btn-link {
+ font-weight: 400;
+ color: #009688;
+ background-color: transparent
+}
+
+.btn-link:hover {
+ color: #004a43;
+ background-color: transparent
+}
+
+.btn-link.focus, .btn-link:focus, .btn-link:hover {
+ text-decoration: underline;
+ border-color: transparent
+}
+
+.btn-link.focus, .btn-link:focus {
+ box-shadow: none
+}
+
+.btn-link.disabled, .btn-link:disabled {
+ color: rgba(0, 0, 0, .26)
+}
+
+.btn-group-lg > .btn, .btn-group-lg > .custom-file-control:before, .btn-lg {
+ padding: .5rem 1rem;
+ font-size: 1.25rem;
+ line-height: 1.5;
+ border-radius: .3rem
+}
+
+.btn-group-sm > .btn, .btn-group-sm > .custom-file-control:before, .btn-sm {
+ padding: .40625rem .5rem;
+ font-size: .875rem;
+ line-height: 1.5;
+ border-radius: .0625rem
+}
+
+.btn-block {
+ display: block;
+ width: 100%
+}
+
+.btn-block + .btn-block {
+ margin-top: .5rem
+}
+
+input[type=button].btn-block, input[type=reset].btn-block, input[type=submit].btn-block {
+ width: 100%
+}
+
+.fade {
+ opacity: 0;
+ transition: opacity .15s linear
+}
+
+.fade.show {
+ opacity: 1
+}
+
+.collapse {
+ display: none
+}
+
+.collapse.show {
+ display: block
+}
+
+tr.collapse.show {
+ display: table-row
+}
+
+tbody.collapse.show {
+ display: table-row-group
+}
+
+.collapsing {
+ height: 0;
+ overflow: hidden;
+ transition: height .35s ease
+}
+
+.collapsing, .dropdown, .dropup {
+ position: relative
+}
+
+.dropdown-toggle:after {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: .3em solid;
+ border-right: .3em solid transparent;
+ border-bottom: 0;
+ border-left: .3em solid transparent
+}
+
+.dropdown-toggle:empty:after {
+ margin-left: 0
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ float: left;
+ min-width: 10rem;
+ padding: .5rem 0;
+ margin: .125rem 0 0;
+ font-size: 1rem;
+ color: #212529;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: .125rem;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12)
+}
+
+.dropup .dropdown-menu {
+ margin-top: 0;
+ margin-bottom: .125rem
+}
+
+.dropup .dropdown-toggle:after {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: 0;
+ border-right: .3em solid transparent;
+ border-bottom: .3em solid;
+ border-left: .3em solid transparent
+}
+
+.dropup .dropdown-toggle:empty:after {
+ margin-left: 0
+}
+
+.dropright .dropdown-menu {
+ margin-top: 0;
+ margin-left: .125rem
+}
+
+.dropright .dropdown-toggle:after {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: .3em solid transparent;
+ border-bottom: .3em solid transparent;
+ border-left: .3em solid
+}
+
+.dropright .dropdown-toggle:empty:after {
+ margin-left: 0
+}
+
+.dropright .dropdown-toggle:after {
+ vertical-align: 0
+}
+
+.dropleft .dropdown-menu {
+ margin-top: 0;
+ margin-right: .125rem
+}
+
+.dropleft .dropdown-toggle:after {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: .255em;
+ vertical-align: .255em;
+ content: "";
+ display: none
+}
+
+.dropleft .dropdown-toggle:before {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-right: .255em;
+ vertical-align: .255em;
+ content: "";
+ border-top: .3em solid transparent;
+ border-right: .3em solid;
+ border-bottom: .3em solid transparent
+}
+
+.dropleft .dropdown-toggle:empty:after {
+ margin-left: 0
+}
+
+.dropleft .dropdown-toggle:before {
+ vertical-align: 0
+}
+
+.dropdown-divider {
+ height: 0;
+ margin: .5rem 0;
+ overflow: hidden;
+ border-top: 1px solid #e9ecef
+}
+
+.dropdown-item {
+ display: block;
+ width: 100%;
+ padding: .25rem 1.5rem;
+ clear: both;
+ font-weight: 400;
+ color: #212529;
+ text-align: inherit;
+ white-space: nowrap;
+ background-color: transparent;
+ border: 0
+}
+
+.dropdown-item:focus, .dropdown-item:hover {
+ color: #16181b;
+ text-decoration: none;
+ background-color: #f8f9fa
+}
+
+.dropdown-item.active, .dropdown-item:active {
+ color: #fff;
+ text-decoration: none;
+ background-color: #009688
+}
+
+.dropdown-item.disabled, .dropdown-item:disabled {
+ color: #6c757d;
+ background-color: transparent
+}
+
+.dropdown-menu.show {
+ display: block
+}
+
+.dropdown-header {
+ display: block;
+ padding: .5rem 1.5rem;
+ margin-bottom: 0;
+ font-size: .875rem;
+ color: #6c757d;
+ white-space: nowrap
+}
+
+.btn-group, .btn-group-vertical {
+ display: inline-flex;
+ vertical-align: middle
+}
+
+.btn-group-vertical > .btn, .btn-group-vertical > .custom-file-control:before, .btn-group > .btn, .btn-group > .custom-file-control:before {
+ position: relative;
+ flex: 0 1 auto
+}
+
+.btn-group-vertical > .active.custom-file-control:before, .btn-group-vertical > .btn.active, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:hover, .btn-group-vertical > .custom-file-control:active:before, .btn-group-vertical > .custom-file-control:focus:before, .btn-group-vertical > .custom-file-control:hover:before, .btn-group > .active.custom-file-control:before, .btn-group > .btn.active, .btn-group > .btn:active, .btn-group > .btn:focus, .btn-group > .btn:hover, .btn-group > .custom-file-control:active:before, .btn-group > .custom-file-control:focus:before, .btn-group > .custom-file-control:hover:before {
+ z-index: 1
+}
+
+.btn-group-vertical .btn + .btn, .btn-group-vertical .btn + .btn-group, .btn-group-vertical .btn + .custom-file-control:before, .btn-group-vertical .btn-group + .btn, .btn-group-vertical .btn-group + .btn-group, .btn-group-vertical .btn-group + .custom-file-control:before, .btn-group-vertical .custom-file-control:before + .btn, .btn-group-vertical .custom-file-control:before + .btn-group, .btn-group-vertical .custom-file-control:before + .custom-file-control:before, .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn + .custom-file-control:before, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group, .btn-group .btn-group + .custom-file-control:before, .btn-group .custom-file-control:before + .btn, .btn-group .custom-file-control:before + .btn-group, .btn-group .custom-file-control:before + .custom-file-control:before {
+ margin-left: -1px
+}
+
+.btn-toolbar {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start
+}
+
+.btn-toolbar .input-group {
+ width: auto
+}
+
+.btn-group > .btn:first-child, .btn-group > .custom-file-control:first-child:before {
+ margin-left: 0
+}
+
+.btn-group > .btn-group:not(:last-child) > .btn, .btn-group > .btn-group:not(:last-child) > .custom-file-control:before, .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .custom-file-control:not(:last-child):not(.dropdown-toggle):before {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.btn-group > .btn-group:not(:first-child) > .btn, .btn-group > .btn-group:not(:first-child) > .custom-file-control:before, .btn-group > .btn:not(:first-child), .btn-group > .custom-file-control:not(:first-child):before {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.dropdown-toggle-split {
+ padding-right: .75rem;
+ padding-left: .75rem
+}
+
+.dropdown-toggle-split:after {
+ margin-left: 0
+}
+
+.btn-group-sm > .btn + .dropdown-toggle-split, .btn-group-sm > .custom-file-control:before + .dropdown-toggle-split, .btn-sm + .dropdown-toggle-split {
+ padding-right: .375rem;
+ padding-left: .375rem
+}
+
+.btn-group-lg > .btn + .dropdown-toggle-split, .btn-group-lg > .custom-file-control:before + .dropdown-toggle-split, .btn-lg + .dropdown-toggle-split {
+ padding-right: .75rem;
+ padding-left: .75rem
+}
+
+.btn-group.show .dropdown-toggle, .btn-group.show .dropdown-toggle.btn-link {
+ box-shadow: none
+}
+
+.btn-group-vertical {
+ flex-direction: column;
+ align-items: flex-start;
+ justify-content: center
+}
+
+.btn-group-vertical .btn, .btn-group-vertical .btn-group, .btn-group-vertical .custom-file-control:before {
+ width: 100%
+}
+
+.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn + .custom-file-control:before, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group, .btn-group-vertical > .btn-group + .custom-file-control:before, .btn-group-vertical > .custom-file-control:before + .btn, .btn-group-vertical > .custom-file-control:before + .btn-group, .btn-group-vertical > .custom-file-control:before + .custom-file-control:before {
+ margin-top: -1px;
+ margin-left: 0
+}
+
+.btn-group-vertical > .btn-group:not(:last-child) > .btn, .btn-group-vertical > .btn-group:not(:last-child) > .custom-file-control:before, .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .custom-file-control:not(:last-child):not(.dropdown-toggle):before {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:not(:first-child) > .btn, .btn-group-vertical > .btn-group:not(:first-child) > .custom-file-control:before, .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .custom-file-control:not(:first-child):before {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0
+}
+
+.btn-group-toggle > .btn, .btn-group-toggle > .btn-group > .btn, .btn-group-toggle > .btn-group > .custom-file-control:before, .btn-group-toggle > .custom-file-control:before {
+ margin-bottom: 0
+}
+
+.btn-group-toggle > .btn-group > .btn input[type=checkbox], .btn-group-toggle > .btn-group > .btn input[type=radio], .btn-group-toggle > .btn-group > .custom-file-control:before input[type=checkbox], .btn-group-toggle > .btn-group > .custom-file-control:before input[type=radio], .btn-group-toggle > .btn input[type=checkbox], .btn-group-toggle > .btn input[type=radio], .btn-group-toggle > .custom-file-control:before input[type=checkbox], .btn-group-toggle > .custom-file-control:before input[type=radio] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none
+}
+
+.input-group {
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: stretch;
+ width: 100%
+}
+
+.input-group > .custom-file, .input-group > .custom-file-control, .input-group > .custom-select, .input-group > .form-control {
+ position: relative;
+ flex: 1 1 auto;
+ width: 1%;
+ margin-bottom: 0
+}
+
+.input-group > .custom-file-control:focus, .input-group > .custom-file:focus, .input-group > .custom-select:focus, .input-group > .form-control:focus {
+ z-index: 3
+}
+
+.input-group > .custom-file + .custom-file, .input-group > .custom-file + .custom-file-control, .input-group > .custom-file + .custom-select, .input-group > .custom-file + .form-control, .input-group > .custom-file-control + .custom-file, .input-group > .custom-file-control + .custom-file-control, .input-group > .custom-file-control + .custom-select, .input-group > .custom-file-control + .form-control, .input-group > .custom-select + .custom-file, .input-group > .custom-select + .custom-file-control, .input-group > .custom-select + .custom-select, .input-group > .custom-select + .form-control, .input-group > .form-control + .custom-file, .input-group > .form-control + .custom-file-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .form-control {
+ margin-left: -1px
+}
+
+.input-group > .custom-file-control:not(:last-child), .input-group > .custom-select:not(:last-child), .input-group > .form-control:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.input-group > .custom-file-control:not(:first-child), .input-group > .custom-select:not(:first-child), .input-group > .form-control:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.input-group > .custom-file {
+ display: flex;
+ align-items: center
+}
+
+.input-group > .custom-file:not(:last-child) .custom-file-label, .input-group > .custom-file:not(:last-child) .custom-file-label:before {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.input-group > .custom-file:not(:first-child) .custom-file-label, .input-group > .custom-file:not(:first-child) .custom-file-label:before {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.input-group-append, .input-group-prepend {
+ display: flex
+}
+
+.input-group-append .btn, .input-group-append .custom-file-control:before, .input-group-prepend .btn, .input-group-prepend .custom-file-control:before {
+ position: relative;
+ z-index: 2
+}
+
+.input-group-append .btn + .btn, .input-group-append .btn + .custom-file-control:before, .input-group-append .btn + .input-group-text, .input-group-append .custom-file-control:before + .btn, .input-group-append .custom-file-control:before + .custom-file-control:before, .input-group-append .custom-file-control:before + .input-group-text, .input-group-append .input-group-text + .btn, .input-group-append .input-group-text + .custom-file-control:before, .input-group-append .input-group-text + .input-group-text, .input-group-prepend .btn + .btn, .input-group-prepend .btn + .custom-file-control:before, .input-group-prepend .btn + .input-group-text, .input-group-prepend .custom-file-control:before + .btn, .input-group-prepend .custom-file-control:before + .custom-file-control:before, .input-group-prepend .custom-file-control:before + .input-group-text, .input-group-prepend .input-group-text + .btn, .input-group-prepend .input-group-text + .custom-file-control:before, .input-group-prepend .input-group-text + .input-group-text {
+ margin-left: -1px
+}
+
+.input-group-prepend {
+ margin-right: -1px
+}
+
+.input-group-append {
+ margin-left: -1px
+}
+
+.input-group-text {
+ display: flex;
+ align-items: center;
+ padding: .4375rem 0;
+ margin-bottom: 0;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #495057;
+ text-align: center;
+ white-space: nowrap;
+ background-color: transparent;
+ border: 1px solid transparent;
+ border-radius: 0
+}
+
+.input-group-text input[type=checkbox], .input-group-text input[type=radio] {
+ margin-top: 0
+}
+
+.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group > .input-group-append:last-child > .custom-file-control:not(:last-child):not(.dropdown-toggle):before, .input-group > .input-group-append:last-child > .input-group-text:not(:last-child), .input-group > .input-group-append:not(:last-child) > .btn, .input-group > .input-group-append:not(:last-child) > .custom-file-control:before, .input-group > .input-group-append:not(:last-child) > .input-group-text, .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .custom-file-control:before, .input-group > .input-group-prepend > .input-group-text {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.input-group > .input-group-append > .btn, .input-group > .input-group-append > .custom-file-control:before, .input-group > .input-group-append > .input-group-text, .input-group > .input-group-prepend:first-child > .btn:not(:first-child), .input-group > .input-group-prepend:first-child > .custom-file-control:not(:first-child):before, .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child), .input-group > .input-group-prepend:not(:first-child) > .btn, .input-group > .input-group-prepend:not(:first-child) > .custom-file-control:before, .input-group > .input-group-prepend:not(:first-child) > .input-group-text {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.custom-control {
+ position: relative;
+ display: block;
+ min-height: 1.5rem;
+ padding-left: 1.5rem
+}
+
+.custom-control-inline {
+ display: inline-flex;
+ margin-right: 1rem
+}
+
+.custom-control-input {
+ position: absolute;
+ z-index: -1;
+ opacity: 0
+}
+
+.custom-control-input:checked ~ .custom-control-label:before {
+ color: #fff;
+ background-color: #009688;
+ box-shadow: none
+}
+
+.custom-control-input:focus ~ .custom-control-label:before {
+ box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(0, 150, 136, .25)
+}
+
+.custom-control-input:active ~ .custom-control-label:before {
+ color: #fff;
+ background-color: #4affee;
+ box-shadow: none
+}
+
+.custom-control-input:disabled ~ .custom-control-label {
+ color: #6c757d
+}
+
+.custom-control-input:disabled ~ .custom-control-label:before {
+ background-color: #e9ecef
+}
+
+.custom-control-label {
+ margin-bottom: 0
+}
+
+.custom-control-label:before {
+ pointer-events: none;
+ user-select: none;
+ background-color: #dee2e6;
+ box-shadow: inset 0 .25rem .25rem rgba(0, 0, 0, .1)
+}
+
+.custom-control-label:after, .custom-control-label:before {
+ position: absolute;
+ top: .25rem;
+ left: 0;
+ display: block;
+ width: 1rem;
+ height: 1rem;
+ content: ""
+}
+
+.custom-control-label:after {
+ background-repeat: no-repeat;
+ background-position: 50%;
+ background-size: 50% 50%
+}
+
+.custom-checkbox .custom-control-label:before {
+ border-radius: .125rem
+}
+
+.custom-checkbox .custom-control-input:checked ~ .custom-control-label:before {
+ background-color: #009688
+}
+
+.custom-checkbox .custom-control-input:checked ~ .custom-control-label:after {
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")
+}
+
+.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label:before {
+ background-color: #009688;
+ box-shadow: none
+}
+
+.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label:after {
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")
+}
+
+.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label:before {
+ background-color: rgba(0, 150, 136, .5)
+}
+
+.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label:before {
+ background-color: rgba(0, 150, 136, .5)
+}
+
+.custom-radio .custom-control-label:before {
+ border-radius: 50%
+}
+
+.custom-radio .custom-control-input:checked ~ .custom-control-label:before {
+ background-color: #009688
+}
+
+.custom-radio .custom-control-input:checked ~ .custom-control-label:after {
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")
+}
+
+.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label:before {
+ background-color: rgba(0, 150, 136, .5)
+}
+
+.custom-select {
+ display: inline-block;
+ width: 100%;
+ height: calc(2.4375rem + 2px);
+ padding: .375rem 1.75rem .375rem .75rem;
+ line-height: 1.5;
+ color: #495057;
+ vertical-align: middle;
+ background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;
+ background-size: 8px 10px;
+ border: 1px solid rgba(0, 0, 0, .26);
+ border-radius: .125rem;
+ appearance: none
+}
+
+.custom-select:focus {
+ border-color: #17ffe9;
+ outline: 0;
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075), 0 0 5px rgba(23, 255, 233, .5)
+}
+
+.custom-select:focus::-ms-value {
+ color: #495057;
+ background-color: transparent
+}
+
+.custom-select[multiple], .custom-select[size]:not([size="1"]) {
+ height: auto;
+ padding-right: .75rem;
+ background-image: none
+}
+
+.custom-select:disabled {
+ color: #6c757d;
+ background-color: #e9ecef
+}
+
+.custom-select::-ms-expand {
+ opacity: 0
+}
+
+.custom-select-sm {
+ height: calc(2.125rem + 2px);
+ font-size: 75%
+}
+
+.custom-select-lg, .custom-select-sm {
+ padding-top: .375rem;
+ padding-bottom: .375rem
+}
+
+.custom-select-lg {
+ height: calc(2.875rem + 2px);
+ font-size: 125%
+}
+
+.custom-file {
+ display: inline-block;
+ margin-bottom: 0
+}
+
+.custom-file, .custom-file-input {
+ position: relative;
+ width: 100%;
+ height: calc(2.4375rem + 2px)
+}
+
+.custom-file-input {
+ z-index: 2;
+ margin: 0;
+ opacity: 0
+}
+
+.custom-file-input:focus ~ .custom-file-control {
+ border-color: #17ffe9;
+ box-shadow: 0 0 0 .2rem rgba(0, 150, 136, .25)
+}
+
+.custom-file-input:focus ~ .custom-file-control:before {
+ border-color: #17ffe9
+}
+
+.custom-file-input:lang(en) ~ .custom-file-label:after {
+ content: "Browse"
+}
+
+.custom-file-label {
+ left: 0;
+ z-index: 1;
+ height: calc(2.4375rem + 2px);
+ border: 0 solid rgba(0, 0, 0, .26);
+ border-radius: 0;
+ box-shadow: none
+}
+
+.custom-file-label, .custom-file-label:after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: .46875rem 1rem;
+ line-height: 1.3;
+ color: #495057;
+ background-color: transparent
+}
+
+.custom-file-label:after {
+ bottom: 0;
+ z-index: 3;
+ display: block;
+ height: calc((2.4375rem + 2px) - 0 * 2);
+ content: "Browse";
+ border-left: 0 solid rgba(0, 0, 0, .26);
+ border-radius: 0 0 0 0
+}
+
+.nav {
+ display: flex;
+ flex-wrap: wrap;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none
+}
+
+.nav-link {
+ display: block;
+ padding: .5rem 1rem
+}
+
+.nav-link:focus, .nav-link:hover {
+ text-decoration: none
+}
+
+.nav-link.disabled {
+ color: #6c757d
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #dee2e6
+}
+
+.nav-tabs .nav-item {
+ margin-bottom: -1px
+}
+
+.nav-tabs .nav-link {
+ border: 1px solid transparent;
+ border-top-left-radius: .125rem;
+ border-top-right-radius: .125rem
+}
+
+.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover {
+ border-color: #e9ecef #e9ecef #dee2e6
+}
+
+.nav-tabs .nav-link.disabled {
+ color: #6c757d;
+ background-color: transparent;
+ border-color: transparent
+}
+
+.nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active {
+ color: #495057;
+ background-color: #fafafa;
+ border-color: #dee2e6 #dee2e6 #fafafa
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0
+}
+
+.nav-pills .nav-link {
+ border-radius: .125rem
+}
+
+.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
+ color: #fff;
+ background-color: #009688
+}
+
+.nav-fill .nav-item {
+ flex: 1 1 auto;
+ text-align: center
+}
+
+.nav-justified .nav-item {
+ flex-basis: 0;
+ flex-grow: 1;
+ text-align: center
+}
+
+.tab-content > .tab-pane {
+ display: none
+}
+
+.tab-content > .active {
+ display: block
+}
+
+.navbar {
+ position: relative;
+ padding: .5rem 1rem
+}
+
+.navbar, .navbar > .container, .navbar > .container-fluid {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: space-between
+}
+
+.navbar-brand {
+ display: inline-block;
+ padding-top: .3125rem;
+ padding-bottom: .3125rem;
+ margin-right: 1rem;
+ font-size: 1.25rem;
+ line-height: inherit;
+ white-space: nowrap
+}
+
+.navbar-brand:focus, .navbar-brand:hover {
+ text-decoration: none
+}
+
+.navbar-nav {
+ display: flex;
+ flex-direction: column;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none
+}
+
+.navbar-nav .nav-link {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.navbar-nav .dropdown-menu {
+ position: static;
+ float: none
+}
+
+.navbar-text {
+ display: inline-block;
+ padding-top: .5rem;
+ padding-bottom: .5rem
+}
+
+.navbar-collapse {
+ flex-basis: 100%;
+ flex-grow: 1;
+ align-items: center
+}
+
+.navbar-toggler {
+ padding: .25rem .75rem;
+ font-size: 1.25rem;
+ line-height: 1;
+ background-color: transparent;
+ border: 1px solid transparent;
+ border-radius: .125rem
+}
+
+.navbar-toggler:focus, .navbar-toggler:hover {
+ text-decoration: none
+}
+
+.navbar-toggler:not(:disabled):not(.disabled) {
+ cursor: pointer
+}
+
+.navbar-toggler-icon {
+ display: inline-block;
+ width: 1.5em;
+ height: 1.5em;
+ vertical-align: middle;
+ content: "";
+ background: no-repeat 50%;
+ background-size: 100% 100%
+}
+
+@media (max-width: 575.98px) {
+ .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid {
+ padding-right: 0;
+ padding-left: 0
+ }
+}
+
+@media (min-width: 576px) {
+ .navbar-expand-sm {
+ flex-flow: row nowrap;
+ justify-content: flex-start
+ }
+
+ .navbar-expand-sm .navbar-nav {
+ flex-direction: row
+ }
+
+ .navbar-expand-sm .navbar-nav .dropdown-menu {
+ position: absolute
+ }
+
+ .navbar-expand-sm .navbar-nav .dropdown-menu-right {
+ right: 0;
+ left: auto
+ }
+
+ .navbar-expand-sm .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid {
+ flex-wrap: nowrap
+ }
+
+ .navbar-expand-sm .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-sm .navbar-toggler {
+ display: none
+ }
+
+ .navbar-expand-sm .dropup .dropdown-menu {
+ top: auto;
+ bottom: 100%
+ }
+}
+
+@media (max-width: 767.98px) {
+ .navbar-expand-md > .container, .navbar-expand-md > .container-fluid {
+ padding-right: 0;
+ padding-left: 0
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-expand-md {
+ flex-flow: row nowrap;
+ justify-content: flex-start
+ }
+
+ .navbar-expand-md .navbar-nav {
+ flex-direction: row
+ }
+
+ .navbar-expand-md .navbar-nav .dropdown-menu {
+ position: absolute
+ }
+
+ .navbar-expand-md .navbar-nav .dropdown-menu-right {
+ right: 0;
+ left: auto
+ }
+
+ .navbar-expand-md .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-md > .container, .navbar-expand-md > .container-fluid {
+ flex-wrap: nowrap
+ }
+
+ .navbar-expand-md .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-md .navbar-toggler {
+ display: none
+ }
+
+ .navbar-expand-md .dropup .dropdown-menu {
+ top: auto;
+ bottom: 100%
+ }
+}
+
+@media (max-width: 991.98px) {
+ .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid {
+ padding-right: 0;
+ padding-left: 0
+ }
+}
+
+@media (min-width: 992px) {
+ .navbar-expand-lg {
+ flex-flow: row nowrap;
+ justify-content: flex-start
+ }
+
+ .navbar-expand-lg .navbar-nav {
+ flex-direction: row
+ }
+
+ .navbar-expand-lg .navbar-nav .dropdown-menu {
+ position: absolute
+ }
+
+ .navbar-expand-lg .navbar-nav .dropdown-menu-right {
+ right: 0;
+ left: auto
+ }
+
+ .navbar-expand-lg .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid {
+ flex-wrap: nowrap
+ }
+
+ .navbar-expand-lg .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-lg .navbar-toggler {
+ display: none
+ }
+
+ .navbar-expand-lg .dropup .dropdown-menu {
+ top: auto;
+ bottom: 100%
+ }
+}
+
+@media (max-width: 1199.98px) {
+ .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid {
+ padding-right: 0;
+ padding-left: 0
+ }
+}
+
+@media (min-width: 1200px) {
+ .navbar-expand-xl {
+ flex-flow: row nowrap;
+ justify-content: flex-start
+ }
+
+ .navbar-expand-xl .navbar-nav {
+ flex-direction: row
+ }
+
+ .navbar-expand-xl .navbar-nav .dropdown-menu {
+ position: absolute
+ }
+
+ .navbar-expand-xl .navbar-nav .dropdown-menu-right {
+ right: 0;
+ left: auto
+ }
+
+ .navbar-expand-xl .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+ }
+
+ .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid {
+ flex-wrap: nowrap
+ }
+
+ .navbar-expand-xl .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+ }
+
+ .navbar-expand-xl .navbar-toggler {
+ display: none
+ }
+
+ .navbar-expand-xl .dropup .dropdown-menu {
+ top: auto;
+ bottom: 100%
+ }
+}
+
+.navbar-expand {
+ flex-flow: row nowrap;
+ justify-content: flex-start
+}
+
+.navbar-expand > .container, .navbar-expand > .container-fluid {
+ padding-right: 0;
+ padding-left: 0
+}
+
+.navbar-expand .navbar-nav {
+ flex-direction: row
+}
+
+.navbar-expand .navbar-nav .dropdown-menu {
+ position: absolute
+}
+
+.navbar-expand .navbar-nav .dropdown-menu-right {
+ right: 0;
+ left: auto
+}
+
+.navbar-expand .navbar-nav .nav-link {
+ padding-right: .5rem;
+ padding-left: .5rem
+}
+
+.navbar-expand > .container, .navbar-expand > .container-fluid {
+ flex-wrap: nowrap
+}
+
+.navbar-expand .navbar-collapse {
+ display: flex !important;
+ flex-basis: auto
+}
+
+.navbar-expand .navbar-toggler {
+ display: none
+}
+
+.navbar-expand .dropup .dropdown-menu {
+ top: auto;
+ bottom: 100%
+}
+
+.navbar-light .navbar-brand, .navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover {
+ color: rgba(0, 0, 0, .9)
+}
+
+.navbar-light .navbar-nav .nav-link {
+ color: rgba(0, 0, 0, .5)
+}
+
+.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover {
+ color: rgba(0, 0, 0, .7)
+}
+
+.navbar-light .navbar-nav .nav-link.disabled {
+ color: rgba(0, 0, 0, .3)
+}
+
+.navbar-light .navbar-nav .active > .nav-link, .navbar-light .navbar-nav .nav-link.active, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .show > .nav-link {
+ color: rgba(0, 0, 0, .9)
+}
+
+.navbar-light .navbar-toggler {
+ color: rgba(0, 0, 0, .5);
+ border-color: rgba(0, 0, 0, .1)
+}
+
+.navbar-light .navbar-toggler-icon {
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")
+}
+
+.navbar-light .navbar-text {
+ color: rgba(0, 0, 0, .5)
+}
+
+.navbar-light .navbar-text a, .navbar-light .navbar-text a:focus, .navbar-light .navbar-text a:hover {
+ color: rgba(0, 0, 0, .9)
+}
+
+.navbar-dark .navbar-brand, .navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover {
+ color: #fff
+}
+
+.navbar-dark .navbar-nav .nav-link {
+ color: hsla(0, 0%, 100%, .5)
+}
+
+.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover {
+ color: hsla(0, 0%, 100%, .75)
+}
+
+.navbar-dark .navbar-nav .nav-link.disabled {
+ color: hsla(0, 0%, 100%, .25)
+}
+
+.navbar-dark .navbar-nav .active > .nav-link, .navbar-dark .navbar-nav .nav-link.active, .navbar-dark .navbar-nav .nav-link.show, .navbar-dark .navbar-nav .show > .nav-link {
+ color: #fff
+}
+
+.navbar-dark .navbar-toggler {
+ color: hsla(0, 0%, 100%, .5);
+ border-color: hsla(0, 0%, 100%, .1)
+}
+
+.navbar-dark .navbar-toggler-icon {
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")
+}
+
+.navbar-dark .navbar-text {
+ color: hsla(0, 0%, 100%, .5)
+}
+
+.navbar-dark .navbar-text a, .navbar-dark .navbar-text a:focus, .navbar-dark .navbar-text a:hover {
+ color: #fff
+}
+
+.card {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ min-width: 0;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: border-box;
+ border: 1px solid rgba(0, 0, 0, .12);
+ border-radius: .125rem
+}
+
+.card > hr {
+ margin-right: 0;
+ margin-left: 0
+}
+
+.card > .list-group:first-child .list-group-item:first-child {
+ border-top-left-radius: .125rem;
+ border-top-right-radius: .125rem
+}
+
+.card > .list-group:last-child .list-group-item:last-child {
+ border-bottom-right-radius: .125rem;
+ border-bottom-left-radius: .125rem
+}
+
+.card-body {
+ flex: 1 1 auto;
+ padding: 1.25rem
+}
+
+.card-title {
+ margin-bottom: .75rem
+}
+
+.card-subtitle {
+ margin-top: -.375rem
+}
+
+.card-subtitle, .card-text:last-child {
+ margin-bottom: 0
+}
+
+.card-link:hover {
+ text-decoration: none
+}
+
+.card-link + .card-link {
+ margin-left: 1.25rem
+}
+
+.card-header {
+ padding: .75rem 1.25rem;
+ margin-bottom: 0;
+ background-color: #fff;
+ border-bottom: 1px solid rgba(0, 0, 0, .12)
+}
+
+.card-header:first-child {
+ border-radius: calc(.125rem - 1px) calc(.125rem - 1px) 0 0
+}
+
+.card-header + .list-group .list-group-item:first-child {
+ border-top: 0
+}
+
+.card-footer {
+ padding: .75rem 1.25rem;
+ background-color: #fff;
+ border-top: 1px solid rgba(0, 0, 0, .12)
+}
+
+.card-footer:last-child {
+ border-radius: 0 0 calc(.125rem - 1px) calc(.125rem - 1px)
+}
+
+.card-header-tabs {
+ margin-bottom: -.75rem;
+ border-bottom: 0
+}
+
+.card-header-pills, .card-header-tabs {
+ margin-right: -.625rem;
+ margin-left: -.625rem
+}
+
+.card-img-overlay {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1.25rem
+}
+
+.card-img {
+ width: 100%;
+ border-radius: calc(.125rem - 1px)
+}
+
+.card-img-top {
+ width: 100%;
+ border-top-left-radius: calc(.125rem - 1px);
+ border-top-right-radius: calc(.125rem - 1px)
+}
+
+.card-img-bottom {
+ width: 100%;
+ border-bottom-right-radius: calc(.125rem - 1px);
+ border-bottom-left-radius: calc(.125rem - 1px)
+}
+
+.card-deck {
+ display: flex;
+ flex-direction: column
+}
+
+.card-deck .card {
+ margin-bottom: 15px
+}
+
+@media (min-width: 576px) {
+ .card-deck {
+ flex-flow: row wrap;
+ margin-right: -15px;
+ margin-left: -15px
+ }
+
+ .card-deck .card {
+ display: flex;
+ flex: 1 0 0%;
+ flex-direction: column;
+ margin-right: 15px;
+ margin-bottom: 0;
+ margin-left: 15px
+ }
+}
+
+.card-group {
+ display: flex;
+ flex-direction: column
+}
+
+.card-group > .card {
+ margin-bottom: 15px
+}
+
+@media (min-width: 576px) {
+ .card-group {
+ flex-flow: row wrap
+ }
+
+ .card-group > .card {
+ flex: 1 0 0%;
+ margin-bottom: 0
+ }
+
+ .card-group > .card + .card {
+ margin-left: 0;
+ border-left: 0
+ }
+
+ .card-group > .card:first-child {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+ }
+
+ .card-group > .card:first-child .card-header, .card-group > .card:first-child .card-img-top {
+ border-top-right-radius: 0
+ }
+
+ .card-group > .card:first-child .card-footer, .card-group > .card:first-child .card-img-bottom {
+ border-bottom-right-radius: 0
+ }
+
+ .card-group > .card:last-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0
+ }
+
+ .card-group > .card:last-child .card-header, .card-group > .card:last-child .card-img-top {
+ border-top-left-radius: 0
+ }
+
+ .card-group > .card:last-child .card-footer, .card-group > .card:last-child .card-img-bottom {
+ border-bottom-left-radius: 0
+ }
+
+ .card-group > .card:only-child {
+ border-radius: .125rem
+ }
+
+ .card-group > .card:only-child .card-header, .card-group > .card:only-child .card-img-top {
+ border-top-left-radius: .125rem;
+ border-top-right-radius: .125rem
+ }
+
+ .card-group > .card:only-child .card-footer, .card-group > .card:only-child .card-img-bottom {
+ border-bottom-right-radius: .125rem;
+ border-bottom-left-radius: .125rem
+ }
+
+ .card-group > .card:not(:first-child):not(:last-child):not(:only-child), .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer, .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top {
+ border-radius: 0
+ }
+}
+
+.card-columns .card {
+ margin-bottom: .75rem
+}
+
+@media (min-width: 576px) {
+ .card-columns {
+ column-count: 3;
+ column-gap: 1.25rem
+ }
+
+ .card-columns .card {
+ display: inline-block;
+ width: 100%
+ }
+}
+
+.breadcrumb {
+ display: flex;
+ flex-wrap: wrap;
+ padding: .75rem 1rem;
+ margin-bottom: 1rem;
+ list-style: none;
+ background-color: #e9ecef;
+ border-radius: .125rem
+}
+
+.breadcrumb-item + .breadcrumb-item:before {
+ display: inline-block;
+ padding-right: .5rem;
+ padding-left: .5rem;
+ color: #6c757d;
+ content: "/"
+}
+
+.breadcrumb-item + .breadcrumb-item:hover:before {
+ text-decoration: underline;
+ text-decoration: none
+}
+
+.breadcrumb-item.active {
+ color: #6c757d
+}
+
+.pagination {
+ display: flex;
+ padding-left: 0;
+ list-style: none;
+ border-radius: .125rem
+}
+
+.page-link {
+ position: relative;
+ display: block;
+ padding: .5rem .75rem;
+ margin-left: 0;
+ line-height: 1.25;
+ color: #009688;
+ background-color: transparent;
+ border: 0 solid #dee2e6
+}
+
+.page-link:hover {
+ color: #004a43;
+ text-decoration: none;
+ background-color: #e9ecef;
+ border-color: #dee2e6
+}
+
+.page-link:focus {
+ z-index: 2;
+ outline: 0;
+ box-shadow: 0 0 0 .2rem rgba(0, 150, 136, .25)
+}
+
+.page-link:not(:disabled):not(.disabled) {
+ cursor: pointer
+}
+
+.page-item:first-child .page-link {
+ margin-left: 0;
+ border-top-left-radius: .125rem;
+ border-bottom-left-radius: .125rem
+}
+
+.page-item:last-child .page-link {
+ border-top-right-radius: .125rem;
+ border-bottom-right-radius: .125rem
+}
+
+.page-item.active .page-link {
+ z-index: 1;
+ color: #fff;
+ background-color: #009688;
+ border-color: #009688
+}
+
+.page-item.disabled .page-link {
+ color: #6c757d;
+ pointer-events: none;
+ cursor: auto;
+ background-color: transparent;
+ border-color: #dee2e6
+}
+
+.pagination-lg .page-item:first-child .page-link {
+ border-top-left-radius: .3rem;
+ border-bottom-left-radius: .3rem
+}
+
+.pagination-lg .page-item:last-child .page-link {
+ border-top-right-radius: .3rem;
+ border-bottom-right-radius: .3rem
+}
+
+.pagination-sm .page-item:first-child .page-link {
+ border-top-left-radius: .0625rem;
+ border-bottom-left-radius: .0625rem
+}
+
+.pagination-sm .page-item:last-child .page-link {
+ border-top-right-radius: .0625rem;
+ border-bottom-right-radius: .0625rem
+}
+
+.badge {
+ display: inline-block;
+ padding: .25em .4em;
+ font-size: 75%;
+ font-weight: 700;
+ line-height: 1;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .125rem
+}
+
+.badge:empty {
+ display: none
+}
+
+.btn .badge, .custom-file-control:before .badge {
+ position: relative;
+ top: -1px
+}
+
+.badge-pill {
+ padding-right: .6em;
+ padding-left: .6em;
+ border-radius: 10rem
+}
+
+.badge-primary {
+ color: #fff;
+ background-color: #009688
+}
+
+.badge-primary[href]:focus, .badge-primary[href]:hover {
+ color: #fff;
+ text-decoration: none;
+ background-color: #00635a
+}
+
+.badge-secondary {
+ color: #fff;
+ background-color: #6c757d
+}
+
+.badge-secondary[href]:focus, .badge-secondary[href]:hover {
+ color: #fff;
+ text-decoration: none;
+ background-color: #545b62
+}
+
+.badge-success {
+ color: #fff;
+ background-color: #4caf50
+}
+
+.badge-success[href]:focus, .badge-success[href]:hover {
+ color: #fff;
+ text-decoration: none;
+ background-color: #3d8b40
+}
+
+.badge-info {
+ color: #fff;
+ background-color: #03a9f4
+}
+
+.badge-info[href]:focus, .badge-info[href]:hover {
+ color: #fff;
+ text-decoration: none;
+ background-color: #0286c2
+}
+
+.badge-warning {
+ color: #fff;
+ background-color: #ff5722
+}
+
+.badge-warning[href]:focus, .badge-warning[href]:hover {
+ color: #fff;
+ text-decoration: none;
+ background-color: #ee3900
+}
+
+.badge-danger {
+ color: #fff;
+ background-color: #f44336
+}
+
+.badge-danger[href]:focus, .badge-danger[href]:hover {
+ color: #fff;
+ text-decoration: none;
+ background-color: #ea1c0d
+}
+
+.badge-light {
+ color: #212529;
+ background-color: #f5f5f5
+}
+
+.badge-light[href]:focus, .badge-light[href]:hover {
+ color: #212529;
+ text-decoration: none;
+ background-color: #dcdcdc
+}
+
+.badge-dark {
+ color: #fff;
+ background-color: #424242
+}
+
+.badge-dark[href]:focus, .badge-dark[href]:hover {
+ color: #fff;
+ text-decoration: none;
+ background-color: #292929
+}
+
+.jumbotron {
+ padding: 2rem 1rem;
+ margin-bottom: 2rem;
+ background-color: #e9ecef;
+ border-radius: .3rem
+}
+
+@media (min-width: 576px) {
+ .jumbotron {
+ padding: 4rem 2rem
+ }
+}
+
+.jumbotron-fluid {
+ padding-right: 0;
+ padding-left: 0;
+ border-radius: 0
+}
+
+.alert {
+ position: relative;
+ padding: .75rem 1.25rem;
+ margin-bottom: 1rem;
+ border: 1px solid transparent;
+ border-radius: .125rem
+}
+
+.alert-heading {
+ color: inherit
+}
+
+.alert-link {
+ font-weight: 700
+}
+
+.alert-dismissible {
+ padding-right: 4rem
+}
+
+.alert-dismissible .close {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: .75rem 1.25rem;
+ color: inherit
+}
+
+.alert-primary {
+ color: #004e47;
+ background-color: #cceae7;
+ border-color: #b8e2de
+}
+
+.alert-primary hr {
+ border-top-color: #a6dbd6
+}
+
+.alert-primary .alert-link {
+ color: #001b19
+}
+
+.alert-secondary {
+ color: #383d41;
+ background-color: #e2e3e5;
+ border-color: #d6d8db
+}
+
+.alert-secondary hr {
+ border-top-color: #c8cbcf
+}
+
+.alert-secondary .alert-link {
+ color: #202326
+}
+
+.alert-success {
+ color: #285b2a;
+ background-color: #dbefdc;
+ border-color: #cde9ce
+}
+
+.alert-success hr {
+ border-top-color: #bbe1bd
+}
+
+.alert-success .alert-link {
+ color: #18381a
+}
+
+.alert-info {
+ color: #02587f;
+ background-color: #cdeefd;
+ border-color: #b8e7fc
+}
+
+.alert-info hr {
+ border-top-color: #a0dffb
+}
+
+.alert-info .alert-link {
+ color: #01354d
+}
+
+.alert-warning {
+ color: #852d12;
+ background-color: #ffddd3;
+ border-color: #ffd0c1
+}
+
+.alert-warning hr {
+ border-top-color: #ffbda8
+}
+
+.alert-warning .alert-link {
+ color: #581e0c
+}
+
+.alert-danger {
+ color: #7f231c;
+ background-color: #fdd9d7;
+ border-color: #fccac7
+}
+
+.alert-danger hr {
+ border-top-color: #fbb3af
+}
+
+.alert-danger .alert-link {
+ color: #551713
+}
+
+.alert-light {
+ color: #7f7f7f;
+ background-color: #fdfdfd;
+ border-color: #fcfcfc
+}
+
+.alert-light hr {
+ border-top-color: #efefef
+}
+
+.alert-light .alert-link {
+ color: #666
+}
+
+.alert-dark {
+ color: #222;
+ background-color: #d9d9d9;
+ border-color: #cacaca
+}
+
+.alert-dark hr {
+ border-top-color: #bdbdbd
+}
+
+.alert-dark .alert-link {
+ color: #090909
+}
+
+@keyframes a {
+ 0% {
+ background-position: 1rem 0
+ }
+ to {
+ background-position: 0 0
+ }
+}
+
+.progress {
+ display: flex;
+ height: 1rem;
+ overflow: hidden;
+ font-size: .75rem;
+ background-color: #e9ecef;
+ border-radius: .125rem;
+ box-shadow: inset 0 .1rem .1rem rgba(0, 0, 0, .1)
+}
+
+.progress-bar {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ color: #fff;
+ text-align: center;
+ background-color: #009688;
+ transition: width .6s ease
+}
+
+.progress-bar-striped {
+ background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent);
+ background-size: 1rem 1rem
+}
+
+.progress-bar-animated {
+ animation: a 1s linear infinite
+}
+
+.media {
+ display: flex;
+ align-items: flex-start
+}
+
+.media-body {
+ flex: 1
+}
+
+.list-group {
+ padding-left: 0;
+ margin-bottom: 0
+}
+
+.list-group-item-action {
+ width: 100%;
+ color: #495057;
+ text-align: inherit
+}
+
+.list-group-item-action:focus, .list-group-item-action:hover {
+ color: #495057;
+ text-decoration: none;
+ background-color: #f8f9fa
+}
+
+.list-group-item-action:active {
+ color: #212529;
+ background-color: #e9ecef
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: .75rem 1.25rem;
+ margin-bottom: 0;
+ background-color: inherit;
+ border: 0 solid rgba(0, 0, 0, .125)
+}
+
+.list-group-item:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.list-group-item:focus, .list-group-item:hover {
+ z-index: 1;
+ text-decoration: none
+}
+
+.list-group-item.disabled, .list-group-item:disabled {
+ color: #6c757d;
+ background-color: inherit
+}
+
+.list-group-item.active {
+ z-index: 2;
+ color: #fff;
+ background-color: #009688;
+ border-color: #009688
+}
+
+.list-group-flush .list-group-item {
+ border-right: 0;
+ border-left: 0;
+ border-radius: 0
+}
+
+.list-group-flush:first-child .list-group-item:first-child {
+ border-top: 0
+}
+
+.list-group-flush:last-child .list-group-item:last-child {
+ border-bottom: 0
+}
+
+.list-group-item-primary {
+ color: #004e47;
+ background-color: #b8e2de
+}
+
+.list-group-item-primary.list-group-item-action:focus, .list-group-item-primary.list-group-item-action:hover {
+ color: #004e47;
+ background-color: #a6dbd6
+}
+
+.list-group-item-primary.list-group-item-action.active {
+ color: #fff;
+ background-color: #004e47;
+ border-color: #004e47
+}
+
+.list-group-item-secondary {
+ color: #383d41;
+ background-color: #d6d8db
+}
+
+.list-group-item-secondary.list-group-item-action:focus, .list-group-item-secondary.list-group-item-action:hover {
+ color: #383d41;
+ background-color: #c8cbcf
+}
+
+.list-group-item-secondary.list-group-item-action.active {
+ color: #fff;
+ background-color: #383d41;
+ border-color: #383d41
+}
+
+.list-group-item-success {
+ color: #285b2a;
+ background-color: #cde9ce
+}
+
+.list-group-item-success.list-group-item-action:focus, .list-group-item-success.list-group-item-action:hover {
+ color: #285b2a;
+ background-color: #bbe1bd
+}
+
+.list-group-item-success.list-group-item-action.active {
+ color: #fff;
+ background-color: #285b2a;
+ border-color: #285b2a
+}
+
+.list-group-item-info {
+ color: #02587f;
+ background-color: #b8e7fc
+}
+
+.list-group-item-info.list-group-item-action:focus, .list-group-item-info.list-group-item-action:hover {
+ color: #02587f;
+ background-color: #a0dffb
+}
+
+.list-group-item-info.list-group-item-action.active {
+ color: #fff;
+ background-color: #02587f;
+ border-color: #02587f
+}
+
+.list-group-item-warning {
+ color: #852d12;
+ background-color: #ffd0c1
+}
+
+.list-group-item-warning.list-group-item-action:focus, .list-group-item-warning.list-group-item-action:hover {
+ color: #852d12;
+ background-color: #ffbda8
+}
+
+.list-group-item-warning.list-group-item-action.active {
+ color: #fff;
+ background-color: #852d12;
+ border-color: #852d12
+}
+
+.list-group-item-danger {
+ color: #7f231c;
+ background-color: #fccac7
+}
+
+.list-group-item-danger.list-group-item-action:focus, .list-group-item-danger.list-group-item-action:hover {
+ color: #7f231c;
+ background-color: #fbb3af
+}
+
+.list-group-item-danger.list-group-item-action.active {
+ color: #fff;
+ background-color: #7f231c;
+ border-color: #7f231c
+}
+
+.list-group-item-light {
+ color: #7f7f7f;
+ background-color: #fcfcfc
+}
+
+.list-group-item-light.list-group-item-action:focus, .list-group-item-light.list-group-item-action:hover {
+ color: #7f7f7f;
+ background-color: #efefef
+}
+
+.list-group-item-light.list-group-item-action.active {
+ color: #fff;
+ background-color: #7f7f7f;
+ border-color: #7f7f7f
+}
+
+.list-group-item-dark {
+ color: #222;
+ background-color: #cacaca
+}
+
+.list-group-item-dark.list-group-item-action:focus, .list-group-item-dark.list-group-item-action:hover {
+ color: #222;
+ background-color: #bdbdbd
+}
+
+.list-group-item-dark.list-group-item-action.active {
+ color: #fff;
+ background-color: #222;
+ border-color: #222
+}
+
+.close {
+ float: right;
+ font-size: 1.5rem;
+ font-weight: 700;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ opacity: .5
+}
+
+.close:focus, .close:hover {
+ color: #000;
+ text-decoration: none;
+ opacity: .75
+}
+
+.close:not(:disabled):not(.disabled) {
+ cursor: pointer
+}
+
+button.close {
+ padding: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-appearance: none
+}
+
+.modal, .modal-open {
+ overflow: hidden
+}
+
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ outline: 0
+}
+
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: .5rem;
+ pointer-events: none
+}
+
+.modal.fade .modal-dialog {
+ transition: transform .3s ease-out;
+ transform: translateY(-25%)
+}
+
+.modal.show .modal-dialog {
+ transform: translate(0)
+}
+
+.modal-dialog-centered {
+ display: flex;
+ align-items: center;
+ min-height: calc(100% - 1rem)
+}
+
+.modal-content {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ pointer-events: auto;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: .3rem;
+ box-shadow: 0 .25rem .5rem rgba(0, 0, 0, .5);
+ outline: 0
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000
+}
+
+.modal-backdrop.fade {
+ opacity: 0
+}
+
+.modal-backdrop.show {
+ opacity: .26
+}
+
+.modal-header {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ padding: 1rem;
+ border-bottom: 1px solid #e9ecef;
+ border-top-left-radius: .3rem;
+ border-top-right-radius: .3rem
+}
+
+.modal-header .close {
+ padding: 1rem;
+ margin: -1rem -1rem -1rem auto
+}
+
+.modal-title {
+ margin-bottom: 0;
+ line-height: 1.5
+}
+
+.modal-body {
+ position: relative;
+ flex: 1 1 auto;
+ padding: 1rem
+}
+
+.modal-footer {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ padding: 1rem;
+ border-top: 1px solid #e9ecef
+}
+
+.modal-footer > :not(:first-child) {
+ margin-left: .25rem
+}
+
+.modal-footer > :not(:last-child) {
+ margin-right: .25rem
+}
+
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll
+}
+
+@media (min-width: 576px) {
+ .modal-dialog {
+ max-width: 500px;
+ margin: 1.75rem auto
+ }
+
+ .modal-dialog-centered {
+ min-height: calc(100% - 3.5rem)
+ }
+
+ .modal-content {
+ box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .5)
+ }
+
+ .modal-sm {
+ max-width: 300px
+ }
+}
+
+@media (min-width: 992px) {
+ .modal-lg {
+ max-width: 800px
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ margin: 0;
+ font-family: Roboto, Helvetica, Arial, sans-serif;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: .875rem;
+ word-wrap: break-word;
+ opacity: 0
+}
+
+.tooltip.show {
+ opacity: .9
+}
+
+.tooltip .arrow {
+ position: absolute;
+ display: block;
+ width: .8rem;
+ height: .4rem
+}
+
+.tooltip .arrow:before {
+ position: absolute;
+ content: "";
+ border-color: transparent;
+ border-style: solid
+}
+
+.bs-tooltip-auto[x-placement^=top], .bs-tooltip-top {
+ padding: .4rem 0
+}
+
+.bs-tooltip-auto[x-placement^=top] .arrow, .bs-tooltip-top .arrow {
+ bottom: 0
+}
+
+.bs-tooltip-auto[x-placement^=top] .arrow:before, .bs-tooltip-top .arrow:before {
+ top: 0;
+ border-width: .4rem .4rem 0;
+ border-top-color: rgba(97, 97, 97, .9)
+}
+
+.bs-tooltip-auto[x-placement^=right], .bs-tooltip-right {
+ padding: 0 .4rem
+}
+
+.bs-tooltip-auto[x-placement^=right] .arrow, .bs-tooltip-right .arrow {
+ left: 0;
+ width: .4rem;
+ height: .8rem
+}
+
+.bs-tooltip-auto[x-placement^=right] .arrow:before, .bs-tooltip-right .arrow:before {
+ right: 0;
+ border-width: .4rem .4rem .4rem 0;
+ border-right-color: rgba(97, 97, 97, .9)
+}
+
+.bs-tooltip-auto[x-placement^=bottom], .bs-tooltip-bottom {
+ padding: .4rem 0
+}
+
+.bs-tooltip-auto[x-placement^=bottom] .arrow, .bs-tooltip-bottom .arrow {
+ top: 0
+}
+
+.bs-tooltip-auto[x-placement^=bottom] .arrow:before, .bs-tooltip-bottom .arrow:before {
+ bottom: 0;
+ border-width: 0 .4rem .4rem;
+ border-bottom-color: rgba(97, 97, 97, .9)
+}
+
+.bs-tooltip-auto[x-placement^=left], .bs-tooltip-left {
+ padding: 0 .4rem
+}
+
+.bs-tooltip-auto[x-placement^=left] .arrow, .bs-tooltip-left .arrow {
+ right: 0;
+ width: .4rem;
+ height: .8rem
+}
+
+.bs-tooltip-auto[x-placement^=left] .arrow:before, .bs-tooltip-left .arrow:before {
+ left: 0;
+ border-width: .4rem 0 .4rem .4rem;
+ border-left-color: rgba(97, 97, 97, .9)
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: .25rem .5rem;
+ color: #fff;
+ text-align: center;
+ background-color: rgba(97, 97, 97, .9);
+ border-radius: .125rem
+}
+
+.popover {
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ max-width: 276px;
+ font-family: Roboto, Helvetica, Arial, sans-serif;
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: .875rem;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: .3rem;
+ box-shadow: 0 .25rem .5rem rgba(0, 0, 0, .2)
+}
+
+.popover, .popover .arrow {
+ position: absolute;
+ display: block
+}
+
+.popover .arrow {
+ width: 1rem;
+ height: .5rem;
+ margin: 0 .3rem
+}
+
+.popover .arrow:after, .popover .arrow:before {
+ position: absolute;
+ display: block;
+ content: "";
+ border-color: transparent;
+ border-style: solid
+}
+
+.bs-popover-auto[x-placement^=top], .bs-popover-top {
+ margin-bottom: .5rem
+}
+
+.bs-popover-auto[x-placement^=top] .arrow, .bs-popover-top .arrow {
+ bottom: calc((.5rem + 1px) * -1)
+}
+
+.bs-popover-auto[x-placement^=top] .arrow:after, .bs-popover-auto[x-placement^=top] .arrow:before, .bs-popover-top .arrow:after, .bs-popover-top .arrow:before {
+ border-width: .5rem .5rem 0
+}
+
+.bs-popover-auto[x-placement^=top] .arrow:before, .bs-popover-top .arrow:before {
+ bottom: 0;
+ border-top-color: rgba(0, 0, 0, .25)
+}
+
+.bs-popover-auto[x-placement^=top] .arrow:after, .bs-popover-top .arrow:after {
+ bottom: 1px;
+ border-top-color: #fff
+}
+
+.bs-popover-auto[x-placement^=right], .bs-popover-right {
+ margin-left: .5rem
+}
+
+.bs-popover-auto[x-placement^=right] .arrow, .bs-popover-right .arrow {
+ left: calc((.5rem + 1px) * -1);
+ width: .5rem;
+ height: 1rem;
+ margin: .3rem 0
+}
+
+.bs-popover-auto[x-placement^=right] .arrow:after, .bs-popover-auto[x-placement^=right] .arrow:before, .bs-popover-right .arrow:after, .bs-popover-right .arrow:before {
+ border-width: .5rem .5rem .5rem 0
+}
+
+.bs-popover-auto[x-placement^=right] .arrow:before, .bs-popover-right .arrow:before {
+ left: 0;
+ border-right-color: rgba(0, 0, 0, .25)
+}
+
+.bs-popover-auto[x-placement^=right] .arrow:after, .bs-popover-right .arrow:after {
+ left: 1px;
+ border-right-color: #fff
+}
+
+.bs-popover-auto[x-placement^=bottom], .bs-popover-bottom {
+ margin-top: .5rem
+}
+
+.bs-popover-auto[x-placement^=bottom] .arrow, .bs-popover-bottom .arrow {
+ top: calc((.5rem + 1px) * -1)
+}
+
+.bs-popover-auto[x-placement^=bottom] .arrow:after, .bs-popover-auto[x-placement^=bottom] .arrow:before, .bs-popover-bottom .arrow:after, .bs-popover-bottom .arrow:before {
+ border-width: 0 .5rem .5rem
+}
+
+.bs-popover-auto[x-placement^=bottom] .arrow:before, .bs-popover-bottom .arrow:before {
+ top: 0;
+ border-bottom-color: rgba(0, 0, 0, .25)
+}
+
+.bs-popover-auto[x-placement^=bottom] .arrow:after, .bs-popover-bottom .arrow:after {
+ top: 1px;
+ border-bottom-color: #fff
+}
+
+.bs-popover-auto[x-placement^=bottom] .popover-header:before, .bs-popover-bottom .popover-header:before {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ display: block;
+ width: 1rem;
+ margin-left: -.5rem;
+ content: "";
+ border-bottom: 1px solid #f7f7f7
+}
+
+.bs-popover-auto[x-placement^=left], .bs-popover-left {
+ margin-right: .5rem
+}
+
+.bs-popover-auto[x-placement^=left] .arrow, .bs-popover-left .arrow {
+ right: calc((.5rem + 1px) * -1);
+ width: .5rem;
+ height: 1rem;
+ margin: .3rem 0
+}
+
+.bs-popover-auto[x-placement^=left] .arrow:after, .bs-popover-auto[x-placement^=left] .arrow:before, .bs-popover-left .arrow:after, .bs-popover-left .arrow:before {
+ border-width: .5rem 0 .5rem .5rem
+}
+
+.bs-popover-auto[x-placement^=left] .arrow:before, .bs-popover-left .arrow:before {
+ right: 0;
+ border-left-color: rgba(0, 0, 0, .25)
+}
+
+.bs-popover-auto[x-placement^=left] .arrow:after, .bs-popover-left .arrow:after {
+ right: 1px;
+ border-left-color: #fff
+}
+
+.popover-header {
+ padding: .5rem .75rem;
+ margin-bottom: 0;
+ font-size: 1rem;
+ color: inherit;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-top-left-radius: calc(.3rem - 1px);
+ border-top-right-radius: calc(.3rem - 1px)
+}
+
+.popover-header:empty {
+ display: none
+}
+
+.popover-body {
+ padding: .5rem .75rem;
+ color: #212529
+}
+
+.carousel {
+ position: relative
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden
+}
+
+.carousel-item {
+ position: relative;
+ display: none;
+ align-items: center;
+ width: 100%;
+ transition: transform .6s ease;
+ backface-visibility: hidden;
+ perspective: 1000px
+}
+
+.carousel-item-next, .carousel-item-prev, .carousel-item.active {
+ display: block
+}
+
+.carousel-item-next, .carousel-item-prev {
+ position: absolute;
+ top: 0
+}
+
+.carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right {
+ transform: translateX(0)
+}
+
+@supports (transform-style:preserve-3d) {
+ .carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right {
+ transform: translateZ(0)
+ }
+}
+
+.active.carousel-item-right, .carousel-item-next {
+ transform: translateX(100%)
+}
+
+@supports (transform-style:preserve-3d) {
+ .active.carousel-item-right, .carousel-item-next {
+ transform: translate3d(100%, 0, 0)
+ }
+}
+
+.active.carousel-item-left, .carousel-item-prev {
+ transform: translateX(-100%)
+}
+
+@supports (transform-style:preserve-3d) {
+ .active.carousel-item-left, .carousel-item-prev {
+ transform: translate3d(-100%, 0, 0)
+ }
+}
+
+.carousel-control-next, .carousel-control-prev {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 15%;
+ color: #fff;
+ text-align: center;
+ opacity: .5
+}
+
+.carousel-control-next:focus, .carousel-control-next:hover, .carousel-control-prev:focus, .carousel-control-prev:hover {
+ color: #fff;
+ text-decoration: none;
+ outline: 0;
+ opacity: .9
+}
+
+.carousel-control-prev {
+ left: 0
+}
+
+.carousel-control-next {
+ right: 0
+}
+
+.carousel-control-next-icon, .carousel-control-prev-icon {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ background: transparent no-repeat 50%;
+ background-size: 100% 100%
+}
+
+.carousel-control-prev-icon {
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")
+}
+
+.carousel-control-next-icon {
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")
+}
+
+.carousel-indicators {
+ position: absolute;
+ right: 0;
+ bottom: 10px;
+ left: 0;
+ z-index: 15;
+ display: flex;
+ justify-content: center;
+ padding-left: 0;
+ margin-right: 15%;
+ margin-left: 15%;
+ list-style: none
+}
+
+.carousel-indicators li {
+ position: relative;
+ flex: 0 1 auto;
+ width: 30px;
+ height: 3px;
+ margin-right: 3px;
+ margin-left: 3px;
+ text-indent: -999px;
+ background-color: hsla(0, 0%, 100%, .5)
+}
+
+.carousel-indicators li:before {
+ top: -10px
+}
+
+.carousel-indicators li:after, .carousel-indicators li:before {
+ position: absolute;
+ left: 0;
+ display: inline-block;
+ width: 100%;
+ height: 10px;
+ content: ""
+}
+
+.carousel-indicators li:after {
+ bottom: -10px
+}
+
+.carousel-indicators .active {
+ background-color: #fff
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center
+}
+
+.align-baseline {
+ vertical-align: baseline !important
+}
+
+.align-top {
+ vertical-align: top !important
+}
+
+.align-middle {
+ vertical-align: middle !important
+}
+
+.align-bottom {
+ vertical-align: bottom !important
+}
+
+.align-text-bottom {
+ vertical-align: text-bottom !important
+}
+
+.align-text-top {
+ vertical-align: text-top !important
+}
+
+.bg-primary {
+ background-color: #009688 !important
+}
+
+a.bg-primary:focus, a.bg-primary:hover, button.bg-primary:focus, button.bg-primary:hover {
+ background-color: #00635a !important
+}
+
+.bg-secondary {
+ background-color: #6c757d !important
+}
+
+a.bg-secondary:focus, a.bg-secondary:hover, button.bg-secondary:focus, button.bg-secondary:hover {
+ background-color: #545b62 !important
+}
+
+.bg-success {
+ background-color: #4caf50 !important
+}
+
+a.bg-success:focus, a.bg-success:hover, button.bg-success:focus, button.bg-success:hover {
+ background-color: #3d8b40 !important
+}
+
+.bg-info {
+ background-color: #03a9f4 !important
+}
+
+a.bg-info:focus, a.bg-info:hover, button.bg-info:focus, button.bg-info:hover {
+ background-color: #0286c2 !important
+}
+
+.bg-warning {
+ background-color: #ff5722 !important
+}
+
+a.bg-warning:focus, a.bg-warning:hover, button.bg-warning:focus, button.bg-warning:hover {
+ background-color: #ee3900 !important
+}
+
+.bg-danger {
+ background-color: #f44336 !important
+}
+
+a.bg-danger:focus, a.bg-danger:hover, button.bg-danger:focus, button.bg-danger:hover {
+ background-color: #ea1c0d !important
+}
+
+.bg-light {
+ background-color: #f5f5f5 !important
+}
+
+a.bg-light:focus, a.bg-light:hover, button.bg-light:focus, button.bg-light:hover {
+ background-color: #dcdcdc !important
+}
+
+.bg-dark {
+ background-color: #424242 !important
+}
+
+a.bg-dark:focus, a.bg-dark:hover, button.bg-dark:focus, button.bg-dark:hover {
+ background-color: #292929 !important
+}
+
+.bg-white {
+ background-color: #fff !important
+}
+
+.bg-transparent {
+ background-color: transparent !important
+}
+
+.border {
+ border: 1px solid #dee2e6 !important
+}
+
+.border-top {
+ border-top: 1px solid #dee2e6 !important
+}
+
+.border-right {
+ border-right: 1px solid #dee2e6 !important
+}
+
+.border-bottom {
+ border-bottom: 1px solid #dee2e6 !important
+}
+
+.border-left {
+ border-left: 1px solid #dee2e6 !important
+}
+
+.border-0 {
+ border: 0 !important
+}
+
+.border-top-0 {
+ border-top: 0 !important
+}
+
+.border-right-0 {
+ border-right: 0 !important
+}
+
+.border-bottom-0 {
+ border-bottom: 0 !important
+}
+
+.border-left-0 {
+ border-left: 0 !important
+}
+
+.border-primary {
+ border-color: #009688 !important
+}
+
+.border-secondary {
+ border-color: #6c757d !important
+}
+
+.border-success {
+ border-color: #4caf50 !important
+}
+
+.border-info {
+ border-color: #03a9f4 !important
+}
+
+.border-warning {
+ border-color: #ff5722 !important
+}
+
+.border-danger {
+ border-color: #f44336 !important
+}
+
+.border-light {
+ border-color: #f5f5f5 !important
+}
+
+.border-dark {
+ border-color: #424242 !important
+}
+
+.border-white {
+ border-color: #fff !important
+}
+
+.rounded {
+ border-radius: .125rem !important
+}
+
+.rounded-top {
+ border-top-left-radius: .125rem !important
+}
+
+.rounded-right, .rounded-top {
+ border-top-right-radius: .125rem !important
+}
+
+.rounded-bottom, .rounded-right {
+ border-bottom-right-radius: .125rem !important
+}
+
+.rounded-bottom, .rounded-left {
+ border-bottom-left-radius: .125rem !important
+}
+
+.rounded-left {
+ border-top-left-radius: .125rem !important
+}
+
+.rounded-circle {
+ border-radius: 50% !important
+}
+
+.rounded-0 {
+ border-radius: 0 !important
+}
+
+.clearfix:after {
+ display: block;
+ clear: both;
+ content: ""
+}
+
+.d-none {
+ display: none !important
+}
+
+.d-inline {
+ display: inline !important
+}
+
+.d-inline-block {
+ display: inline-block !important
+}
+
+.d-block {
+ display: block !important
+}
+
+.d-table {
+ display: table !important
+}
+
+.d-table-row {
+ display: table-row !important
+}
+
+.d-table-cell {
+ display: table-cell !important
+}
+
+.d-flex {
+ display: flex !important
+}
+
+.d-inline-flex {
+ display: inline-flex !important
+}
+
+@media (min-width: 576px) {
+ .d-sm-none {
+ display: none !important
+ }
+
+ .d-sm-inline {
+ display: inline !important
+ }
+
+ .d-sm-inline-block {
+ display: inline-block !important
+ }
+
+ .d-sm-block {
+ display: block !important
+ }
+
+ .d-sm-table {
+ display: table !important
+ }
+
+ .d-sm-table-row {
+ display: table-row !important
+ }
+
+ .d-sm-table-cell {
+ display: table-cell !important
+ }
+
+ .d-sm-flex {
+ display: flex !important
+ }
+
+ .d-sm-inline-flex {
+ display: inline-flex !important
+ }
+}
+
+@media (min-width: 768px) {
+ .d-md-none {
+ display: none !important
+ }
+
+ .d-md-inline {
+ display: inline !important
+ }
+
+ .d-md-inline-block {
+ display: inline-block !important
+ }
+
+ .d-md-block {
+ display: block !important
+ }
+
+ .d-md-table {
+ display: table !important
+ }
+
+ .d-md-table-row {
+ display: table-row !important
+ }
+
+ .d-md-table-cell {
+ display: table-cell !important
+ }
+
+ .d-md-flex {
+ display: flex !important
+ }
+
+ .d-md-inline-flex {
+ display: inline-flex !important
+ }
+}
+
+@media (min-width: 992px) {
+ .d-lg-none {
+ display: none !important
+ }
+
+ .d-lg-inline {
+ display: inline !important
+ }
+
+ .d-lg-inline-block {
+ display: inline-block !important
+ }
+
+ .d-lg-block {
+ display: block !important
+ }
+
+ .d-lg-table {
+ display: table !important
+ }
+
+ .d-lg-table-row {
+ display: table-row !important
+ }
+
+ .d-lg-table-cell {
+ display: table-cell !important
+ }
+
+ .d-lg-flex {
+ display: flex !important
+ }
+
+ .d-lg-inline-flex {
+ display: inline-flex !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .d-xl-none {
+ display: none !important
+ }
+
+ .d-xl-inline {
+ display: inline !important
+ }
+
+ .d-xl-inline-block {
+ display: inline-block !important
+ }
+
+ .d-xl-block {
+ display: block !important
+ }
+
+ .d-xl-table {
+ display: table !important
+ }
+
+ .d-xl-table-row {
+ display: table-row !important
+ }
+
+ .d-xl-table-cell {
+ display: table-cell !important
+ }
+
+ .d-xl-flex {
+ display: flex !important
+ }
+
+ .d-xl-inline-flex {
+ display: inline-flex !important
+ }
+}
+
+@media print {
+ .d-print-none {
+ display: none !important
+ }
+
+ .d-print-inline {
+ display: inline !important
+ }
+
+ .d-print-inline-block {
+ display: inline-block !important
+ }
+
+ .d-print-block {
+ display: block !important
+ }
+
+ .d-print-table {
+ display: table !important
+ }
+
+ .d-print-table-row {
+ display: table-row !important
+ }
+
+ .d-print-table-cell {
+ display: table-cell !important
+ }
+
+ .d-print-flex {
+ display: flex !important
+ }
+
+ .d-print-inline-flex {
+ display: inline-flex !important
+ }
+}
+
+.embed-responsive {
+ position: relative;
+ display: block;
+ width: 100%;
+ padding: 0;
+ overflow: hidden
+}
+
+.embed-responsive:before {
+ display: block;
+ content: ""
+}
+
+.embed-responsive .embed-responsive-item, .embed-responsive embed, .embed-responsive iframe, .embed-responsive object, .embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0
+}
+
+.embed-responsive-21by9:before {
+ padding-top: 42.85714%
+}
+
+.embed-responsive-16by9:before {
+ padding-top: 56.25%
+}
+
+.embed-responsive-4by3:before {
+ padding-top: 75%
+}
+
+.embed-responsive-1by1:before {
+ padding-top: 100%
+}
+
+.flex-row {
+ flex-direction: row !important
+}
+
+.flex-column {
+ flex-direction: column !important
+}
+
+.flex-row-reverse {
+ flex-direction: row-reverse !important
+}
+
+.flex-column-reverse {
+ flex-direction: column-reverse !important
+}
+
+.flex-wrap {
+ flex-wrap: wrap !important
+}
+
+.flex-nowrap {
+ flex-wrap: nowrap !important
+}
+
+.flex-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+}
+
+.justify-content-start {
+ justify-content: flex-start !important
+}
+
+.justify-content-end {
+ justify-content: flex-end !important
+}
+
+.justify-content-center {
+ justify-content: center !important
+}
+
+.justify-content-between {
+ justify-content: space-between !important
+}
+
+.justify-content-around {
+ justify-content: space-around !important
+}
+
+.align-items-start {
+ align-items: flex-start !important
+}
+
+.align-items-end {
+ align-items: flex-end !important
+}
+
+.align-items-center {
+ align-items: center !important
+}
+
+.align-items-baseline {
+ align-items: baseline !important
+}
+
+.align-items-stretch {
+ align-items: stretch !important
+}
+
+.align-content-start {
+ align-content: flex-start !important
+}
+
+.align-content-end {
+ align-content: flex-end !important
+}
+
+.align-content-center {
+ align-content: center !important
+}
+
+.align-content-between {
+ align-content: space-between !important
+}
+
+.align-content-around {
+ align-content: space-around !important
+}
+
+.align-content-stretch {
+ align-content: stretch !important
+}
+
+.align-self-auto {
+ align-self: auto !important
+}
+
+.align-self-start {
+ align-self: flex-start !important
+}
+
+.align-self-end {
+ align-self: flex-end !important
+}
+
+.align-self-center {
+ align-self: center !important
+}
+
+.align-self-baseline {
+ align-self: baseline !important
+}
+
+.align-self-stretch {
+ align-self: stretch !important
+}
+
+@media (min-width: 576px) {
+ .flex-sm-row {
+ flex-direction: row !important
+ }
+
+ .flex-sm-column {
+ flex-direction: column !important
+ }
+
+ .flex-sm-row-reverse {
+ flex-direction: row-reverse !important
+ }
+
+ .flex-sm-column-reverse {
+ flex-direction: column-reverse !important
+ }
+
+ .flex-sm-wrap {
+ flex-wrap: wrap !important
+ }
+
+ .flex-sm-nowrap {
+ flex-wrap: nowrap !important
+ }
+
+ .flex-sm-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+ }
+
+ .justify-content-sm-start {
+ justify-content: flex-start !important
+ }
+
+ .justify-content-sm-end {
+ justify-content: flex-end !important
+ }
+
+ .justify-content-sm-center {
+ justify-content: center !important
+ }
+
+ .justify-content-sm-between {
+ justify-content: space-between !important
+ }
+
+ .justify-content-sm-around {
+ justify-content: space-around !important
+ }
+
+ .align-items-sm-start {
+ align-items: flex-start !important
+ }
+
+ .align-items-sm-end {
+ align-items: flex-end !important
+ }
+
+ .align-items-sm-center {
+ align-items: center !important
+ }
+
+ .align-items-sm-baseline {
+ align-items: baseline !important
+ }
+
+ .align-items-sm-stretch {
+ align-items: stretch !important
+ }
+
+ .align-content-sm-start {
+ align-content: flex-start !important
+ }
+
+ .align-content-sm-end {
+ align-content: flex-end !important
+ }
+
+ .align-content-sm-center {
+ align-content: center !important
+ }
+
+ .align-content-sm-between {
+ align-content: space-between !important
+ }
+
+ .align-content-sm-around {
+ align-content: space-around !important
+ }
+
+ .align-content-sm-stretch {
+ align-content: stretch !important
+ }
+
+ .align-self-sm-auto {
+ align-self: auto !important
+ }
+
+ .align-self-sm-start {
+ align-self: flex-start !important
+ }
+
+ .align-self-sm-end {
+ align-self: flex-end !important
+ }
+
+ .align-self-sm-center {
+ align-self: center !important
+ }
+
+ .align-self-sm-baseline {
+ align-self: baseline !important
+ }
+
+ .align-self-sm-stretch {
+ align-self: stretch !important
+ }
+}
+
+@media (min-width: 768px) {
+ .flex-md-row {
+ flex-direction: row !important
+ }
+
+ .flex-md-column {
+ flex-direction: column !important
+ }
+
+ .flex-md-row-reverse {
+ flex-direction: row-reverse !important
+ }
+
+ .flex-md-column-reverse {
+ flex-direction: column-reverse !important
+ }
+
+ .flex-md-wrap {
+ flex-wrap: wrap !important
+ }
+
+ .flex-md-nowrap {
+ flex-wrap: nowrap !important
+ }
+
+ .flex-md-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+ }
+
+ .justify-content-md-start {
+ justify-content: flex-start !important
+ }
+
+ .justify-content-md-end {
+ justify-content: flex-end !important
+ }
+
+ .justify-content-md-center {
+ justify-content: center !important
+ }
+
+ .justify-content-md-between {
+ justify-content: space-between !important
+ }
+
+ .justify-content-md-around {
+ justify-content: space-around !important
+ }
+
+ .align-items-md-start {
+ align-items: flex-start !important
+ }
+
+ .align-items-md-end {
+ align-items: flex-end !important
+ }
+
+ .align-items-md-center {
+ align-items: center !important
+ }
+
+ .align-items-md-baseline {
+ align-items: baseline !important
+ }
+
+ .align-items-md-stretch {
+ align-items: stretch !important
+ }
+
+ .align-content-md-start {
+ align-content: flex-start !important
+ }
+
+ .align-content-md-end {
+ align-content: flex-end !important
+ }
+
+ .align-content-md-center {
+ align-content: center !important
+ }
+
+ .align-content-md-between {
+ align-content: space-between !important
+ }
+
+ .align-content-md-around {
+ align-content: space-around !important
+ }
+
+ .align-content-md-stretch {
+ align-content: stretch !important
+ }
+
+ .align-self-md-auto {
+ align-self: auto !important
+ }
+
+ .align-self-md-start {
+ align-self: flex-start !important
+ }
+
+ .align-self-md-end {
+ align-self: flex-end !important
+ }
+
+ .align-self-md-center {
+ align-self: center !important
+ }
+
+ .align-self-md-baseline {
+ align-self: baseline !important
+ }
+
+ .align-self-md-stretch {
+ align-self: stretch !important
+ }
+}
+
+@media (min-width: 992px) {
+ .flex-lg-row {
+ flex-direction: row !important
+ }
+
+ .flex-lg-column {
+ flex-direction: column !important
+ }
+
+ .flex-lg-row-reverse {
+ flex-direction: row-reverse !important
+ }
+
+ .flex-lg-column-reverse {
+ flex-direction: column-reverse !important
+ }
+
+ .flex-lg-wrap {
+ flex-wrap: wrap !important
+ }
+
+ .flex-lg-nowrap {
+ flex-wrap: nowrap !important
+ }
+
+ .flex-lg-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+ }
+
+ .justify-content-lg-start {
+ justify-content: flex-start !important
+ }
+
+ .justify-content-lg-end {
+ justify-content: flex-end !important
+ }
+
+ .justify-content-lg-center {
+ justify-content: center !important
+ }
+
+ .justify-content-lg-between {
+ justify-content: space-between !important
+ }
+
+ .justify-content-lg-around {
+ justify-content: space-around !important
+ }
+
+ .align-items-lg-start {
+ align-items: flex-start !important
+ }
+
+ .align-items-lg-end {
+ align-items: flex-end !important
+ }
+
+ .align-items-lg-center {
+ align-items: center !important
+ }
+
+ .align-items-lg-baseline {
+ align-items: baseline !important
+ }
+
+ .align-items-lg-stretch {
+ align-items: stretch !important
+ }
+
+ .align-content-lg-start {
+ align-content: flex-start !important
+ }
+
+ .align-content-lg-end {
+ align-content: flex-end !important
+ }
+
+ .align-content-lg-center {
+ align-content: center !important
+ }
+
+ .align-content-lg-between {
+ align-content: space-between !important
+ }
+
+ .align-content-lg-around {
+ align-content: space-around !important
+ }
+
+ .align-content-lg-stretch {
+ align-content: stretch !important
+ }
+
+ .align-self-lg-auto {
+ align-self: auto !important
+ }
+
+ .align-self-lg-start {
+ align-self: flex-start !important
+ }
+
+ .align-self-lg-end {
+ align-self: flex-end !important
+ }
+
+ .align-self-lg-center {
+ align-self: center !important
+ }
+
+ .align-self-lg-baseline {
+ align-self: baseline !important
+ }
+
+ .align-self-lg-stretch {
+ align-self: stretch !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .flex-xl-row {
+ flex-direction: row !important
+ }
+
+ .flex-xl-column {
+ flex-direction: column !important
+ }
+
+ .flex-xl-row-reverse {
+ flex-direction: row-reverse !important
+ }
+
+ .flex-xl-column-reverse {
+ flex-direction: column-reverse !important
+ }
+
+ .flex-xl-wrap {
+ flex-wrap: wrap !important
+ }
+
+ .flex-xl-nowrap {
+ flex-wrap: nowrap !important
+ }
+
+ .flex-xl-wrap-reverse {
+ flex-wrap: wrap-reverse !important
+ }
+
+ .justify-content-xl-start {
+ justify-content: flex-start !important
+ }
+
+ .justify-content-xl-end {
+ justify-content: flex-end !important
+ }
+
+ .justify-content-xl-center {
+ justify-content: center !important
+ }
+
+ .justify-content-xl-between {
+ justify-content: space-between !important
+ }
+
+ .justify-content-xl-around {
+ justify-content: space-around !important
+ }
+
+ .align-items-xl-start {
+ align-items: flex-start !important
+ }
+
+ .align-items-xl-end {
+ align-items: flex-end !important
+ }
+
+ .align-items-xl-center {
+ align-items: center !important
+ }
+
+ .align-items-xl-baseline {
+ align-items: baseline !important
+ }
+
+ .align-items-xl-stretch {
+ align-items: stretch !important
+ }
+
+ .align-content-xl-start {
+ align-content: flex-start !important
+ }
+
+ .align-content-xl-end {
+ align-content: flex-end !important
+ }
+
+ .align-content-xl-center {
+ align-content: center !important
+ }
+
+ .align-content-xl-between {
+ align-content: space-between !important
+ }
+
+ .align-content-xl-around {
+ align-content: space-around !important
+ }
+
+ .align-content-xl-stretch {
+ align-content: stretch !important
+ }
+
+ .align-self-xl-auto {
+ align-self: auto !important
+ }
+
+ .align-self-xl-start {
+ align-self: flex-start !important
+ }
+
+ .align-self-xl-end {
+ align-self: flex-end !important
+ }
+
+ .align-self-xl-center {
+ align-self: center !important
+ }
+
+ .align-self-xl-baseline {
+ align-self: baseline !important
+ }
+
+ .align-self-xl-stretch {
+ align-self: stretch !important
+ }
+}
+
+.float-left {
+ float: left !important
+}
+
+.float-right {
+ float: right !important
+}
+
+.float-none {
+ float: none !important
+}
+
+@media (min-width: 576px) {
+ .float-sm-left {
+ float: left !important
+ }
+
+ .float-sm-right {
+ float: right !important
+ }
+
+ .float-sm-none {
+ float: none !important
+ }
+}
+
+@media (min-width: 768px) {
+ .float-md-left {
+ float: left !important
+ }
+
+ .float-md-right {
+ float: right !important
+ }
+
+ .float-md-none {
+ float: none !important
+ }
+}
+
+@media (min-width: 992px) {
+ .float-lg-left {
+ float: left !important
+ }
+
+ .float-lg-right {
+ float: right !important
+ }
+
+ .float-lg-none {
+ float: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .float-xl-left {
+ float: left !important
+ }
+
+ .float-xl-right {
+ float: right !important
+ }
+
+ .float-xl-none {
+ float: none !important
+ }
+}
+
+.position-static {
+ position: static !important
+}
+
+.position-relative {
+ position: relative !important
+}
+
+.position-absolute {
+ position: absolute !important
+}
+
+.position-fixed {
+ position: fixed !important
+}
+
+.position-sticky {
+ position: sticky !important
+}
+
+.fixed-top {
+ top: 0
+}
+
+.fixed-bottom, .fixed-top {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030
+}
+
+.fixed-bottom {
+ bottom: 0
+}
+
+@supports (position:sticky) {
+ .sticky-top {
+ position: sticky;
+ top: 0;
+ z-index: 1020
+ }
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ clip-path: inset(50%);
+ border: 0
+}
+
+.sr-only-focusable:active, .sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ overflow: visible;
+ clip: auto;
+ white-space: normal;
+ clip-path: none
+}
+
+.w-25 {
+ width: 25% !important
+}
+
+.w-50 {
+ width: 50% !important
+}
+
+.w-75 {
+ width: 75% !important
+}
+
+.w-100 {
+ width: 100% !important
+}
+
+.h-25 {
+ height: 25% !important
+}
+
+.h-50 {
+ height: 50% !important
+}
+
+.h-75 {
+ height: 75% !important
+}
+
+.h-100 {
+ height: 100% !important
+}
+
+.mw-100 {
+ max-width: 100% !important
+}
+
+.mh-100 {
+ max-height: 100% !important
+}
+
+.m-0 {
+ margin: 0 !important
+}
+
+.mt-0, .my-0 {
+ margin-top: 0 !important
+}
+
+.mr-0, .mx-0 {
+ margin-right: 0 !important
+}
+
+.mb-0, .my-0 {
+ margin-bottom: 0 !important
+}
+
+.ml-0, .mx-0 {
+ margin-left: 0 !important
+}
+
+.m-1 {
+ margin: .25rem !important
+}
+
+.mt-1, .my-1 {
+ margin-top: .25rem !important
+}
+
+.mr-1, .mx-1 {
+ margin-right: .25rem !important
+}
+
+.mb-1, .my-1 {
+ margin-bottom: .25rem !important
+}
+
+.ml-1, .mx-1 {
+ margin-left: .25rem !important
+}
+
+.m-2 {
+ margin: .5rem !important
+}
+
+.mt-2, .my-2 {
+ margin-top: .5rem !important
+}
+
+.mr-2, .mx-2 {
+ margin-right: .5rem !important
+}
+
+.mb-2, .my-2 {
+ margin-bottom: .5rem !important
+}
+
+.ml-2, .mx-2 {
+ margin-left: .5rem !important
+}
+
+.m-3 {
+ margin: 1rem !important
+}
+
+.mt-3, .my-3 {
+ margin-top: 1rem !important
+}
+
+.mr-3, .mx-3 {
+ margin-right: 1rem !important
+}
+
+.mb-3, .my-3 {
+ margin-bottom: 1rem !important
+}
+
+.ml-3, .mx-3 {
+ margin-left: 1rem !important
+}
+
+.m-4 {
+ margin: 1.5rem !important
+}
+
+.mt-4, .my-4 {
+ margin-top: 1.5rem !important
+}
+
+.mr-4, .mx-4 {
+ margin-right: 1.5rem !important
+}
+
+.mb-4, .my-4 {
+ margin-bottom: 1.5rem !important
+}
+
+.ml-4, .mx-4 {
+ margin-left: 1.5rem !important
+}
+
+.m-5 {
+ margin: 3rem !important
+}
+
+.mt-5, .my-5 {
+ margin-top: 3rem !important
+}
+
+.mr-5, .mx-5 {
+ margin-right: 3rem !important
+}
+
+.mb-5, .my-5 {
+ margin-bottom: 3rem !important
+}
+
+.ml-5, .mx-5 {
+ margin-left: 3rem !important
+}
+
+.p-0 {
+ padding: 0 !important
+}
+
+.pt-0, .py-0 {
+ padding-top: 0 !important
+}
+
+.pr-0, .px-0 {
+ padding-right: 0 !important
+}
+
+.pb-0, .py-0 {
+ padding-bottom: 0 !important
+}
+
+.pl-0, .px-0 {
+ padding-left: 0 !important
+}
+
+.p-1 {
+ padding: .25rem !important
+}
+
+.pt-1, .py-1 {
+ padding-top: .25rem !important
+}
+
+.pr-1, .px-1 {
+ padding-right: .25rem !important
+}
+
+.pb-1, .py-1 {
+ padding-bottom: .25rem !important
+}
+
+.pl-1, .px-1 {
+ padding-left: .25rem !important
+}
+
+.p-2 {
+ padding: .5rem !important
+}
+
+.pt-2, .py-2 {
+ padding-top: .5rem !important
+}
+
+.pr-2, .px-2 {
+ padding-right: .5rem !important
+}
+
+.pb-2, .py-2 {
+ padding-bottom: .5rem !important
+}
+
+.pl-2, .px-2 {
+ padding-left: .5rem !important
+}
+
+.p-3 {
+ padding: 1rem !important
+}
+
+.pt-3, .py-3 {
+ padding-top: 1rem !important
+}
+
+.pr-3, .px-3 {
+ padding-right: 1rem !important
+}
+
+.pb-3, .py-3 {
+ padding-bottom: 1rem !important
+}
+
+.pl-3, .px-3 {
+ padding-left: 1rem !important
+}
+
+.p-4 {
+ padding: 1.5rem !important
+}
+
+.pt-4, .py-4 {
+ padding-top: 1.5rem !important
+}
+
+.pr-4, .px-4 {
+ padding-right: 1.5rem !important
+}
+
+.pb-4, .py-4 {
+ padding-bottom: 1.5rem !important
+}
+
+.pl-4, .px-4 {
+ padding-left: 1.5rem !important
+}
+
+.p-5 {
+ padding: 3rem !important
+}
+
+.pt-5, .py-5 {
+ padding-top: 3rem !important
+}
+
+.pr-5, .px-5 {
+ padding-right: 3rem !important
+}
+
+.pb-5, .py-5 {
+ padding-bottom: 3rem !important
+}
+
+.pl-5, .px-5 {
+ padding-left: 3rem !important
+}
+
+.m-auto {
+ margin: auto !important
+}
+
+.mt-auto, .my-auto {
+ margin-top: auto !important
+}
+
+.mr-auto, .mx-auto {
+ margin-right: auto !important
+}
+
+.mb-auto, .my-auto {
+ margin-bottom: auto !important
+}
+
+.ml-auto, .mx-auto {
+ margin-left: auto !important
+}
+
+@media (min-width: 576px) {
+ .m-sm-0 {
+ margin: 0 !important
+ }
+
+ .mt-sm-0, .my-sm-0 {
+ margin-top: 0 !important
+ }
+
+ .mr-sm-0, .mx-sm-0 {
+ margin-right: 0 !important
+ }
+
+ .mb-sm-0, .my-sm-0 {
+ margin-bottom: 0 !important
+ }
+
+ .ml-sm-0, .mx-sm-0 {
+ margin-left: 0 !important
+ }
+
+ .m-sm-1 {
+ margin: .25rem !important
+ }
+
+ .mt-sm-1, .my-sm-1 {
+ margin-top: .25rem !important
+ }
+
+ .mr-sm-1, .mx-sm-1 {
+ margin-right: .25rem !important
+ }
+
+ .mb-sm-1, .my-sm-1 {
+ margin-bottom: .25rem !important
+ }
+
+ .ml-sm-1, .mx-sm-1 {
+ margin-left: .25rem !important
+ }
+
+ .m-sm-2 {
+ margin: .5rem !important
+ }
+
+ .mt-sm-2, .my-sm-2 {
+ margin-top: .5rem !important
+ }
+
+ .mr-sm-2, .mx-sm-2 {
+ margin-right: .5rem !important
+ }
+
+ .mb-sm-2, .my-sm-2 {
+ margin-bottom: .5rem !important
+ }
+
+ .ml-sm-2, .mx-sm-2 {
+ margin-left: .5rem !important
+ }
+
+ .m-sm-3 {
+ margin: 1rem !important
+ }
+
+ .mt-sm-3, .my-sm-3 {
+ margin-top: 1rem !important
+ }
+
+ .mr-sm-3, .mx-sm-3 {
+ margin-right: 1rem !important
+ }
+
+ .mb-sm-3, .my-sm-3 {
+ margin-bottom: 1rem !important
+ }
+
+ .ml-sm-3, .mx-sm-3 {
+ margin-left: 1rem !important
+ }
+
+ .m-sm-4 {
+ margin: 1.5rem !important
+ }
+
+ .mt-sm-4, .my-sm-4 {
+ margin-top: 1.5rem !important
+ }
+
+ .mr-sm-4, .mx-sm-4 {
+ margin-right: 1.5rem !important
+ }
+
+ .mb-sm-4, .my-sm-4 {
+ margin-bottom: 1.5rem !important
+ }
+
+ .ml-sm-4, .mx-sm-4 {
+ margin-left: 1.5rem !important
+ }
+
+ .m-sm-5 {
+ margin: 3rem !important
+ }
+
+ .mt-sm-5, .my-sm-5 {
+ margin-top: 3rem !important
+ }
+
+ .mr-sm-5, .mx-sm-5 {
+ margin-right: 3rem !important
+ }
+
+ .mb-sm-5, .my-sm-5 {
+ margin-bottom: 3rem !important
+ }
+
+ .ml-sm-5, .mx-sm-5 {
+ margin-left: 3rem !important
+ }
+
+ .p-sm-0 {
+ padding: 0 !important
+ }
+
+ .pt-sm-0, .py-sm-0 {
+ padding-top: 0 !important
+ }
+
+ .pr-sm-0, .px-sm-0 {
+ padding-right: 0 !important
+ }
+
+ .pb-sm-0, .py-sm-0 {
+ padding-bottom: 0 !important
+ }
+
+ .pl-sm-0, .px-sm-0 {
+ padding-left: 0 !important
+ }
+
+ .p-sm-1 {
+ padding: .25rem !important
+ }
+
+ .pt-sm-1, .py-sm-1 {
+ padding-top: .25rem !important
+ }
+
+ .pr-sm-1, .px-sm-1 {
+ padding-right: .25rem !important
+ }
+
+ .pb-sm-1, .py-sm-1 {
+ padding-bottom: .25rem !important
+ }
+
+ .pl-sm-1, .px-sm-1 {
+ padding-left: .25rem !important
+ }
+
+ .p-sm-2 {
+ padding: .5rem !important
+ }
+
+ .pt-sm-2, .py-sm-2 {
+ padding-top: .5rem !important
+ }
+
+ .pr-sm-2, .px-sm-2 {
+ padding-right: .5rem !important
+ }
+
+ .pb-sm-2, .py-sm-2 {
+ padding-bottom: .5rem !important
+ }
+
+ .pl-sm-2, .px-sm-2 {
+ padding-left: .5rem !important
+ }
+
+ .p-sm-3 {
+ padding: 1rem !important
+ }
+
+ .pt-sm-3, .py-sm-3 {
+ padding-top: 1rem !important
+ }
+
+ .pr-sm-3, .px-sm-3 {
+ padding-right: 1rem !important
+ }
+
+ .pb-sm-3, .py-sm-3 {
+ padding-bottom: 1rem !important
+ }
+
+ .pl-sm-3, .px-sm-3 {
+ padding-left: 1rem !important
+ }
+
+ .p-sm-4 {
+ padding: 1.5rem !important
+ }
+
+ .pt-sm-4, .py-sm-4 {
+ padding-top: 1.5rem !important
+ }
+
+ .pr-sm-4, .px-sm-4 {
+ padding-right: 1.5rem !important
+ }
+
+ .pb-sm-4, .py-sm-4 {
+ padding-bottom: 1.5rem !important
+ }
+
+ .pl-sm-4, .px-sm-4 {
+ padding-left: 1.5rem !important
+ }
+
+ .p-sm-5 {
+ padding: 3rem !important
+ }
+
+ .pt-sm-5, .py-sm-5 {
+ padding-top: 3rem !important
+ }
+
+ .pr-sm-5, .px-sm-5 {
+ padding-right: 3rem !important
+ }
+
+ .pb-sm-5, .py-sm-5 {
+ padding-bottom: 3rem !important
+ }
+
+ .pl-sm-5, .px-sm-5 {
+ padding-left: 3rem !important
+ }
+
+ .m-sm-auto {
+ margin: auto !important
+ }
+
+ .mt-sm-auto, .my-sm-auto {
+ margin-top: auto !important
+ }
+
+ .mr-sm-auto, .mx-sm-auto {
+ margin-right: auto !important
+ }
+
+ .mb-sm-auto, .my-sm-auto {
+ margin-bottom: auto !important
+ }
+
+ .ml-sm-auto, .mx-sm-auto {
+ margin-left: auto !important
+ }
+}
+
+@media (min-width: 768px) {
+ .m-md-0 {
+ margin: 0 !important
+ }
+
+ .mt-md-0, .my-md-0 {
+ margin-top: 0 !important
+ }
+
+ .mr-md-0, .mx-md-0 {
+ margin-right: 0 !important
+ }
+
+ .mb-md-0, .my-md-0 {
+ margin-bottom: 0 !important
+ }
+
+ .ml-md-0, .mx-md-0 {
+ margin-left: 0 !important
+ }
+
+ .m-md-1 {
+ margin: .25rem !important
+ }
+
+ .mt-md-1, .my-md-1 {
+ margin-top: .25rem !important
+ }
+
+ .mr-md-1, .mx-md-1 {
+ margin-right: .25rem !important
+ }
+
+ .mb-md-1, .my-md-1 {
+ margin-bottom: .25rem !important
+ }
+
+ .ml-md-1, .mx-md-1 {
+ margin-left: .25rem !important
+ }
+
+ .m-md-2 {
+ margin: .5rem !important
+ }
+
+ .mt-md-2, .my-md-2 {
+ margin-top: .5rem !important
+ }
+
+ .mr-md-2, .mx-md-2 {
+ margin-right: .5rem !important
+ }
+
+ .mb-md-2, .my-md-2 {
+ margin-bottom: .5rem !important
+ }
+
+ .ml-md-2, .mx-md-2 {
+ margin-left: .5rem !important
+ }
+
+ .m-md-3 {
+ margin: 1rem !important
+ }
+
+ .mt-md-3, .my-md-3 {
+ margin-top: 1rem !important
+ }
+
+ .mr-md-3, .mx-md-3 {
+ margin-right: 1rem !important
+ }
+
+ .mb-md-3, .my-md-3 {
+ margin-bottom: 1rem !important
+ }
+
+ .ml-md-3, .mx-md-3 {
+ margin-left: 1rem !important
+ }
+
+ .m-md-4 {
+ margin: 1.5rem !important
+ }
+
+ .mt-md-4, .my-md-4 {
+ margin-top: 1.5rem !important
+ }
+
+ .mr-md-4, .mx-md-4 {
+ margin-right: 1.5rem !important
+ }
+
+ .mb-md-4, .my-md-4 {
+ margin-bottom: 1.5rem !important
+ }
+
+ .ml-md-4, .mx-md-4 {
+ margin-left: 1.5rem !important
+ }
+
+ .m-md-5 {
+ margin: 3rem !important
+ }
+
+ .mt-md-5, .my-md-5 {
+ margin-top: 3rem !important
+ }
+
+ .mr-md-5, .mx-md-5 {
+ margin-right: 3rem !important
+ }
+
+ .mb-md-5, .my-md-5 {
+ margin-bottom: 3rem !important
+ }
+
+ .ml-md-5, .mx-md-5 {
+ margin-left: 3rem !important
+ }
+
+ .p-md-0 {
+ padding: 0 !important
+ }
+
+ .pt-md-0, .py-md-0 {
+ padding-top: 0 !important
+ }
+
+ .pr-md-0, .px-md-0 {
+ padding-right: 0 !important
+ }
+
+ .pb-md-0, .py-md-0 {
+ padding-bottom: 0 !important
+ }
+
+ .pl-md-0, .px-md-0 {
+ padding-left: 0 !important
+ }
+
+ .p-md-1 {
+ padding: .25rem !important
+ }
+
+ .pt-md-1, .py-md-1 {
+ padding-top: .25rem !important
+ }
+
+ .pr-md-1, .px-md-1 {
+ padding-right: .25rem !important
+ }
+
+ .pb-md-1, .py-md-1 {
+ padding-bottom: .25rem !important
+ }
+
+ .pl-md-1, .px-md-1 {
+ padding-left: .25rem !important
+ }
+
+ .p-md-2 {
+ padding: .5rem !important
+ }
+
+ .pt-md-2, .py-md-2 {
+ padding-top: .5rem !important
+ }
+
+ .pr-md-2, .px-md-2 {
+ padding-right: .5rem !important
+ }
+
+ .pb-md-2, .py-md-2 {
+ padding-bottom: .5rem !important
+ }
+
+ .pl-md-2, .px-md-2 {
+ padding-left: .5rem !important
+ }
+
+ .p-md-3 {
+ padding: 1rem !important
+ }
+
+ .pt-md-3, .py-md-3 {
+ padding-top: 1rem !important
+ }
+
+ .pr-md-3, .px-md-3 {
+ padding-right: 1rem !important
+ }
+
+ .pb-md-3, .py-md-3 {
+ padding-bottom: 1rem !important
+ }
+
+ .pl-md-3, .px-md-3 {
+ padding-left: 1rem !important
+ }
+
+ .p-md-4 {
+ padding: 1.5rem !important
+ }
+
+ .pt-md-4, .py-md-4 {
+ padding-top: 1.5rem !important
+ }
+
+ .pr-md-4, .px-md-4 {
+ padding-right: 1.5rem !important
+ }
+
+ .pb-md-4, .py-md-4 {
+ padding-bottom: 1.5rem !important
+ }
+
+ .pl-md-4, .px-md-4 {
+ padding-left: 1.5rem !important
+ }
+
+ .p-md-5 {
+ padding: 3rem !important
+ }
+
+ .pt-md-5, .py-md-5 {
+ padding-top: 3rem !important
+ }
+
+ .pr-md-5, .px-md-5 {
+ padding-right: 3rem !important
+ }
+
+ .pb-md-5, .py-md-5 {
+ padding-bottom: 3rem !important
+ }
+
+ .pl-md-5, .px-md-5 {
+ padding-left: 3rem !important
+ }
+
+ .m-md-auto {
+ margin: auto !important
+ }
+
+ .mt-md-auto, .my-md-auto {
+ margin-top: auto !important
+ }
+
+ .mr-md-auto, .mx-md-auto {
+ margin-right: auto !important
+ }
+
+ .mb-md-auto, .my-md-auto {
+ margin-bottom: auto !important
+ }
+
+ .ml-md-auto, .mx-md-auto {
+ margin-left: auto !important
+ }
+}
+
+@media (min-width: 992px) {
+ .m-lg-0 {
+ margin: 0 !important
+ }
+
+ .mt-lg-0, .my-lg-0 {
+ margin-top: 0 !important
+ }
+
+ .mr-lg-0, .mx-lg-0 {
+ margin-right: 0 !important
+ }
+
+ .mb-lg-0, .my-lg-0 {
+ margin-bottom: 0 !important
+ }
+
+ .ml-lg-0, .mx-lg-0 {
+ margin-left: 0 !important
+ }
+
+ .m-lg-1 {
+ margin: .25rem !important
+ }
+
+ .mt-lg-1, .my-lg-1 {
+ margin-top: .25rem !important
+ }
+
+ .mr-lg-1, .mx-lg-1 {
+ margin-right: .25rem !important
+ }
+
+ .mb-lg-1, .my-lg-1 {
+ margin-bottom: .25rem !important
+ }
+
+ .ml-lg-1, .mx-lg-1 {
+ margin-left: .25rem !important
+ }
+
+ .m-lg-2 {
+ margin: .5rem !important
+ }
+
+ .mt-lg-2, .my-lg-2 {
+ margin-top: .5rem !important
+ }
+
+ .mr-lg-2, .mx-lg-2 {
+ margin-right: .5rem !important
+ }
+
+ .mb-lg-2, .my-lg-2 {
+ margin-bottom: .5rem !important
+ }
+
+ .ml-lg-2, .mx-lg-2 {
+ margin-left: .5rem !important
+ }
+
+ .m-lg-3 {
+ margin: 1rem !important
+ }
+
+ .mt-lg-3, .my-lg-3 {
+ margin-top: 1rem !important
+ }
+
+ .mr-lg-3, .mx-lg-3 {
+ margin-right: 1rem !important
+ }
+
+ .mb-lg-3, .my-lg-3 {
+ margin-bottom: 1rem !important
+ }
+
+ .ml-lg-3, .mx-lg-3 {
+ margin-left: 1rem !important
+ }
+
+ .m-lg-4 {
+ margin: 1.5rem !important
+ }
+
+ .mt-lg-4, .my-lg-4 {
+ margin-top: 1.5rem !important
+ }
+
+ .mr-lg-4, .mx-lg-4 {
+ margin-right: 1.5rem !important
+ }
+
+ .mb-lg-4, .my-lg-4 {
+ margin-bottom: 1.5rem !important
+ }
+
+ .ml-lg-4, .mx-lg-4 {
+ margin-left: 1.5rem !important
+ }
+
+ .m-lg-5 {
+ margin: 3rem !important
+ }
+
+ .mt-lg-5, .my-lg-5 {
+ margin-top: 3rem !important
+ }
+
+ .mr-lg-5, .mx-lg-5 {
+ margin-right: 3rem !important
+ }
+
+ .mb-lg-5, .my-lg-5 {
+ margin-bottom: 3rem !important
+ }
+
+ .ml-lg-5, .mx-lg-5 {
+ margin-left: 3rem !important
+ }
+
+ .p-lg-0 {
+ padding: 0 !important
+ }
+
+ .pt-lg-0, .py-lg-0 {
+ padding-top: 0 !important
+ }
+
+ .pr-lg-0, .px-lg-0 {
+ padding-right: 0 !important
+ }
+
+ .pb-lg-0, .py-lg-0 {
+ padding-bottom: 0 !important
+ }
+
+ .pl-lg-0, .px-lg-0 {
+ padding-left: 0 !important
+ }
+
+ .p-lg-1 {
+ padding: .25rem !important
+ }
+
+ .pt-lg-1, .py-lg-1 {
+ padding-top: .25rem !important
+ }
+
+ .pr-lg-1, .px-lg-1 {
+ padding-right: .25rem !important
+ }
+
+ .pb-lg-1, .py-lg-1 {
+ padding-bottom: .25rem !important
+ }
+
+ .pl-lg-1, .px-lg-1 {
+ padding-left: .25rem !important
+ }
+
+ .p-lg-2 {
+ padding: .5rem !important
+ }
+
+ .pt-lg-2, .py-lg-2 {
+ padding-top: .5rem !important
+ }
+
+ .pr-lg-2, .px-lg-2 {
+ padding-right: .5rem !important
+ }
+
+ .pb-lg-2, .py-lg-2 {
+ padding-bottom: .5rem !important
+ }
+
+ .pl-lg-2, .px-lg-2 {
+ padding-left: .5rem !important
+ }
+
+ .p-lg-3 {
+ padding: 1rem !important
+ }
+
+ .pt-lg-3, .py-lg-3 {
+ padding-top: 1rem !important
+ }
+
+ .pr-lg-3, .px-lg-3 {
+ padding-right: 1rem !important
+ }
+
+ .pb-lg-3, .py-lg-3 {
+ padding-bottom: 1rem !important
+ }
+
+ .pl-lg-3, .px-lg-3 {
+ padding-left: 1rem !important
+ }
+
+ .p-lg-4 {
+ padding: 1.5rem !important
+ }
+
+ .pt-lg-4, .py-lg-4 {
+ padding-top: 1.5rem !important
+ }
+
+ .pr-lg-4, .px-lg-4 {
+ padding-right: 1.5rem !important
+ }
+
+ .pb-lg-4, .py-lg-4 {
+ padding-bottom: 1.5rem !important
+ }
+
+ .pl-lg-4, .px-lg-4 {
+ padding-left: 1.5rem !important
+ }
+
+ .p-lg-5 {
+ padding: 3rem !important
+ }
+
+ .pt-lg-5, .py-lg-5 {
+ padding-top: 3rem !important
+ }
+
+ .pr-lg-5, .px-lg-5 {
+ padding-right: 3rem !important
+ }
+
+ .pb-lg-5, .py-lg-5 {
+ padding-bottom: 3rem !important
+ }
+
+ .pl-lg-5, .px-lg-5 {
+ padding-left: 3rem !important
+ }
+
+ .m-lg-auto {
+ margin: auto !important
+ }
+
+ .mt-lg-auto, .my-lg-auto {
+ margin-top: auto !important
+ }
+
+ .mr-lg-auto, .mx-lg-auto {
+ margin-right: auto !important
+ }
+
+ .mb-lg-auto, .my-lg-auto {
+ margin-bottom: auto !important
+ }
+
+ .ml-lg-auto, .mx-lg-auto {
+ margin-left: auto !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .m-xl-0 {
+ margin: 0 !important
+ }
+
+ .mt-xl-0, .my-xl-0 {
+ margin-top: 0 !important
+ }
+
+ .mr-xl-0, .mx-xl-0 {
+ margin-right: 0 !important
+ }
+
+ .mb-xl-0, .my-xl-0 {
+ margin-bottom: 0 !important
+ }
+
+ .ml-xl-0, .mx-xl-0 {
+ margin-left: 0 !important
+ }
+
+ .m-xl-1 {
+ margin: .25rem !important
+ }
+
+ .mt-xl-1, .my-xl-1 {
+ margin-top: .25rem !important
+ }
+
+ .mr-xl-1, .mx-xl-1 {
+ margin-right: .25rem !important
+ }
+
+ .mb-xl-1, .my-xl-1 {
+ margin-bottom: .25rem !important
+ }
+
+ .ml-xl-1, .mx-xl-1 {
+ margin-left: .25rem !important
+ }
+
+ .m-xl-2 {
+ margin: .5rem !important
+ }
+
+ .mt-xl-2, .my-xl-2 {
+ margin-top: .5rem !important
+ }
+
+ .mr-xl-2, .mx-xl-2 {
+ margin-right: .5rem !important
+ }
+
+ .mb-xl-2, .my-xl-2 {
+ margin-bottom: .5rem !important
+ }
+
+ .ml-xl-2, .mx-xl-2 {
+ margin-left: .5rem !important
+ }
+
+ .m-xl-3 {
+ margin: 1rem !important
+ }
+
+ .mt-xl-3, .my-xl-3 {
+ margin-top: 1rem !important
+ }
+
+ .mr-xl-3, .mx-xl-3 {
+ margin-right: 1rem !important
+ }
+
+ .mb-xl-3, .my-xl-3 {
+ margin-bottom: 1rem !important
+ }
+
+ .ml-xl-3, .mx-xl-3 {
+ margin-left: 1rem !important
+ }
+
+ .m-xl-4 {
+ margin: 1.5rem !important
+ }
+
+ .mt-xl-4, .my-xl-4 {
+ margin-top: 1.5rem !important
+ }
+
+ .mr-xl-4, .mx-xl-4 {
+ margin-right: 1.5rem !important
+ }
+
+ .mb-xl-4, .my-xl-4 {
+ margin-bottom: 1.5rem !important
+ }
+
+ .ml-xl-4, .mx-xl-4 {
+ margin-left: 1.5rem !important
+ }
+
+ .m-xl-5 {
+ margin: 3rem !important
+ }
+
+ .mt-xl-5, .my-xl-5 {
+ margin-top: 3rem !important
+ }
+
+ .mr-xl-5, .mx-xl-5 {
+ margin-right: 3rem !important
+ }
+
+ .mb-xl-5, .my-xl-5 {
+ margin-bottom: 3rem !important
+ }
+
+ .ml-xl-5, .mx-xl-5 {
+ margin-left: 3rem !important
+ }
+
+ .p-xl-0 {
+ padding: 0 !important
+ }
+
+ .pt-xl-0, .py-xl-0 {
+ padding-top: 0 !important
+ }
+
+ .pr-xl-0, .px-xl-0 {
+ padding-right: 0 !important
+ }
+
+ .pb-xl-0, .py-xl-0 {
+ padding-bottom: 0 !important
+ }
+
+ .pl-xl-0, .px-xl-0 {
+ padding-left: 0 !important
+ }
+
+ .p-xl-1 {
+ padding: .25rem !important
+ }
+
+ .pt-xl-1, .py-xl-1 {
+ padding-top: .25rem !important
+ }
+
+ .pr-xl-1, .px-xl-1 {
+ padding-right: .25rem !important
+ }
+
+ .pb-xl-1, .py-xl-1 {
+ padding-bottom: .25rem !important
+ }
+
+ .pl-xl-1, .px-xl-1 {
+ padding-left: .25rem !important
+ }
+
+ .p-xl-2 {
+ padding: .5rem !important
+ }
+
+ .pt-xl-2, .py-xl-2 {
+ padding-top: .5rem !important
+ }
+
+ .pr-xl-2, .px-xl-2 {
+ padding-right: .5rem !important
+ }
+
+ .pb-xl-2, .py-xl-2 {
+ padding-bottom: .5rem !important
+ }
+
+ .pl-xl-2, .px-xl-2 {
+ padding-left: .5rem !important
+ }
+
+ .p-xl-3 {
+ padding: 1rem !important
+ }
+
+ .pt-xl-3, .py-xl-3 {
+ padding-top: 1rem !important
+ }
+
+ .pr-xl-3, .px-xl-3 {
+ padding-right: 1rem !important
+ }
+
+ .pb-xl-3, .py-xl-3 {
+ padding-bottom: 1rem !important
+ }
+
+ .pl-xl-3, .px-xl-3 {
+ padding-left: 1rem !important
+ }
+
+ .p-xl-4 {
+ padding: 1.5rem !important
+ }
+
+ .pt-xl-4, .py-xl-4 {
+ padding-top: 1.5rem !important
+ }
+
+ .pr-xl-4, .px-xl-4 {
+ padding-right: 1.5rem !important
+ }
+
+ .pb-xl-4, .py-xl-4 {
+ padding-bottom: 1.5rem !important
+ }
+
+ .pl-xl-4, .px-xl-4 {
+ padding-left: 1.5rem !important
+ }
+
+ .p-xl-5 {
+ padding: 3rem !important
+ }
+
+ .pt-xl-5, .py-xl-5 {
+ padding-top: 3rem !important
+ }
+
+ .pr-xl-5, .px-xl-5 {
+ padding-right: 3rem !important
+ }
+
+ .pb-xl-5, .py-xl-5 {
+ padding-bottom: 3rem !important
+ }
+
+ .pl-xl-5, .px-xl-5 {
+ padding-left: 3rem !important
+ }
+
+ .m-xl-auto {
+ margin: auto !important
+ }
+
+ .mt-xl-auto, .my-xl-auto {
+ margin-top: auto !important
+ }
+
+ .mr-xl-auto, .mx-xl-auto {
+ margin-right: auto !important
+ }
+
+ .mb-xl-auto, .my-xl-auto {
+ margin-bottom: auto !important
+ }
+
+ .ml-xl-auto, .mx-xl-auto {
+ margin-left: auto !important
+ }
+}
+
+.text-justify {
+ text-align: justify !important
+}
+
+.text-nowrap {
+ white-space: nowrap !important
+}
+
+.text-truncate {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap
+}
+
+.text-left {
+ text-align: left !important
+}
+
+.text-right {
+ text-align: right !important
+}
+
+.text-center {
+ text-align: center !important
+}
+
+@media (min-width: 576px) {
+ .text-sm-left {
+ text-align: left !important
+ }
+
+ .text-sm-right {
+ text-align: right !important
+ }
+
+ .text-sm-center {
+ text-align: center !important
+ }
+}
+
+@media (min-width: 768px) {
+ .text-md-left {
+ text-align: left !important
+ }
+
+ .text-md-right {
+ text-align: right !important
+ }
+
+ .text-md-center {
+ text-align: center !important
+ }
+}
+
+@media (min-width: 992px) {
+ .text-lg-left {
+ text-align: left !important
+ }
+
+ .text-lg-right {
+ text-align: right !important
+ }
+
+ .text-lg-center {
+ text-align: center !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .text-xl-left {
+ text-align: left !important
+ }
+
+ .text-xl-right {
+ text-align: right !important
+ }
+
+ .text-xl-center {
+ text-align: center !important
+ }
+}
+
+.text-lowercase {
+ text-transform: lowercase !important
+}
+
+.text-uppercase {
+ text-transform: uppercase !important
+}
+
+.text-capitalize {
+ text-transform: capitalize !important
+}
+
+.font-weight-light {
+ font-weight: 300 !important
+}
+
+.font-weight-normal {
+ font-weight: 400 !important
+}
+
+.font-weight-bold {
+ font-weight: 700 !important
+}
+
+.font-italic {
+ font-style: italic !important
+}
+
+.text-white {
+ color: #fff !important
+}
+
+.text-primary {
+ color: #009688 !important
+}
+
+a.text-primary:focus, a.text-primary:hover {
+ color: #00635a !important
+}
+
+.text-secondary {
+ color: #6c757d !important
+}
+
+a.text-secondary:focus, a.text-secondary:hover {
+ color: #545b62 !important
+}
+
+.text-success {
+ color: #4caf50 !important
+}
+
+a.text-success:focus, a.text-success:hover {
+ color: #3d8b40 !important
+}
+
+.text-info {
+ color: #03a9f4 !important
+}
+
+a.text-info:focus, a.text-info:hover {
+ color: #0286c2 !important
+}
+
+.text-warning {
+ color: #ff5722 !important
+}
+
+a.text-warning:focus, a.text-warning:hover {
+ color: #ee3900 !important
+}
+
+.text-danger {
+ color: #f44336 !important
+}
+
+a.text-danger:focus, a.text-danger:hover {
+ color: #ea1c0d !important
+}
+
+.text-light {
+ color: #f5f5f5 !important
+}
+
+a.text-light:focus, a.text-light:hover {
+ color: #dcdcdc !important
+}
+
+.text-dark {
+ color: #424242 !important
+}
+
+a.text-dark:focus, a.text-dark:hover {
+ color: #292929 !important
+}
+
+.bmd-help, .text-muted {
+ color: #6c757d !important
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0
+}
+
+.visible {
+ visibility: visible !important
+}
+
+.invisible {
+ visibility: hidden !important
+}
+
+@media print {
+ *, :after, :before {
+ text-shadow: none !important;
+ box-shadow: none !important
+ }
+
+ a:not(.btn):not(.custom-file-control:before) {
+ text-decoration: underline
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")"
+ }
+
+ pre {
+ white-space: pre-wrap !important
+ }
+
+ blockquote, pre {
+ border: 1px solid #999;
+ page-break-inside: avoid
+ }
+
+ thead {
+ display: table-header-group
+ }
+
+ img, tr {
+ page-break-inside: avoid
+ }
+
+ h2, h3, p {
+ orphans: 3;
+ widows: 3
+ }
+
+ h2, h3 {
+ page-break-after: avoid
+ }
+
+ @page {
+ size: a3
+ }
+
+ .container, body {
+ min-width: 992px !important
+ }
+
+ .navbar {
+ display: none
+ }
+
+ .badge {
+ border: 1px solid #000
+ }
+
+ .table {
+ border-collapse: collapse !important
+ }
+
+ .table td, .table th {
+ background-color: #fff !important
+ }
+
+ .table-bordered td, .table-bordered th {
+ border: 1px solid #ddd !important
+ }
+}
+
+body {
+ font-weight: 400
+}
+
+a:focus, button:focus {
+ outline: none
+}
+
+.bmd-layout-canvas {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%
+}
+
+.bmd-layout-container {
+ position: relative;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ overflow: hidden
+}
+
+.bmd-layout-header {
+ z-index: 3;
+ display: flex;
+ flex-direction: column;
+ flex-wrap: nowrap;
+ flex-shrink: 0;
+ justify-content: flex-start;
+ width: 100%;
+ max-height: 1000px;
+ transform: translateZ(0)
+}
+
+.bmd-layout-content, .bmd-layout-header {
+ transition-duration: .2s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1)
+}
+
+.bmd-layout-content {
+ position: relative;
+ z-index: 1;
+ display: inline-block;
+ flex-grow: 1;
+ overflow-x: hidden;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch
+}
+
+.bmd-layout-spacer {
+ flex-grow: 1
+}
+
+.bmd-layout-backdrop {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 4;
+ width: 100%;
+ height: 100%;
+ visibility: hidden;
+ background-color: transparent;
+ transition-property: background-color;
+ transition-duration: .2s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1)
+}
+
+@supports (pointer-events:auto) {
+ .bmd-layout-backdrop {
+ background-color: rgba(0, 0, 0, .5);
+ opacity: 0;
+ transition-property: opacity;
+ visibility: visible;
+ pointer-events: none
+ }
+}
+
+.btn, .custom-file-control:before {
+ position: relative;
+ margin-bottom: .3125rem;
+ font-size: .875rem;
+ text-decoration: none;
+ text-transform: uppercase;
+ letter-spacing: 0;
+ cursor: pointer;
+ border: 0;
+ outline: 0;
+ transition: box-shadow .2s cubic-bezier(.4, 0, 1, 1), background-color .2s cubic-bezier(.4, 0, .2, 1), color .2s cubic-bezier(.4, 0, .2, 1);
+ will-change: box-shadow, transform;
+ color: rgba(0, 0, 0, .87);
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.active.custom-file-control:before, .btn.active, .btn.focus, .btn:active, .btn:focus, .btn:hover, .custom-file-control:active:before, .custom-file-control:focus:before, .custom-file-control:hover:before, .focus.custom-file-control:before, .open > .btn.dropdown-toggle, .open > .dropdown-toggle.custom-file-control:before {
+ color: rgba(0, 0, 0, .87);
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: hsla(0, 0%, 60%, .2)
+}
+
+.active.custom-file-control:focus:before, .active.custom-file-control:hover:before, .active.focus.custom-file-control:before, .btn.active.focus, .btn.active:focus, .btn.active:hover, .btn:active.focus, .btn:active:focus, .btn:active:hover, .custom-file-control:active.focus:before, .custom-file-control:active:focus:before, .custom-file-control:active:hover:before, .open > .btn.dropdown-toggle.focus, .open > .btn.dropdown-toggle:focus, .open > .btn.dropdown-toggle:hover, .open > .dropdown-toggle.custom-file-control:focus:before, .open > .dropdown-toggle.custom-file-control:hover:before, .open > .dropdown-toggle.focus.custom-file-control:before {
+ color: rgba(0, 0, 0, .87);
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: hsla(0, 0%, 60%, .4)
+}
+
+.open > .btn.dropdown-toggle.bmd-btn-icon, .open > .dropdown-toggle.bmd-btn-icon.custom-file-control:before {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn.dropdown-toggle.bmd-btn-icon:hover, .open > .dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn.disabled.focus, .btn.disabled:focus, .btn.disabled:hover, .btn:disabled.focus, .btn:disabled:focus, .btn:disabled:hover, .custom-file-control:disabled.focus:before, .custom-file-control:disabled:focus:before, .custom-file-control:disabled:hover:before, .disabled.custom-file-control:focus:before, .disabled.custom-file-control:hover:before, .disabled.focus.custom-file-control:before {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn, .bg-inverse .custom-file-control:before {
+ color: rgba(0, 0, 0, .87);
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .active.custom-file-control:before, .bg-inverse .btn.active, .bg-inverse .btn.focus, .bg-inverse .btn:active, .bg-inverse .btn:focus, .bg-inverse .btn:hover, .bg-inverse .custom-file-control:active:before, .bg-inverse .custom-file-control:focus:before, .bg-inverse .custom-file-control:hover:before, .bg-inverse .focus.custom-file-control:before, .open > .bg-inverse .btn.dropdown-toggle, .open > .bg-inverse .dropdown-toggle.custom-file-control:before {
+ color: rgba(0, 0, 0, .87);
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .active.custom-file-control:focus:before, .bg-inverse .active.custom-file-control:hover:before, .bg-inverse .active.focus.custom-file-control:before, .bg-inverse .btn.active.focus, .bg-inverse .btn.active:focus, .bg-inverse .btn.active:hover, .bg-inverse .btn:active.focus, .bg-inverse .btn:active:focus, .bg-inverse .btn:active:hover, .bg-inverse .custom-file-control:active.focus:before, .bg-inverse .custom-file-control:active:focus:before, .bg-inverse .custom-file-control:active:hover:before, .open > .bg-inverse .btn.dropdown-toggle.focus, .open > .bg-inverse .btn.dropdown-toggle:focus, .open > .bg-inverse .btn.dropdown-toggle:hover, .open > .bg-inverse .dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .dropdown-toggle.focus.custom-file-control:before {
+ color: rgba(0, 0, 0, .87);
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn.dropdown-toggle.bmd-btn-icon, .open > .bg-inverse .dropdown-toggle.bmd-btn-icon.custom-file-control:before {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn.dropdown-toggle.bmd-btn-icon:hover, .open > .bg-inverse .dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn.disabled.focus, .bg-inverse .btn.disabled:focus, .bg-inverse .btn.disabled:hover, .bg-inverse .btn:disabled.focus, .bg-inverse .btn:disabled:focus, .bg-inverse .btn:disabled:hover, .bg-inverse .custom-file-control:disabled.focus:before, .bg-inverse .custom-file-control:disabled:focus:before, .bg-inverse .custom-file-control:disabled:hover:before, .bg-inverse .disabled.custom-file-control:focus:before, .bg-inverse .disabled.custom-file-control:hover:before, .bg-inverse .disabled.focus.custom-file-control:before {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-link.custom-file-control:before, .btn.btn-link {
+ background-color: transparent
+}
+
+.btn-primary.custom-file-control:before, .btn.btn-primary {
+ color: #009688;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-primary.active.custom-file-control:before, .btn-primary.custom-file-control:active:before, .btn-primary.custom-file-control:focus:before, .btn-primary.custom-file-control:hover:before, .btn-primary.focus.custom-file-control:before, .btn.btn-primary.active, .btn.btn-primary.focus, .btn.btn-primary:active, .btn.btn-primary:focus, .btn.btn-primary:hover, .open > .btn-primary.dropdown-toggle.custom-file-control:before, .open > .btn.btn-primary.dropdown-toggle {
+ color: #009688;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-primary.active.custom-file-control:focus:before, .btn-primary.active.custom-file-control:hover:before, .btn-primary.active.focus.custom-file-control:before, .btn-primary.custom-file-control:active.focus:before, .btn-primary.custom-file-control:active:focus:before, .btn-primary.custom-file-control:active:hover:before, .btn.btn-primary.active.focus, .btn.btn-primary.active:focus, .btn.btn-primary.active:hover, .btn.btn-primary:active.focus, .btn.btn-primary:active:focus, .btn.btn-primary:active:hover, .open > .btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-primary.dropdown-toggle.focus, .open > .btn.btn-primary.dropdown-toggle:focus, .open > .btn.btn-primary.dropdown-toggle:hover {
+ color: #009688;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: hsla(0, 0%, 60%, .4)
+}
+
+.open > .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-primary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-primary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-primary.custom-file-control:disabled.focus:before, .btn-primary.custom-file-control:disabled:focus:before, .btn-primary.custom-file-control:disabled:hover:before, .btn-primary.disabled.custom-file-control:focus:before, .btn-primary.disabled.custom-file-control:hover:before, .btn-primary.disabled.focus.custom-file-control:before, .btn.btn-primary.disabled.focus, .btn.btn-primary.disabled:focus, .btn.btn-primary.disabled:hover, .btn.btn-primary:disabled.focus, .btn.btn-primary:disabled:focus, .btn.btn-primary:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-primary.custom-file-control:before, .bg-inverse .btn.btn-primary {
+ color: #009688;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-primary.active.custom-file-control:before, .bg-inverse .btn-primary.custom-file-control:active:before, .bg-inverse .btn-primary.custom-file-control:focus:before, .bg-inverse .btn-primary.custom-file-control:hover:before, .bg-inverse .btn-primary.focus.custom-file-control:before, .bg-inverse .btn.btn-primary.active, .bg-inverse .btn.btn-primary.focus, .bg-inverse .btn.btn-primary:active, .bg-inverse .btn.btn-primary:focus, .bg-inverse .btn.btn-primary:hover, .open > .bg-inverse .btn-primary.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-primary.dropdown-toggle {
+ color: #009688;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-primary.active.custom-file-control:focus:before, .bg-inverse .btn-primary.active.custom-file-control:hover:before, .bg-inverse .btn-primary.active.focus.custom-file-control:before, .bg-inverse .btn-primary.custom-file-control:active.focus:before, .bg-inverse .btn-primary.custom-file-control:active:focus:before, .bg-inverse .btn-primary.custom-file-control:active:hover:before, .bg-inverse .btn.btn-primary.active.focus, .bg-inverse .btn.btn-primary.active:focus, .bg-inverse .btn.btn-primary.active:hover, .bg-inverse .btn.btn-primary:active.focus, .bg-inverse .btn.btn-primary:active:focus, .bg-inverse .btn.btn-primary:active:hover, .open > .bg-inverse .btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-primary.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-primary.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-primary.dropdown-toggle:hover {
+ color: #009688;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-primary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-primary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-primary.custom-file-control:disabled.focus:before, .bg-inverse .btn-primary.custom-file-control:disabled:focus:before, .bg-inverse .btn-primary.custom-file-control:disabled:hover:before, .bg-inverse .btn-primary.disabled.custom-file-control:focus:before, .bg-inverse .btn-primary.disabled.custom-file-control:hover:before, .bg-inverse .btn-primary.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-primary.disabled.focus, .bg-inverse .btn.btn-primary.disabled:focus, .bg-inverse .btn.btn-primary.disabled:hover, .bg-inverse .btn.btn-primary:disabled.focus, .bg-inverse .btn.btn-primary:disabled:focus, .bg-inverse .btn.btn-primary:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-primary.btn-link.custom-file-control:before, .btn.btn-primary.btn-link {
+ background-color: transparent
+}
+
+.btn-secondary.custom-file-control:before, .btn.btn-secondary {
+ color: #6c757d;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-secondary.active.custom-file-control:before, .btn-secondary.custom-file-control:active:before, .btn-secondary.custom-file-control:focus:before, .btn-secondary.custom-file-control:hover:before, .btn-secondary.focus.custom-file-control:before, .btn.btn-secondary.active, .btn.btn-secondary.focus, .btn.btn-secondary:active, .btn.btn-secondary:focus, .btn.btn-secondary:hover, .open > .btn-secondary.dropdown-toggle.custom-file-control:before, .open > .btn.btn-secondary.dropdown-toggle {
+ color: #6c757d;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-secondary.active.custom-file-control:focus:before, .btn-secondary.active.custom-file-control:hover:before, .btn-secondary.active.focus.custom-file-control:before, .btn-secondary.custom-file-control:active.focus:before, .btn-secondary.custom-file-control:active:focus:before, .btn-secondary.custom-file-control:active:hover:before, .btn.btn-secondary.active.focus, .btn.btn-secondary.active:focus, .btn.btn-secondary.active:hover, .btn.btn-secondary:active.focus, .btn.btn-secondary:active:focus, .btn.btn-secondary:active:hover, .open > .btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-secondary.dropdown-toggle.focus, .open > .btn.btn-secondary.dropdown-toggle:focus, .open > .btn.btn-secondary.dropdown-toggle:hover {
+ color: #6c757d;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: hsla(0, 0%, 60%, .4)
+}
+
+.open > .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-secondary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-secondary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-secondary.custom-file-control:disabled.focus:before, .btn-secondary.custom-file-control:disabled:focus:before, .btn-secondary.custom-file-control:disabled:hover:before, .btn-secondary.disabled.custom-file-control:focus:before, .btn-secondary.disabled.custom-file-control:hover:before, .btn-secondary.disabled.focus.custom-file-control:before, .btn.btn-secondary.disabled.focus, .btn.btn-secondary.disabled:focus, .btn.btn-secondary.disabled:hover, .btn.btn-secondary:disabled.focus, .btn.btn-secondary:disabled:focus, .btn.btn-secondary:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-secondary.custom-file-control:before, .bg-inverse .btn.btn-secondary {
+ color: #6c757d;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-secondary.active.custom-file-control:before, .bg-inverse .btn-secondary.custom-file-control:active:before, .bg-inverse .btn-secondary.custom-file-control:focus:before, .bg-inverse .btn-secondary.custom-file-control:hover:before, .bg-inverse .btn-secondary.focus.custom-file-control:before, .bg-inverse .btn.btn-secondary.active, .bg-inverse .btn.btn-secondary.focus, .bg-inverse .btn.btn-secondary:active, .bg-inverse .btn.btn-secondary:focus, .bg-inverse .btn.btn-secondary:hover, .open > .bg-inverse .btn-secondary.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle {
+ color: #6c757d;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-secondary.active.custom-file-control:focus:before, .bg-inverse .btn-secondary.active.custom-file-control:hover:before, .bg-inverse .btn-secondary.active.focus.custom-file-control:before, .bg-inverse .btn-secondary.custom-file-control:active.focus:before, .bg-inverse .btn-secondary.custom-file-control:active:focus:before, .bg-inverse .btn-secondary.custom-file-control:active:hover:before, .bg-inverse .btn.btn-secondary.active.focus, .bg-inverse .btn.btn-secondary.active:focus, .bg-inverse .btn.btn-secondary.active:hover, .bg-inverse .btn.btn-secondary:active.focus, .bg-inverse .btn.btn-secondary:active:focus, .bg-inverse .btn.btn-secondary:active:hover, .open > .bg-inverse .btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle:hover {
+ color: #6c757d;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-secondary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-secondary.custom-file-control:disabled.focus:before, .bg-inverse .btn-secondary.custom-file-control:disabled:focus:before, .bg-inverse .btn-secondary.custom-file-control:disabled:hover:before, .bg-inverse .btn-secondary.disabled.custom-file-control:focus:before, .bg-inverse .btn-secondary.disabled.custom-file-control:hover:before, .bg-inverse .btn-secondary.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-secondary.disabled.focus, .bg-inverse .btn.btn-secondary.disabled:focus, .bg-inverse .btn.btn-secondary.disabled:hover, .bg-inverse .btn.btn-secondary:disabled.focus, .bg-inverse .btn.btn-secondary:disabled:focus, .bg-inverse .btn.btn-secondary:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-secondary.btn-link.custom-file-control:before, .btn.btn-secondary.btn-link {
+ background-color: transparent
+}
+
+.btn-success.custom-file-control:before, .btn.btn-success {
+ color: #4caf50;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-success.active.custom-file-control:before, .btn-success.custom-file-control:active:before, .btn-success.custom-file-control:focus:before, .btn-success.custom-file-control:hover:before, .btn-success.focus.custom-file-control:before, .btn.btn-success.active, .btn.btn-success.focus, .btn.btn-success:active, .btn.btn-success:focus, .btn.btn-success:hover, .open > .btn-success.dropdown-toggle.custom-file-control:before, .open > .btn.btn-success.dropdown-toggle {
+ color: #4caf50;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-success.active.custom-file-control:focus:before, .btn-success.active.custom-file-control:hover:before, .btn-success.active.focus.custom-file-control:before, .btn-success.custom-file-control:active.focus:before, .btn-success.custom-file-control:active:focus:before, .btn-success.custom-file-control:active:hover:before, .btn.btn-success.active.focus, .btn.btn-success.active:focus, .btn.btn-success.active:hover, .btn.btn-success:active.focus, .btn.btn-success:active:focus, .btn.btn-success:active:hover, .open > .btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-success.dropdown-toggle.focus, .open > .btn.btn-success.dropdown-toggle:focus, .open > .btn.btn-success.dropdown-toggle:hover {
+ color: #4caf50;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: hsla(0, 0%, 60%, .4)
+}
+
+.open > .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-success.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-success.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-success.custom-file-control:disabled.focus:before, .btn-success.custom-file-control:disabled:focus:before, .btn-success.custom-file-control:disabled:hover:before, .btn-success.disabled.custom-file-control:focus:before, .btn-success.disabled.custom-file-control:hover:before, .btn-success.disabled.focus.custom-file-control:before, .btn.btn-success.disabled.focus, .btn.btn-success.disabled:focus, .btn.btn-success.disabled:hover, .btn.btn-success:disabled.focus, .btn.btn-success:disabled:focus, .btn.btn-success:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-success.custom-file-control:before, .bg-inverse .btn.btn-success {
+ color: #4caf50;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-success.active.custom-file-control:before, .bg-inverse .btn-success.custom-file-control:active:before, .bg-inverse .btn-success.custom-file-control:focus:before, .bg-inverse .btn-success.custom-file-control:hover:before, .bg-inverse .btn-success.focus.custom-file-control:before, .bg-inverse .btn.btn-success.active, .bg-inverse .btn.btn-success.focus, .bg-inverse .btn.btn-success:active, .bg-inverse .btn.btn-success:focus, .bg-inverse .btn.btn-success:hover, .open > .bg-inverse .btn-success.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-success.dropdown-toggle {
+ color: #4caf50;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-success.active.custom-file-control:focus:before, .bg-inverse .btn-success.active.custom-file-control:hover:before, .bg-inverse .btn-success.active.focus.custom-file-control:before, .bg-inverse .btn-success.custom-file-control:active.focus:before, .bg-inverse .btn-success.custom-file-control:active:focus:before, .bg-inverse .btn-success.custom-file-control:active:hover:before, .bg-inverse .btn.btn-success.active.focus, .bg-inverse .btn.btn-success.active:focus, .bg-inverse .btn.btn-success.active:hover, .bg-inverse .btn.btn-success:active.focus, .bg-inverse .btn.btn-success:active:focus, .bg-inverse .btn.btn-success:active:hover, .open > .bg-inverse .btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-success.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-success.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-success.dropdown-toggle:hover {
+ color: #4caf50;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-success.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-success.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-success.custom-file-control:disabled.focus:before, .bg-inverse .btn-success.custom-file-control:disabled:focus:before, .bg-inverse .btn-success.custom-file-control:disabled:hover:before, .bg-inverse .btn-success.disabled.custom-file-control:focus:before, .bg-inverse .btn-success.disabled.custom-file-control:hover:before, .bg-inverse .btn-success.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-success.disabled.focus, .bg-inverse .btn.btn-success.disabled:focus, .bg-inverse .btn.btn-success.disabled:hover, .bg-inverse .btn.btn-success:disabled.focus, .bg-inverse .btn.btn-success:disabled:focus, .bg-inverse .btn.btn-success:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-success.btn-link.custom-file-control:before, .btn.btn-success.btn-link {
+ background-color: transparent
+}
+
+.btn-info.custom-file-control:before, .btn.btn-info {
+ color: #03a9f4;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-info.active.custom-file-control:before, .btn-info.custom-file-control:active:before, .btn-info.custom-file-control:focus:before, .btn-info.custom-file-control:hover:before, .btn-info.focus.custom-file-control:before, .btn.btn-info.active, .btn.btn-info.focus, .btn.btn-info:active, .btn.btn-info:focus, .btn.btn-info:hover, .open > .btn-info.dropdown-toggle.custom-file-control:before, .open > .btn.btn-info.dropdown-toggle {
+ color: #03a9f4;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-info.active.custom-file-control:focus:before, .btn-info.active.custom-file-control:hover:before, .btn-info.active.focus.custom-file-control:before, .btn-info.custom-file-control:active.focus:before, .btn-info.custom-file-control:active:focus:before, .btn-info.custom-file-control:active:hover:before, .btn.btn-info.active.focus, .btn.btn-info.active:focus, .btn.btn-info.active:hover, .btn.btn-info:active.focus, .btn.btn-info:active:focus, .btn.btn-info:active:hover, .open > .btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-info.dropdown-toggle.focus, .open > .btn.btn-info.dropdown-toggle:focus, .open > .btn.btn-info.dropdown-toggle:hover {
+ color: #03a9f4;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: hsla(0, 0%, 60%, .4)
+}
+
+.open > .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-info.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-info.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-info.custom-file-control:disabled.focus:before, .btn-info.custom-file-control:disabled:focus:before, .btn-info.custom-file-control:disabled:hover:before, .btn-info.disabled.custom-file-control:focus:before, .btn-info.disabled.custom-file-control:hover:before, .btn-info.disabled.focus.custom-file-control:before, .btn.btn-info.disabled.focus, .btn.btn-info.disabled:focus, .btn.btn-info.disabled:hover, .btn.btn-info:disabled.focus, .btn.btn-info:disabled:focus, .btn.btn-info:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-info.custom-file-control:before, .bg-inverse .btn.btn-info {
+ color: #03a9f4;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-info.active.custom-file-control:before, .bg-inverse .btn-info.custom-file-control:active:before, .bg-inverse .btn-info.custom-file-control:focus:before, .bg-inverse .btn-info.custom-file-control:hover:before, .bg-inverse .btn-info.focus.custom-file-control:before, .bg-inverse .btn.btn-info.active, .bg-inverse .btn.btn-info.focus, .bg-inverse .btn.btn-info:active, .bg-inverse .btn.btn-info:focus, .bg-inverse .btn.btn-info:hover, .open > .bg-inverse .btn-info.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-info.dropdown-toggle {
+ color: #03a9f4;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-info.active.custom-file-control:focus:before, .bg-inverse .btn-info.active.custom-file-control:hover:before, .bg-inverse .btn-info.active.focus.custom-file-control:before, .bg-inverse .btn-info.custom-file-control:active.focus:before, .bg-inverse .btn-info.custom-file-control:active:focus:before, .bg-inverse .btn-info.custom-file-control:active:hover:before, .bg-inverse .btn.btn-info.active.focus, .bg-inverse .btn.btn-info.active:focus, .bg-inverse .btn.btn-info.active:hover, .bg-inverse .btn.btn-info:active.focus, .bg-inverse .btn.btn-info:active:focus, .bg-inverse .btn.btn-info:active:hover, .open > .bg-inverse .btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-info.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-info.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-info.dropdown-toggle:hover {
+ color: #03a9f4;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-info.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-info.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-info.custom-file-control:disabled.focus:before, .bg-inverse .btn-info.custom-file-control:disabled:focus:before, .bg-inverse .btn-info.custom-file-control:disabled:hover:before, .bg-inverse .btn-info.disabled.custom-file-control:focus:before, .bg-inverse .btn-info.disabled.custom-file-control:hover:before, .bg-inverse .btn-info.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-info.disabled.focus, .bg-inverse .btn.btn-info.disabled:focus, .bg-inverse .btn.btn-info.disabled:hover, .bg-inverse .btn.btn-info:disabled.focus, .bg-inverse .btn.btn-info:disabled:focus, .bg-inverse .btn.btn-info:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-info.btn-link.custom-file-control:before, .btn.btn-info.btn-link {
+ background-color: transparent
+}
+
+.btn-warning.custom-file-control:before, .btn.btn-warning {
+ color: #ff5722;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-warning.active.custom-file-control:before, .btn-warning.custom-file-control:active:before, .btn-warning.custom-file-control:focus:before, .btn-warning.custom-file-control:hover:before, .btn-warning.focus.custom-file-control:before, .btn.btn-warning.active, .btn.btn-warning.focus, .btn.btn-warning:active, .btn.btn-warning:focus, .btn.btn-warning:hover, .open > .btn-warning.dropdown-toggle.custom-file-control:before, .open > .btn.btn-warning.dropdown-toggle {
+ color: #ff5722;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-warning.active.custom-file-control:focus:before, .btn-warning.active.custom-file-control:hover:before, .btn-warning.active.focus.custom-file-control:before, .btn-warning.custom-file-control:active.focus:before, .btn-warning.custom-file-control:active:focus:before, .btn-warning.custom-file-control:active:hover:before, .btn.btn-warning.active.focus, .btn.btn-warning.active:focus, .btn.btn-warning.active:hover, .btn.btn-warning:active.focus, .btn.btn-warning:active:focus, .btn.btn-warning:active:hover, .open > .btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-warning.dropdown-toggle.focus, .open > .btn.btn-warning.dropdown-toggle:focus, .open > .btn.btn-warning.dropdown-toggle:hover {
+ color: #ff5722;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: hsla(0, 0%, 60%, .4)
+}
+
+.open > .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-warning.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-warning.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-warning.custom-file-control:disabled.focus:before, .btn-warning.custom-file-control:disabled:focus:before, .btn-warning.custom-file-control:disabled:hover:before, .btn-warning.disabled.custom-file-control:focus:before, .btn-warning.disabled.custom-file-control:hover:before, .btn-warning.disabled.focus.custom-file-control:before, .btn.btn-warning.disabled.focus, .btn.btn-warning.disabled:focus, .btn.btn-warning.disabled:hover, .btn.btn-warning:disabled.focus, .btn.btn-warning:disabled:focus, .btn.btn-warning:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-warning.custom-file-control:before, .bg-inverse .btn.btn-warning {
+ color: #ff5722;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-warning.active.custom-file-control:before, .bg-inverse .btn-warning.custom-file-control:active:before, .bg-inverse .btn-warning.custom-file-control:focus:before, .bg-inverse .btn-warning.custom-file-control:hover:before, .bg-inverse .btn-warning.focus.custom-file-control:before, .bg-inverse .btn.btn-warning.active, .bg-inverse .btn.btn-warning.focus, .bg-inverse .btn.btn-warning:active, .bg-inverse .btn.btn-warning:focus, .bg-inverse .btn.btn-warning:hover, .open > .bg-inverse .btn-warning.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-warning.dropdown-toggle {
+ color: #ff5722;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-warning.active.custom-file-control:focus:before, .bg-inverse .btn-warning.active.custom-file-control:hover:before, .bg-inverse .btn-warning.active.focus.custom-file-control:before, .bg-inverse .btn-warning.custom-file-control:active.focus:before, .bg-inverse .btn-warning.custom-file-control:active:focus:before, .bg-inverse .btn-warning.custom-file-control:active:hover:before, .bg-inverse .btn.btn-warning.active.focus, .bg-inverse .btn.btn-warning.active:focus, .bg-inverse .btn.btn-warning.active:hover, .bg-inverse .btn.btn-warning:active.focus, .bg-inverse .btn.btn-warning:active:focus, .bg-inverse .btn.btn-warning:active:hover, .open > .bg-inverse .btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-warning.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-warning.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-warning.dropdown-toggle:hover {
+ color: #ff5722;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-warning.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-warning.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-warning.custom-file-control:disabled.focus:before, .bg-inverse .btn-warning.custom-file-control:disabled:focus:before, .bg-inverse .btn-warning.custom-file-control:disabled:hover:before, .bg-inverse .btn-warning.disabled.custom-file-control:focus:before, .bg-inverse .btn-warning.disabled.custom-file-control:hover:before, .bg-inverse .btn-warning.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-warning.disabled.focus, .bg-inverse .btn.btn-warning.disabled:focus, .bg-inverse .btn.btn-warning.disabled:hover, .bg-inverse .btn.btn-warning:disabled.focus, .bg-inverse .btn.btn-warning:disabled:focus, .bg-inverse .btn.btn-warning:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-warning.btn-link.custom-file-control:before, .btn.btn-warning.btn-link {
+ background-color: transparent
+}
+
+.btn-danger.custom-file-control:before, .btn.btn-danger {
+ color: #f44336;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-danger.active.custom-file-control:before, .btn-danger.custom-file-control:active:before, .btn-danger.custom-file-control:focus:before, .btn-danger.custom-file-control:hover:before, .btn-danger.focus.custom-file-control:before, .btn.btn-danger.active, .btn.btn-danger.focus, .btn.btn-danger:active, .btn.btn-danger:focus, .btn.btn-danger:hover, .open > .btn-danger.dropdown-toggle.custom-file-control:before, .open > .btn.btn-danger.dropdown-toggle {
+ color: #f44336;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-danger.active.custom-file-control:focus:before, .btn-danger.active.custom-file-control:hover:before, .btn-danger.active.focus.custom-file-control:before, .btn-danger.custom-file-control:active.focus:before, .btn-danger.custom-file-control:active:focus:before, .btn-danger.custom-file-control:active:hover:before, .btn.btn-danger.active.focus, .btn.btn-danger.active:focus, .btn.btn-danger.active:hover, .btn.btn-danger:active.focus, .btn.btn-danger:active:focus, .btn.btn-danger:active:hover, .open > .btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-danger.dropdown-toggle.focus, .open > .btn.btn-danger.dropdown-toggle:focus, .open > .btn.btn-danger.dropdown-toggle:hover {
+ color: #f44336;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: hsla(0, 0%, 60%, .4)
+}
+
+.open > .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-danger.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-danger.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-danger.custom-file-control:disabled.focus:before, .btn-danger.custom-file-control:disabled:focus:before, .btn-danger.custom-file-control:disabled:hover:before, .btn-danger.disabled.custom-file-control:focus:before, .btn-danger.disabled.custom-file-control:hover:before, .btn-danger.disabled.focus.custom-file-control:before, .btn.btn-danger.disabled.focus, .btn.btn-danger.disabled:focus, .btn.btn-danger.disabled:hover, .btn.btn-danger:disabled.focus, .btn.btn-danger:disabled:focus, .btn.btn-danger:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-danger.custom-file-control:before, .bg-inverse .btn.btn-danger {
+ color: #f44336;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-danger.active.custom-file-control:before, .bg-inverse .btn-danger.custom-file-control:active:before, .bg-inverse .btn-danger.custom-file-control:focus:before, .bg-inverse .btn-danger.custom-file-control:hover:before, .bg-inverse .btn-danger.focus.custom-file-control:before, .bg-inverse .btn.btn-danger.active, .bg-inverse .btn.btn-danger.focus, .bg-inverse .btn.btn-danger:active, .bg-inverse .btn.btn-danger:focus, .bg-inverse .btn.btn-danger:hover, .open > .bg-inverse .btn-danger.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-danger.dropdown-toggle {
+ color: #f44336;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-danger.active.custom-file-control:focus:before, .bg-inverse .btn-danger.active.custom-file-control:hover:before, .bg-inverse .btn-danger.active.focus.custom-file-control:before, .bg-inverse .btn-danger.custom-file-control:active.focus:before, .bg-inverse .btn-danger.custom-file-control:active:focus:before, .bg-inverse .btn-danger.custom-file-control:active:hover:before, .bg-inverse .btn.btn-danger.active.focus, .bg-inverse .btn.btn-danger.active:focus, .bg-inverse .btn.btn-danger.active:hover, .bg-inverse .btn.btn-danger:active.focus, .bg-inverse .btn.btn-danger:active:focus, .bg-inverse .btn.btn-danger:active:hover, .open > .bg-inverse .btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-danger.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-danger.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-danger.dropdown-toggle:hover {
+ color: #f44336;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-danger.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-danger.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-danger.custom-file-control:disabled.focus:before, .bg-inverse .btn-danger.custom-file-control:disabled:focus:before, .bg-inverse .btn-danger.custom-file-control:disabled:hover:before, .bg-inverse .btn-danger.disabled.custom-file-control:focus:before, .bg-inverse .btn-danger.disabled.custom-file-control:hover:before, .bg-inverse .btn-danger.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-danger.disabled.focus, .bg-inverse .btn.btn-danger.disabled:focus, .bg-inverse .btn.btn-danger.disabled:hover, .bg-inverse .btn.btn-danger:disabled.focus, .bg-inverse .btn.btn-danger:disabled:focus, .bg-inverse .btn.btn-danger:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-danger.btn-link.custom-file-control:before, .btn.btn-danger.btn-link {
+ background-color: transparent
+}
+
+.btn-light.custom-file-control:before, .btn.btn-light {
+ color: #f5f5f5;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-light.active.custom-file-control:before, .btn-light.custom-file-control:active:before, .btn-light.custom-file-control:focus:before, .btn-light.custom-file-control:hover:before, .btn-light.focus.custom-file-control:before, .btn.btn-light.active, .btn.btn-light.focus, .btn.btn-light:active, .btn.btn-light:focus, .btn.btn-light:hover, .open > .btn-light.dropdown-toggle.custom-file-control:before, .open > .btn.btn-light.dropdown-toggle {
+ color: #f5f5f5;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-light.active.custom-file-control:focus:before, .btn-light.active.custom-file-control:hover:before, .btn-light.active.focus.custom-file-control:before, .btn-light.custom-file-control:active.focus:before, .btn-light.custom-file-control:active:focus:before, .btn-light.custom-file-control:active:hover:before, .btn.btn-light.active.focus, .btn.btn-light.active:focus, .btn.btn-light.active:hover, .btn.btn-light:active.focus, .btn.btn-light:active:focus, .btn.btn-light:active:hover, .open > .btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-light.dropdown-toggle.focus, .open > .btn.btn-light.dropdown-toggle:focus, .open > .btn.btn-light.dropdown-toggle:hover {
+ color: #f5f5f5;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: hsla(0, 0%, 60%, .4)
+}
+
+.open > .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-light.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-light.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-light.custom-file-control:disabled.focus:before, .btn-light.custom-file-control:disabled:focus:before, .btn-light.custom-file-control:disabled:hover:before, .btn-light.disabled.custom-file-control:focus:before, .btn-light.disabled.custom-file-control:hover:before, .btn-light.disabled.focus.custom-file-control:before, .btn.btn-light.disabled.focus, .btn.btn-light.disabled:focus, .btn.btn-light.disabled:hover, .btn.btn-light:disabled.focus, .btn.btn-light:disabled:focus, .btn.btn-light:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-light.custom-file-control:before, .bg-inverse .btn.btn-light {
+ color: #f5f5f5;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-light.active.custom-file-control:before, .bg-inverse .btn-light.custom-file-control:active:before, .bg-inverse .btn-light.custom-file-control:focus:before, .bg-inverse .btn-light.custom-file-control:hover:before, .bg-inverse .btn-light.focus.custom-file-control:before, .bg-inverse .btn.btn-light.active, .bg-inverse .btn.btn-light.focus, .bg-inverse .btn.btn-light:active, .bg-inverse .btn.btn-light:focus, .bg-inverse .btn.btn-light:hover, .open > .bg-inverse .btn-light.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-light.dropdown-toggle {
+ color: #f5f5f5;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-light.active.custom-file-control:focus:before, .bg-inverse .btn-light.active.custom-file-control:hover:before, .bg-inverse .btn-light.active.focus.custom-file-control:before, .bg-inverse .btn-light.custom-file-control:active.focus:before, .bg-inverse .btn-light.custom-file-control:active:focus:before, .bg-inverse .btn-light.custom-file-control:active:hover:before, .bg-inverse .btn.btn-light.active.focus, .bg-inverse .btn.btn-light.active:focus, .bg-inverse .btn.btn-light.active:hover, .bg-inverse .btn.btn-light:active.focus, .bg-inverse .btn.btn-light:active:focus, .bg-inverse .btn.btn-light:active:hover, .open > .bg-inverse .btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-light.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-light.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-light.dropdown-toggle:hover {
+ color: #f5f5f5;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-light.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-light.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-light.custom-file-control:disabled.focus:before, .bg-inverse .btn-light.custom-file-control:disabled:focus:before, .bg-inverse .btn-light.custom-file-control:disabled:hover:before, .bg-inverse .btn-light.disabled.custom-file-control:focus:before, .bg-inverse .btn-light.disabled.custom-file-control:hover:before, .bg-inverse .btn-light.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-light.disabled.focus, .bg-inverse .btn.btn-light.disabled:focus, .bg-inverse .btn.btn-light.disabled:hover, .bg-inverse .btn.btn-light:disabled.focus, .bg-inverse .btn.btn-light:disabled:focus, .bg-inverse .btn.btn-light:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-light.btn-link.custom-file-control:before, .btn.btn-light.btn-link {
+ background-color: transparent
+}
+
+.btn-dark.custom-file-control:before, .btn.btn-dark {
+ color: #424242;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-dark.active.custom-file-control:before, .btn-dark.custom-file-control:active:before, .btn-dark.custom-file-control:focus:before, .btn-dark.custom-file-control:hover:before, .btn-dark.focus.custom-file-control:before, .btn.btn-dark.active, .btn.btn-dark.focus, .btn.btn-dark:active, .btn.btn-dark:focus, .btn.btn-dark:hover, .open > .btn-dark.dropdown-toggle.custom-file-control:before, .open > .btn.btn-dark.dropdown-toggle {
+ color: #424242;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-dark.active.custom-file-control:focus:before, .btn-dark.active.custom-file-control:hover:before, .btn-dark.active.focus.custom-file-control:before, .btn-dark.custom-file-control:active.focus:before, .btn-dark.custom-file-control:active:focus:before, .btn-dark.custom-file-control:active:hover:before, .btn.btn-dark.active.focus, .btn.btn-dark.active:focus, .btn.btn-dark.active:hover, .btn.btn-dark:active.focus, .btn.btn-dark:active:focus, .btn.btn-dark:active:hover, .open > .btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-dark.dropdown-toggle.focus, .open > .btn.btn-dark.dropdown-toggle:focus, .open > .btn.btn-dark.dropdown-toggle:hover {
+ color: #424242;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: hsla(0, 0%, 60%, .4)
+}
+
+.open > .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-dark.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-dark.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-dark.custom-file-control:disabled.focus:before, .btn-dark.custom-file-control:disabled:focus:before, .btn-dark.custom-file-control:disabled:hover:before, .btn-dark.disabled.custom-file-control:focus:before, .btn-dark.disabled.custom-file-control:hover:before, .btn-dark.disabled.focus.custom-file-control:before, .btn.btn-dark.disabled.focus, .btn.btn-dark.disabled:focus, .btn.btn-dark.disabled:hover, .btn.btn-dark:disabled.focus, .btn.btn-dark:disabled:focus, .btn.btn-dark:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-dark.custom-file-control:before, .bg-inverse .btn.btn-dark {
+ color: #424242;
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.bg-inverse .btn-dark.active.custom-file-control:before, .bg-inverse .btn-dark.custom-file-control:active:before, .bg-inverse .btn-dark.custom-file-control:focus:before, .bg-inverse .btn-dark.custom-file-control:hover:before, .bg-inverse .btn-dark.focus.custom-file-control:before, .bg-inverse .btn.btn-dark.active, .bg-inverse .btn.btn-dark.focus, .bg-inverse .btn.btn-dark:active, .bg-inverse .btn.btn-dark:focus, .bg-inverse .btn.btn-dark:hover, .open > .bg-inverse .btn-dark.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-dark.dropdown-toggle {
+ color: #424242;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-dark.active.custom-file-control:focus:before, .bg-inverse .btn-dark.active.custom-file-control:hover:before, .bg-inverse .btn-dark.active.focus.custom-file-control:before, .bg-inverse .btn-dark.custom-file-control:active.focus:before, .bg-inverse .btn-dark.custom-file-control:active:focus:before, .bg-inverse .btn-dark.custom-file-control:active:hover:before, .bg-inverse .btn.btn-dark.active.focus, .bg-inverse .btn.btn-dark.active:focus, .bg-inverse .btn.btn-dark.active:hover, .bg-inverse .btn.btn-dark:active.focus, .bg-inverse .btn.btn-dark:active:focus, .bg-inverse .btn.btn-dark:active:hover, .open > .bg-inverse .btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-dark.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-dark.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-dark.dropdown-toggle:hover {
+ color: #424242;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-dark.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-dark.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-dark.custom-file-control:disabled.focus:before, .bg-inverse .btn-dark.custom-file-control:disabled:focus:before, .bg-inverse .btn-dark.custom-file-control:disabled:hover:before, .bg-inverse .btn-dark.disabled.custom-file-control:focus:before, .bg-inverse .btn-dark.disabled.custom-file-control:hover:before, .bg-inverse .btn-dark.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-dark.disabled.focus, .bg-inverse .btn.btn-dark.disabled:focus, .bg-inverse .btn.btn-dark.disabled:hover, .bg-inverse .btn.btn-dark:disabled.focus, .bg-inverse .btn.btn-dark:disabled:focus, .bg-inverse .btn.btn-dark:disabled:hover {
+ background-color: transparent;
+ border-color: #ccc
+}
+
+.btn-dark.btn-link.custom-file-control:before, .btn.btn-dark.btn-link {
+ background-color: transparent
+}
+
+.bmd-btn-fab.btn-primary.custom-file-control:before, .btn-group-raised .btn-primary.custom-file-control:before, .btn-group-raised .btn.btn-primary, .btn-raised.btn-primary.custom-file-control:before, .btn.bmd-btn-fab.btn-primary, .btn.btn-raised.btn-primary {
+ color: #fff;
+ background-color: #009688;
+ border-color: #009688
+}
+
+.bmd-btn-fab.btn-primary.active.custom-file-control:before, .bmd-btn-fab.btn-primary.custom-file-control:active:before, .bmd-btn-fab.btn-primary.custom-file-control:focus:before, .bmd-btn-fab.btn-primary.custom-file-control:hover:before, .bmd-btn-fab.btn-primary.focus.custom-file-control:before, .btn-group-raised .btn-primary.active.custom-file-control:before, .btn-group-raised .btn-primary.custom-file-control:active:before, .btn-group-raised .btn-primary.custom-file-control:focus:before, .btn-group-raised .btn-primary.custom-file-control:hover:before, .btn-group-raised .btn-primary.focus.custom-file-control:before, .btn-group-raised .btn.btn-primary.active, .btn-group-raised .btn.btn-primary.focus, .btn-group-raised .btn.btn-primary:active, .btn-group-raised .btn.btn-primary:focus, .btn-group-raised .btn.btn-primary:hover, .btn-raised.btn-primary.active.custom-file-control:before, .btn-raised.btn-primary.custom-file-control:active:before, .btn-raised.btn-primary.custom-file-control:focus:before, .btn-raised.btn-primary.custom-file-control:hover:before, .btn-raised.btn-primary.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-primary.active, .btn.bmd-btn-fab.btn-primary.focus, .btn.bmd-btn-fab.btn-primary:active, .btn.bmd-btn-fab.btn-primary:focus, .btn.bmd-btn-fab.btn-primary:hover, .btn.btn-raised.btn-primary.active, .btn.btn-raised.btn-primary.focus, .btn.btn-raised.btn-primary:active, .btn.btn-raised.btn-primary:focus, .btn.btn-raised.btn-primary:hover, .open > .bmd-btn-fab.btn-primary.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle, .open > .btn-raised.btn-primary.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle, .open > .btn.btn-raised.btn-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #008276;
+ border-color: #005951
+}
+
+.bmd-btn-fab.btn-primary.active.custom-file-control:focus:before, .bmd-btn-fab.btn-primary.active.custom-file-control:hover:before, .bmd-btn-fab.btn-primary.active.focus.custom-file-control:before, .bmd-btn-fab.btn-primary.custom-file-control:active.focus:before, .bmd-btn-fab.btn-primary.custom-file-control:active:focus:before, .bmd-btn-fab.btn-primary.custom-file-control:active:hover:before, .btn-group-raised .btn-primary.active.custom-file-control:focus:before, .btn-group-raised .btn-primary.active.custom-file-control:hover:before, .btn-group-raised .btn-primary.active.focus.custom-file-control:before, .btn-group-raised .btn-primary.custom-file-control:active.focus:before, .btn-group-raised .btn-primary.custom-file-control:active:focus:before, .btn-group-raised .btn-primary.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-primary.active.focus, .btn-group-raised .btn.btn-primary.active:focus, .btn-group-raised .btn.btn-primary.active:hover, .btn-group-raised .btn.btn-primary:active.focus, .btn-group-raised .btn.btn-primary:active:focus, .btn-group-raised .btn.btn-primary:active:hover, .btn-raised.btn-primary.active.custom-file-control:focus:before, .btn-raised.btn-primary.active.custom-file-control:hover:before, .btn-raised.btn-primary.active.focus.custom-file-control:before, .btn-raised.btn-primary.custom-file-control:active.focus:before, .btn-raised.btn-primary.custom-file-control:active:focus:before, .btn-raised.btn-primary.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-primary.active.focus, .btn.bmd-btn-fab.btn-primary.active:focus, .btn.bmd-btn-fab.btn-primary.active:hover, .btn.bmd-btn-fab.btn-primary:active.focus, .btn.bmd-btn-fab.btn-primary:active:focus, .btn.bmd-btn-fab.btn-primary:active:hover, .btn.btn-raised.btn-primary.active.focus, .btn.btn-raised.btn-primary.active:focus, .btn.btn-raised.btn-primary.active:hover, .btn.btn-raised.btn-primary:active.focus, .btn.btn-raised.btn-primary:active:focus, .btn.btn-raised.btn-primary:active:hover, .open > .bmd-btn-fab.btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle:hover, .open > .btn-raised.btn-primary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-primary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle:hover, .open > .btn.btn-raised.btn-primary.dropdown-toggle.focus, .open > .btn.btn-raised.btn-primary.dropdown-toggle:focus, .open > .btn.btn-raised.btn-primary.dropdown-toggle:hover {
+ color: #fff;
+ background-color: #008276;
+ border-color: #001714
+}
+
+.open > .bmd-btn-fab.btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-primary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: #009688
+}
+
+.open > .bmd-btn-fab.btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-primary.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-primary.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-primary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: #008276
+}
+
+.bmd-btn-fab.btn-primary.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-primary.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-primary.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-primary.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-primary.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-primary.disabled.focus.custom-file-control:before, .btn-group-raised .btn-primary.custom-file-control:disabled.focus:before, .btn-group-raised .btn-primary.custom-file-control:disabled:focus:before, .btn-group-raised .btn-primary.custom-file-control:disabled:hover:before, .btn-group-raised .btn-primary.disabled.custom-file-control:focus:before, .btn-group-raised .btn-primary.disabled.custom-file-control:hover:before, .btn-group-raised .btn-primary.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-primary.disabled.focus, .btn-group-raised .btn.btn-primary.disabled:focus, .btn-group-raised .btn.btn-primary.disabled:hover, .btn-group-raised .btn.btn-primary:disabled.focus, .btn-group-raised .btn.btn-primary:disabled:focus, .btn-group-raised .btn.btn-primary:disabled:hover, .btn-raised.btn-primary.custom-file-control:disabled.focus:before, .btn-raised.btn-primary.custom-file-control:disabled:focus:before, .btn-raised.btn-primary.custom-file-control:disabled:hover:before, .btn-raised.btn-primary.disabled.custom-file-control:focus:before, .btn-raised.btn-primary.disabled.custom-file-control:hover:before, .btn-raised.btn-primary.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-primary.disabled.focus, .btn.bmd-btn-fab.btn-primary.disabled:focus, .btn.bmd-btn-fab.btn-primary.disabled:hover, .btn.bmd-btn-fab.btn-primary:disabled.focus, .btn.bmd-btn-fab.btn-primary:disabled:focus, .btn.bmd-btn-fab.btn-primary:disabled:hover, .btn.btn-raised.btn-primary.disabled.focus, .btn.btn-raised.btn-primary.disabled:focus, .btn.btn-raised.btn-primary.disabled:hover, .btn.btn-raised.btn-primary:disabled.focus, .btn.btn-raised.btn-primary:disabled:focus, .btn.btn-raised.btn-primary:disabled:hover {
+ background-color: #009688;
+ border-color: #009688
+}
+
+.bmd-btn-fab.btn-secondary.custom-file-control:before, .btn-group-raised .btn-secondary.custom-file-control:before, .btn-group-raised .btn.btn-secondary, .btn-raised.btn-secondary.custom-file-control:before, .btn.bmd-btn-fab.btn-secondary, .btn.btn-raised.btn-secondary {
+ color: #fff;
+ background-color: #6c757d;
+ border-color: #6c757d
+}
+
+.bmd-btn-fab.btn-secondary.active.custom-file-control:before, .bmd-btn-fab.btn-secondary.custom-file-control:active:before, .bmd-btn-fab.btn-secondary.custom-file-control:focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:hover:before, .bmd-btn-fab.btn-secondary.focus.custom-file-control:before, .btn-group-raised .btn-secondary.active.custom-file-control:before, .btn-group-raised .btn-secondary.custom-file-control:active:before, .btn-group-raised .btn-secondary.custom-file-control:focus:before, .btn-group-raised .btn-secondary.custom-file-control:hover:before, .btn-group-raised .btn-secondary.focus.custom-file-control:before, .btn-group-raised .btn.btn-secondary.active, .btn-group-raised .btn.btn-secondary.focus, .btn-group-raised .btn.btn-secondary:active, .btn-group-raised .btn.btn-secondary:focus, .btn-group-raised .btn.btn-secondary:hover, .btn-raised.btn-secondary.active.custom-file-control:before, .btn-raised.btn-secondary.custom-file-control:active:before, .btn-raised.btn-secondary.custom-file-control:focus:before, .btn-raised.btn-secondary.custom-file-control:hover:before, .btn-raised.btn-secondary.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-secondary.active, .btn.bmd-btn-fab.btn-secondary.focus, .btn.bmd-btn-fab.btn-secondary:active, .btn.bmd-btn-fab.btn-secondary:focus, .btn.bmd-btn-fab.btn-secondary:hover, .btn.btn-raised.btn-secondary.active, .btn.btn-raised.btn-secondary.focus, .btn.btn-raised.btn-secondary:active, .btn.btn-raised.btn-secondary:focus, .btn.btn-raised.btn-secondary:hover, .open > .bmd-btn-fab.btn-secondary.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle, .open > .btn-raised.btn-secondary.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle, .open > .btn.btn-raised.btn-secondary.dropdown-toggle {
+ color: #fff;
+ background-color: #636b72;
+ border-color: #50565c
+}
+
+.bmd-btn-fab.btn-secondary.active.custom-file-control:focus:before, .bmd-btn-fab.btn-secondary.active.custom-file-control:hover:before, .bmd-btn-fab.btn-secondary.active.focus.custom-file-control:before, .bmd-btn-fab.btn-secondary.custom-file-control:active.focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:active:focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:active:hover:before, .btn-group-raised .btn-secondary.active.custom-file-control:focus:before, .btn-group-raised .btn-secondary.active.custom-file-control:hover:before, .btn-group-raised .btn-secondary.active.focus.custom-file-control:before, .btn-group-raised .btn-secondary.custom-file-control:active.focus:before, .btn-group-raised .btn-secondary.custom-file-control:active:focus:before, .btn-group-raised .btn-secondary.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-secondary.active.focus, .btn-group-raised .btn.btn-secondary.active:focus, .btn-group-raised .btn.btn-secondary.active:hover, .btn-group-raised .btn.btn-secondary:active.focus, .btn-group-raised .btn.btn-secondary:active:focus, .btn-group-raised .btn.btn-secondary:active:hover, .btn-raised.btn-secondary.active.custom-file-control:focus:before, .btn-raised.btn-secondary.active.custom-file-control:hover:before, .btn-raised.btn-secondary.active.focus.custom-file-control:before, .btn-raised.btn-secondary.custom-file-control:active.focus:before, .btn-raised.btn-secondary.custom-file-control:active:focus:before, .btn-raised.btn-secondary.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-secondary.active.focus, .btn.bmd-btn-fab.btn-secondary.active:focus, .btn.bmd-btn-fab.btn-secondary.active:hover, .btn.bmd-btn-fab.btn-secondary:active.focus, .btn.bmd-btn-fab.btn-secondary:active:focus, .btn.bmd-btn-fab.btn-secondary:active:hover, .btn.btn-raised.btn-secondary.active.focus, .btn.btn-raised.btn-secondary.active:focus, .btn.btn-raised.btn-secondary.active:hover, .btn.btn-raised.btn-secondary:active.focus, .btn.btn-raised.btn-secondary:active:focus, .btn.btn-raised.btn-secondary:active:hover, .open > .bmd-btn-fab.btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle:hover, .open > .btn-raised.btn-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle:hover, .open > .btn.btn-raised.btn-secondary.dropdown-toggle.focus, .open > .btn.btn-raised.btn-secondary.dropdown-toggle:focus, .open > .btn.btn-raised.btn-secondary.dropdown-toggle:hover {
+ color: #fff;
+ background-color: #636b72;
+ border-color: #313539
+}
+
+.open > .bmd-btn-fab.btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-secondary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: #6c757d
+}
+
+.open > .bmd-btn-fab.btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-secondary.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-secondary.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-secondary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: #636b72
+}
+
+.bmd-btn-fab.btn-secondary.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-secondary.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-secondary.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-secondary.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-secondary.disabled.focus.custom-file-control:before, .btn-group-raised .btn-secondary.custom-file-control:disabled.focus:before, .btn-group-raised .btn-secondary.custom-file-control:disabled:focus:before, .btn-group-raised .btn-secondary.custom-file-control:disabled:hover:before, .btn-group-raised .btn-secondary.disabled.custom-file-control:focus:before, .btn-group-raised .btn-secondary.disabled.custom-file-control:hover:before, .btn-group-raised .btn-secondary.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-secondary.disabled.focus, .btn-group-raised .btn.btn-secondary.disabled:focus, .btn-group-raised .btn.btn-secondary.disabled:hover, .btn-group-raised .btn.btn-secondary:disabled.focus, .btn-group-raised .btn.btn-secondary:disabled:focus, .btn-group-raised .btn.btn-secondary:disabled:hover, .btn-raised.btn-secondary.custom-file-control:disabled.focus:before, .btn-raised.btn-secondary.custom-file-control:disabled:focus:before, .btn-raised.btn-secondary.custom-file-control:disabled:hover:before, .btn-raised.btn-secondary.disabled.custom-file-control:focus:before, .btn-raised.btn-secondary.disabled.custom-file-control:hover:before, .btn-raised.btn-secondary.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-secondary.disabled.focus, .btn.bmd-btn-fab.btn-secondary.disabled:focus, .btn.bmd-btn-fab.btn-secondary.disabled:hover, .btn.bmd-btn-fab.btn-secondary:disabled.focus, .btn.bmd-btn-fab.btn-secondary:disabled:focus, .btn.bmd-btn-fab.btn-secondary:disabled:hover, .btn.btn-raised.btn-secondary.disabled.focus, .btn.btn-raised.btn-secondary.disabled:focus, .btn.btn-raised.btn-secondary.disabled:hover, .btn.btn-raised.btn-secondary:disabled.focus, .btn.btn-raised.btn-secondary:disabled:focus, .btn.btn-raised.btn-secondary:disabled:hover {
+ background-color: #6c757d;
+ border-color: #6c757d
+}
+
+.bmd-btn-fab.btn-success.custom-file-control:before, .btn-group-raised .btn-success.custom-file-control:before, .btn-group-raised .btn.btn-success, .btn-raised.btn-success.custom-file-control:before, .btn.bmd-btn-fab.btn-success, .btn.btn-raised.btn-success {
+ color: #fff;
+ background-color: #4caf50;
+ border-color: #4caf50
+}
+
+.bmd-btn-fab.btn-success.active.custom-file-control:before, .bmd-btn-fab.btn-success.custom-file-control:active:before, .bmd-btn-fab.btn-success.custom-file-control:focus:before, .bmd-btn-fab.btn-success.custom-file-control:hover:before, .bmd-btn-fab.btn-success.focus.custom-file-control:before, .btn-group-raised .btn-success.active.custom-file-control:before, .btn-group-raised .btn-success.custom-file-control:active:before, .btn-group-raised .btn-success.custom-file-control:focus:before, .btn-group-raised .btn-success.custom-file-control:hover:before, .btn-group-raised .btn-success.focus.custom-file-control:before, .btn-group-raised .btn.btn-success.active, .btn-group-raised .btn.btn-success.focus, .btn-group-raised .btn.btn-success:active, .btn-group-raised .btn.btn-success:focus, .btn-group-raised .btn.btn-success:hover, .btn-raised.btn-success.active.custom-file-control:before, .btn-raised.btn-success.custom-file-control:active:before, .btn-raised.btn-success.custom-file-control:focus:before, .btn-raised.btn-success.custom-file-control:hover:before, .btn-raised.btn-success.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-success.active, .btn.bmd-btn-fab.btn-success.focus, .btn.bmd-btn-fab.btn-success:active, .btn.bmd-btn-fab.btn-success:focus, .btn.bmd-btn-fab.btn-success:hover, .btn.btn-raised.btn-success.active, .btn.btn-raised.btn-success.focus, .btn.btn-raised.btn-success:active, .btn.btn-raised.btn-success:focus, .btn.btn-raised.btn-success:hover, .open > .bmd-btn-fab.btn-success.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-success.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-success.dropdown-toggle, .open > .btn-raised.btn-success.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle, .open > .btn.btn-raised.btn-success.dropdown-toggle {
+ color: #fff;
+ background-color: #46a149;
+ border-color: #39843c
+}
+
+.bmd-btn-fab.btn-success.active.custom-file-control:focus:before, .bmd-btn-fab.btn-success.active.custom-file-control:hover:before, .bmd-btn-fab.btn-success.active.focus.custom-file-control:before, .bmd-btn-fab.btn-success.custom-file-control:active.focus:before, .bmd-btn-fab.btn-success.custom-file-control:active:focus:before, .bmd-btn-fab.btn-success.custom-file-control:active:hover:before, .btn-group-raised .btn-success.active.custom-file-control:focus:before, .btn-group-raised .btn-success.active.custom-file-control:hover:before, .btn-group-raised .btn-success.active.focus.custom-file-control:before, .btn-group-raised .btn-success.custom-file-control:active.focus:before, .btn-group-raised .btn-success.custom-file-control:active:focus:before, .btn-group-raised .btn-success.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-success.active.focus, .btn-group-raised .btn.btn-success.active:focus, .btn-group-raised .btn.btn-success.active:hover, .btn-group-raised .btn.btn-success:active.focus, .btn-group-raised .btn.btn-success:active:focus, .btn-group-raised .btn.btn-success:active:hover, .btn-raised.btn-success.active.custom-file-control:focus:before, .btn-raised.btn-success.active.custom-file-control:hover:before, .btn-raised.btn-success.active.focus.custom-file-control:before, .btn-raised.btn-success.custom-file-control:active.focus:before, .btn-raised.btn-success.custom-file-control:active:focus:before, .btn-raised.btn-success.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-success.active.focus, .btn.bmd-btn-fab.btn-success.active:focus, .btn.bmd-btn-fab.btn-success.active:hover, .btn.bmd-btn-fab.btn-success:active.focus, .btn.bmd-btn-fab.btn-success:active:focus, .btn.bmd-btn-fab.btn-success:active:hover, .btn.btn-raised.btn-success.active.focus, .btn.btn-raised.btn-success.active:focus, .btn.btn-raised.btn-success.active:hover, .btn.btn-raised.btn-success:active.focus, .btn.btn-raised.btn-success:active:focus, .btn.btn-raised.btn-success:active:hover, .open > .bmd-btn-fab.btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-success.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-success.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-success.dropdown-toggle:hover, .open > .btn-raised.btn-success.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-success.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle:hover, .open > .btn.btn-raised.btn-success.dropdown-toggle.focus, .open > .btn.btn-raised.btn-success.dropdown-toggle:focus, .open > .btn.btn-raised.btn-success.dropdown-toggle:hover {
+ color: #fff;
+ background-color: #46a149;
+ border-color: #255627
+}
+
+.open > .bmd-btn-fab.btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-success.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-success.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: #4caf50
+}
+
+.open > .bmd-btn-fab.btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-success.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-success.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-success.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: #46a149
+}
+
+.bmd-btn-fab.btn-success.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-success.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-success.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-success.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-success.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-success.disabled.focus.custom-file-control:before, .btn-group-raised .btn-success.custom-file-control:disabled.focus:before, .btn-group-raised .btn-success.custom-file-control:disabled:focus:before, .btn-group-raised .btn-success.custom-file-control:disabled:hover:before, .btn-group-raised .btn-success.disabled.custom-file-control:focus:before, .btn-group-raised .btn-success.disabled.custom-file-control:hover:before, .btn-group-raised .btn-success.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-success.disabled.focus, .btn-group-raised .btn.btn-success.disabled:focus, .btn-group-raised .btn.btn-success.disabled:hover, .btn-group-raised .btn.btn-success:disabled.focus, .btn-group-raised .btn.btn-success:disabled:focus, .btn-group-raised .btn.btn-success:disabled:hover, .btn-raised.btn-success.custom-file-control:disabled.focus:before, .btn-raised.btn-success.custom-file-control:disabled:focus:before, .btn-raised.btn-success.custom-file-control:disabled:hover:before, .btn-raised.btn-success.disabled.custom-file-control:focus:before, .btn-raised.btn-success.disabled.custom-file-control:hover:before, .btn-raised.btn-success.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-success.disabled.focus, .btn.bmd-btn-fab.btn-success.disabled:focus, .btn.bmd-btn-fab.btn-success.disabled:hover, .btn.bmd-btn-fab.btn-success:disabled.focus, .btn.bmd-btn-fab.btn-success:disabled:focus, .btn.bmd-btn-fab.btn-success:disabled:hover, .btn.btn-raised.btn-success.disabled.focus, .btn.btn-raised.btn-success.disabled:focus, .btn.btn-raised.btn-success.disabled:hover, .btn.btn-raised.btn-success:disabled.focus, .btn.btn-raised.btn-success:disabled:focus, .btn.btn-raised.btn-success:disabled:hover {
+ background-color: #4caf50;
+ border-color: #4caf50
+}
+
+.bmd-btn-fab.btn-info.custom-file-control:before, .btn-group-raised .btn-info.custom-file-control:before, .btn-group-raised .btn.btn-info, .btn-raised.btn-info.custom-file-control:before, .btn.bmd-btn-fab.btn-info, .btn.btn-raised.btn-info {
+ color: #fff;
+ background-color: #03a9f4;
+ border-color: #03a9f4
+}
+
+.bmd-btn-fab.btn-info.active.custom-file-control:before, .bmd-btn-fab.btn-info.custom-file-control:active:before, .bmd-btn-fab.btn-info.custom-file-control:focus:before, .bmd-btn-fab.btn-info.custom-file-control:hover:before, .bmd-btn-fab.btn-info.focus.custom-file-control:before, .btn-group-raised .btn-info.active.custom-file-control:before, .btn-group-raised .btn-info.custom-file-control:active:before, .btn-group-raised .btn-info.custom-file-control:focus:before, .btn-group-raised .btn-info.custom-file-control:hover:before, .btn-group-raised .btn-info.focus.custom-file-control:before, .btn-group-raised .btn.btn-info.active, .btn-group-raised .btn.btn-info.focus, .btn-group-raised .btn.btn-info:active, .btn-group-raised .btn.btn-info:focus, .btn-group-raised .btn.btn-info:hover, .btn-raised.btn-info.active.custom-file-control:before, .btn-raised.btn-info.custom-file-control:active:before, .btn-raised.btn-info.custom-file-control:focus:before, .btn-raised.btn-info.custom-file-control:hover:before, .btn-raised.btn-info.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-info.active, .btn.bmd-btn-fab.btn-info.focus, .btn.bmd-btn-fab.btn-info:active, .btn.bmd-btn-fab.btn-info:focus, .btn.bmd-btn-fab.btn-info:hover, .btn.btn-raised.btn-info.active, .btn.btn-raised.btn-info.focus, .btn.btn-raised.btn-info:active, .btn.btn-raised.btn-info:focus, .btn.btn-raised.btn-info:hover, .open > .bmd-btn-fab.btn-info.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-info.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-info.dropdown-toggle, .open > .btn-raised.btn-info.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle, .open > .btn.btn-raised.btn-info.dropdown-toggle {
+ color: #fff;
+ background-color: #039be0;
+ border-color: #027fb8
+}
+
+.bmd-btn-fab.btn-info.active.custom-file-control:focus:before, .bmd-btn-fab.btn-info.active.custom-file-control:hover:before, .bmd-btn-fab.btn-info.active.focus.custom-file-control:before, .bmd-btn-fab.btn-info.custom-file-control:active.focus:before, .bmd-btn-fab.btn-info.custom-file-control:active:focus:before, .bmd-btn-fab.btn-info.custom-file-control:active:hover:before, .btn-group-raised .btn-info.active.custom-file-control:focus:before, .btn-group-raised .btn-info.active.custom-file-control:hover:before, .btn-group-raised .btn-info.active.focus.custom-file-control:before, .btn-group-raised .btn-info.custom-file-control:active.focus:before, .btn-group-raised .btn-info.custom-file-control:active:focus:before, .btn-group-raised .btn-info.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-info.active.focus, .btn-group-raised .btn.btn-info.active:focus, .btn-group-raised .btn.btn-info.active:hover, .btn-group-raised .btn.btn-info:active.focus, .btn-group-raised .btn.btn-info:active:focus, .btn-group-raised .btn.btn-info:active:hover, .btn-raised.btn-info.active.custom-file-control:focus:before, .btn-raised.btn-info.active.custom-file-control:hover:before, .btn-raised.btn-info.active.focus.custom-file-control:before, .btn-raised.btn-info.custom-file-control:active.focus:before, .btn-raised.btn-info.custom-file-control:active:focus:before, .btn-raised.btn-info.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-info.active.focus, .btn.bmd-btn-fab.btn-info.active:focus, .btn.bmd-btn-fab.btn-info.active:hover, .btn.bmd-btn-fab.btn-info:active.focus, .btn.bmd-btn-fab.btn-info:active:focus, .btn.bmd-btn-fab.btn-info:active:hover, .btn.btn-raised.btn-info.active.focus, .btn.btn-raised.btn-info.active:focus, .btn.btn-raised.btn-info.active:hover, .btn.btn-raised.btn-info:active.focus, .btn.btn-raised.btn-info:active:focus, .btn.btn-raised.btn-info:active:hover, .open > .bmd-btn-fab.btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-info.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-info.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-info.dropdown-toggle:hover, .open > .btn-raised.btn-info.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-info.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle:hover, .open > .btn.btn-raised.btn-info.dropdown-toggle.focus, .open > .btn.btn-raised.btn-info.dropdown-toggle:focus, .open > .btn.btn-raised.btn-info.dropdown-toggle:hover {
+ color: #fff;
+ background-color: #039be0;
+ border-color: #015276
+}
+
+.open > .bmd-btn-fab.btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-info.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-info.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: #03a9f4
+}
+
+.open > .bmd-btn-fab.btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-info.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-info.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-info.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: #039be0
+}
+
+.bmd-btn-fab.btn-info.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-info.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-info.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-info.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-info.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-info.disabled.focus.custom-file-control:before, .btn-group-raised .btn-info.custom-file-control:disabled.focus:before, .btn-group-raised .btn-info.custom-file-control:disabled:focus:before, .btn-group-raised .btn-info.custom-file-control:disabled:hover:before, .btn-group-raised .btn-info.disabled.custom-file-control:focus:before, .btn-group-raised .btn-info.disabled.custom-file-control:hover:before, .btn-group-raised .btn-info.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-info.disabled.focus, .btn-group-raised .btn.btn-info.disabled:focus, .btn-group-raised .btn.btn-info.disabled:hover, .btn-group-raised .btn.btn-info:disabled.focus, .btn-group-raised .btn.btn-info:disabled:focus, .btn-group-raised .btn.btn-info:disabled:hover, .btn-raised.btn-info.custom-file-control:disabled.focus:before, .btn-raised.btn-info.custom-file-control:disabled:focus:before, .btn-raised.btn-info.custom-file-control:disabled:hover:before, .btn-raised.btn-info.disabled.custom-file-control:focus:before, .btn-raised.btn-info.disabled.custom-file-control:hover:before, .btn-raised.btn-info.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-info.disabled.focus, .btn.bmd-btn-fab.btn-info.disabled:focus, .btn.bmd-btn-fab.btn-info.disabled:hover, .btn.bmd-btn-fab.btn-info:disabled.focus, .btn.bmd-btn-fab.btn-info:disabled:focus, .btn.bmd-btn-fab.btn-info:disabled:hover, .btn.btn-raised.btn-info.disabled.focus, .btn.btn-raised.btn-info.disabled:focus, .btn.btn-raised.btn-info.disabled:hover, .btn.btn-raised.btn-info:disabled.focus, .btn.btn-raised.btn-info:disabled:focus, .btn.btn-raised.btn-info:disabled:hover {
+ background-color: #03a9f4;
+ border-color: #03a9f4
+}
+
+.bmd-btn-fab.btn-warning.custom-file-control:before, .btn-group-raised .btn-warning.custom-file-control:before, .btn-group-raised .btn.btn-warning, .btn-raised.btn-warning.custom-file-control:before, .btn.bmd-btn-fab.btn-warning, .btn.btn-raised.btn-warning {
+ color: #fff;
+ background-color: #ff5722;
+ border-color: #ff5722
+}
+
+.bmd-btn-fab.btn-warning.active.custom-file-control:before, .bmd-btn-fab.btn-warning.custom-file-control:active:before, .bmd-btn-fab.btn-warning.custom-file-control:focus:before, .bmd-btn-fab.btn-warning.custom-file-control:hover:before, .bmd-btn-fab.btn-warning.focus.custom-file-control:before, .btn-group-raised .btn-warning.active.custom-file-control:before, .btn-group-raised .btn-warning.custom-file-control:active:before, .btn-group-raised .btn-warning.custom-file-control:focus:before, .btn-group-raised .btn-warning.custom-file-control:hover:before, .btn-group-raised .btn-warning.focus.custom-file-control:before, .btn-group-raised .btn.btn-warning.active, .btn-group-raised .btn.btn-warning.focus, .btn-group-raised .btn.btn-warning:active, .btn-group-raised .btn.btn-warning:focus, .btn-group-raised .btn.btn-warning:hover, .btn-raised.btn-warning.active.custom-file-control:before, .btn-raised.btn-warning.custom-file-control:active:before, .btn-raised.btn-warning.custom-file-control:focus:before, .btn-raised.btn-warning.custom-file-control:hover:before, .btn-raised.btn-warning.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-warning.active, .btn.bmd-btn-fab.btn-warning.focus, .btn.bmd-btn-fab.btn-warning:active, .btn.bmd-btn-fab.btn-warning:focus, .btn.bmd-btn-fab.btn-warning:hover, .btn.btn-raised.btn-warning.active, .btn.btn-raised.btn-warning.focus, .btn.btn-raised.btn-warning:active, .btn.btn-raised.btn-warning:focus, .btn.btn-raised.btn-warning:hover, .open > .bmd-btn-fab.btn-warning.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle, .open > .btn-raised.btn-warning.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle, .open > .btn.btn-raised.btn-warning.dropdown-toggle {
+ color: #fff;
+ background-color: #ff470e;
+ border-color: #e43700
+}
+
+.bmd-btn-fab.btn-warning.active.custom-file-control:focus:before, .bmd-btn-fab.btn-warning.active.custom-file-control:hover:before, .bmd-btn-fab.btn-warning.active.focus.custom-file-control:before, .bmd-btn-fab.btn-warning.custom-file-control:active.focus:before, .bmd-btn-fab.btn-warning.custom-file-control:active:focus:before, .bmd-btn-fab.btn-warning.custom-file-control:active:hover:before, .btn-group-raised .btn-warning.active.custom-file-control:focus:before, .btn-group-raised .btn-warning.active.custom-file-control:hover:before, .btn-group-raised .btn-warning.active.focus.custom-file-control:before, .btn-group-raised .btn-warning.custom-file-control:active.focus:before, .btn-group-raised .btn-warning.custom-file-control:active:focus:before, .btn-group-raised .btn-warning.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-warning.active.focus, .btn-group-raised .btn.btn-warning.active:focus, .btn-group-raised .btn.btn-warning.active:hover, .btn-group-raised .btn.btn-warning:active.focus, .btn-group-raised .btn.btn-warning:active:focus, .btn-group-raised .btn.btn-warning:active:hover, .btn-raised.btn-warning.active.custom-file-control:focus:before, .btn-raised.btn-warning.active.custom-file-control:hover:before, .btn-raised.btn-warning.active.focus.custom-file-control:before, .btn-raised.btn-warning.custom-file-control:active.focus:before, .btn-raised.btn-warning.custom-file-control:active:focus:before, .btn-raised.btn-warning.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-warning.active.focus, .btn.bmd-btn-fab.btn-warning.active:focus, .btn.bmd-btn-fab.btn-warning.active:hover, .btn.bmd-btn-fab.btn-warning:active.focus, .btn.bmd-btn-fab.btn-warning:active:focus, .btn.bmd-btn-fab.btn-warning:active:hover, .btn.btn-raised.btn-warning.active.focus, .btn.btn-raised.btn-warning.active:focus, .btn.btn-raised.btn-warning.active:hover, .btn.btn-raised.btn-warning:active.focus, .btn.btn-raised.btn-warning:active:focus, .btn.btn-raised.btn-warning:active:hover, .open > .bmd-btn-fab.btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle:hover, .open > .btn-raised.btn-warning.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-warning.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle:hover, .open > .btn.btn-raised.btn-warning.dropdown-toggle.focus, .open > .btn.btn-raised.btn-warning.dropdown-toggle:focus, .open > .btn.btn-raised.btn-warning.dropdown-toggle:hover {
+ color: #fff;
+ background-color: #ff470e;
+ border-color: #a22700
+}
+
+.open > .bmd-btn-fab.btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-warning.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: #ff5722
+}
+
+.open > .bmd-btn-fab.btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-warning.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-warning.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-warning.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: #ff470e
+}
+
+.bmd-btn-fab.btn-warning.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-warning.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-warning.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-warning.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-warning.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-warning.disabled.focus.custom-file-control:before, .btn-group-raised .btn-warning.custom-file-control:disabled.focus:before, .btn-group-raised .btn-warning.custom-file-control:disabled:focus:before, .btn-group-raised .btn-warning.custom-file-control:disabled:hover:before, .btn-group-raised .btn-warning.disabled.custom-file-control:focus:before, .btn-group-raised .btn-warning.disabled.custom-file-control:hover:before, .btn-group-raised .btn-warning.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-warning.disabled.focus, .btn-group-raised .btn.btn-warning.disabled:focus, .btn-group-raised .btn.btn-warning.disabled:hover, .btn-group-raised .btn.btn-warning:disabled.focus, .btn-group-raised .btn.btn-warning:disabled:focus, .btn-group-raised .btn.btn-warning:disabled:hover, .btn-raised.btn-warning.custom-file-control:disabled.focus:before, .btn-raised.btn-warning.custom-file-control:disabled:focus:before, .btn-raised.btn-warning.custom-file-control:disabled:hover:before, .btn-raised.btn-warning.disabled.custom-file-control:focus:before, .btn-raised.btn-warning.disabled.custom-file-control:hover:before, .btn-raised.btn-warning.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-warning.disabled.focus, .btn.bmd-btn-fab.btn-warning.disabled:focus, .btn.bmd-btn-fab.btn-warning.disabled:hover, .btn.bmd-btn-fab.btn-warning:disabled.focus, .btn.bmd-btn-fab.btn-warning:disabled:focus, .btn.bmd-btn-fab.btn-warning:disabled:hover, .btn.btn-raised.btn-warning.disabled.focus, .btn.btn-raised.btn-warning.disabled:focus, .btn.btn-raised.btn-warning.disabled:hover, .btn.btn-raised.btn-warning:disabled.focus, .btn.btn-raised.btn-warning:disabled:focus, .btn.btn-raised.btn-warning:disabled:hover {
+ background-color: #ff5722;
+ border-color: #ff5722
+}
+
+.bmd-btn-fab.btn-danger.custom-file-control:before, .btn-group-raised .btn-danger.custom-file-control:before, .btn-group-raised .btn.btn-danger, .btn-raised.btn-danger.custom-file-control:before, .btn.bmd-btn-fab.btn-danger, .btn.btn-raised.btn-danger {
+ color: #fff;
+ background-color: #f44336;
+ border-color: #f44336
+}
+
+.bmd-btn-fab.btn-danger.active.custom-file-control:before, .bmd-btn-fab.btn-danger.custom-file-control:active:before, .bmd-btn-fab.btn-danger.custom-file-control:focus:before, .bmd-btn-fab.btn-danger.custom-file-control:hover:before, .bmd-btn-fab.btn-danger.focus.custom-file-control:before, .btn-group-raised .btn-danger.active.custom-file-control:before, .btn-group-raised .btn-danger.custom-file-control:active:before, .btn-group-raised .btn-danger.custom-file-control:focus:before, .btn-group-raised .btn-danger.custom-file-control:hover:before, .btn-group-raised .btn-danger.focus.custom-file-control:before, .btn-group-raised .btn.btn-danger.active, .btn-group-raised .btn.btn-danger.focus, .btn-group-raised .btn.btn-danger:active, .btn-group-raised .btn.btn-danger:focus, .btn-group-raised .btn.btn-danger:hover, .btn-raised.btn-danger.active.custom-file-control:before, .btn-raised.btn-danger.custom-file-control:active:before, .btn-raised.btn-danger.custom-file-control:focus:before, .btn-raised.btn-danger.custom-file-control:hover:before, .btn-raised.btn-danger.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-danger.active, .btn.bmd-btn-fab.btn-danger.focus, .btn.bmd-btn-fab.btn-danger:active, .btn.bmd-btn-fab.btn-danger:focus, .btn.bmd-btn-fab.btn-danger:hover, .btn.btn-raised.btn-danger.active, .btn.btn-raised.btn-danger.focus, .btn.btn-raised.btn-danger:active, .btn.btn-raised.btn-danger:focus, .btn.btn-raised.btn-danger:hover, .open > .bmd-btn-fab.btn-danger.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle, .open > .btn-raised.btn-danger.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle, .open > .btn.btn-raised.btn-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #f55549;
+ border-color: #e11b0c
+}
+
+.bmd-btn-fab.btn-danger.active.custom-file-control:focus:before, .bmd-btn-fab.btn-danger.active.custom-file-control:hover:before, .bmd-btn-fab.btn-danger.active.focus.custom-file-control:before, .bmd-btn-fab.btn-danger.custom-file-control:active.focus:before, .bmd-btn-fab.btn-danger.custom-file-control:active:focus:before, .bmd-btn-fab.btn-danger.custom-file-control:active:hover:before, .btn-group-raised .btn-danger.active.custom-file-control:focus:before, .btn-group-raised .btn-danger.active.custom-file-control:hover:before, .btn-group-raised .btn-danger.active.focus.custom-file-control:before, .btn-group-raised .btn-danger.custom-file-control:active.focus:before, .btn-group-raised .btn-danger.custom-file-control:active:focus:before, .btn-group-raised .btn-danger.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-danger.active.focus, .btn-group-raised .btn.btn-danger.active:focus, .btn-group-raised .btn.btn-danger.active:hover, .btn-group-raised .btn.btn-danger:active.focus, .btn-group-raised .btn.btn-danger:active:focus, .btn-group-raised .btn.btn-danger:active:hover, .btn-raised.btn-danger.active.custom-file-control:focus:before, .btn-raised.btn-danger.active.custom-file-control:hover:before, .btn-raised.btn-danger.active.focus.custom-file-control:before, .btn-raised.btn-danger.custom-file-control:active.focus:before, .btn-raised.btn-danger.custom-file-control:active:focus:before, .btn-raised.btn-danger.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-danger.active.focus, .btn.bmd-btn-fab.btn-danger.active:focus, .btn.bmd-btn-fab.btn-danger.active:hover, .btn.bmd-btn-fab.btn-danger:active.focus, .btn.bmd-btn-fab.btn-danger:active:focus, .btn.bmd-btn-fab.btn-danger:active:hover, .btn.btn-raised.btn-danger.active.focus, .btn.btn-raised.btn-danger.active:focus, .btn.btn-raised.btn-danger.active:hover, .btn.btn-raised.btn-danger:active.focus, .btn.btn-raised.btn-danger:active:focus, .btn.btn-raised.btn-danger:active:hover, .open > .bmd-btn-fab.btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle:hover, .open > .btn-raised.btn-danger.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-danger.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle:hover, .open > .btn.btn-raised.btn-danger.dropdown-toggle.focus, .open > .btn.btn-raised.btn-danger.dropdown-toggle:focus, .open > .btn.btn-raised.btn-danger.dropdown-toggle:hover {
+ color: #fff;
+ background-color: #f55549;
+ border-color: #a21309
+}
+
+.open > .bmd-btn-fab.btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-danger.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: #f44336
+}
+
+.open > .bmd-btn-fab.btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-danger.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-danger.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-danger.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: #f55549
+}
+
+.bmd-btn-fab.btn-danger.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-danger.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-danger.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-danger.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-danger.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-danger.disabled.focus.custom-file-control:before, .btn-group-raised .btn-danger.custom-file-control:disabled.focus:before, .btn-group-raised .btn-danger.custom-file-control:disabled:focus:before, .btn-group-raised .btn-danger.custom-file-control:disabled:hover:before, .btn-group-raised .btn-danger.disabled.custom-file-control:focus:before, .btn-group-raised .btn-danger.disabled.custom-file-control:hover:before, .btn-group-raised .btn-danger.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-danger.disabled.focus, .btn-group-raised .btn.btn-danger.disabled:focus, .btn-group-raised .btn.btn-danger.disabled:hover, .btn-group-raised .btn.btn-danger:disabled.focus, .btn-group-raised .btn.btn-danger:disabled:focus, .btn-group-raised .btn.btn-danger:disabled:hover, .btn-raised.btn-danger.custom-file-control:disabled.focus:before, .btn-raised.btn-danger.custom-file-control:disabled:focus:before, .btn-raised.btn-danger.custom-file-control:disabled:hover:before, .btn-raised.btn-danger.disabled.custom-file-control:focus:before, .btn-raised.btn-danger.disabled.custom-file-control:hover:before, .btn-raised.btn-danger.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-danger.disabled.focus, .btn.bmd-btn-fab.btn-danger.disabled:focus, .btn.bmd-btn-fab.btn-danger.disabled:hover, .btn.bmd-btn-fab.btn-danger:disabled.focus, .btn.bmd-btn-fab.btn-danger:disabled:focus, .btn.bmd-btn-fab.btn-danger:disabled:hover, .btn.btn-raised.btn-danger.disabled.focus, .btn.btn-raised.btn-danger.disabled:focus, .btn.btn-raised.btn-danger.disabled:hover, .btn.btn-raised.btn-danger:disabled.focus, .btn.btn-raised.btn-danger:disabled:focus, .btn.btn-raised.btn-danger:disabled:hover {
+ background-color: #f44336;
+ border-color: #f44336
+}
+
+.bmd-btn-fab.btn-light.custom-file-control:before, .btn-group-raised .btn-light.custom-file-control:before, .btn-group-raised .btn.btn-light, .btn-raised.btn-light.custom-file-control:before, .btn.bmd-btn-fab.btn-light, .btn.btn-raised.btn-light {
+ color: #fff;
+ background-color: #f5f5f5;
+ border-color: #f5f5f5
+}
+
+.bmd-btn-fab.btn-light.active.custom-file-control:before, .bmd-btn-fab.btn-light.custom-file-control:active:before, .bmd-btn-fab.btn-light.custom-file-control:focus:before, .bmd-btn-fab.btn-light.custom-file-control:hover:before, .bmd-btn-fab.btn-light.focus.custom-file-control:before, .btn-group-raised .btn-light.active.custom-file-control:before, .btn-group-raised .btn-light.custom-file-control:active:before, .btn-group-raised .btn-light.custom-file-control:focus:before, .btn-group-raised .btn-light.custom-file-control:hover:before, .btn-group-raised .btn-light.focus.custom-file-control:before, .btn-group-raised .btn.btn-light.active, .btn-group-raised .btn.btn-light.focus, .btn-group-raised .btn.btn-light:active, .btn-group-raised .btn.btn-light:focus, .btn-group-raised .btn.btn-light:hover, .btn-raised.btn-light.active.custom-file-control:before, .btn-raised.btn-light.custom-file-control:active:before, .btn-raised.btn-light.custom-file-control:focus:before, .btn-raised.btn-light.custom-file-control:hover:before, .btn-raised.btn-light.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-light.active, .btn.bmd-btn-fab.btn-light.focus, .btn.bmd-btn-fab.btn-light:active, .btn.bmd-btn-fab.btn-light:focus, .btn.bmd-btn-fab.btn-light:hover, .btn.btn-raised.btn-light.active, .btn.btn-raised.btn-light.focus, .btn.btn-raised.btn-light:active, .btn.btn-raised.btn-light:focus, .btn.btn-raised.btn-light:hover, .open > .bmd-btn-fab.btn-light.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-light.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-light.dropdown-toggle, .open > .btn-raised.btn-light.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle, .open > .btn.btn-raised.btn-light.dropdown-toggle {
+ color: #fff;
+ background-color: #ebebeb;
+ border-color: #d6d6d6
+}
+
+.bmd-btn-fab.btn-light.active.custom-file-control:focus:before, .bmd-btn-fab.btn-light.active.custom-file-control:hover:before, .bmd-btn-fab.btn-light.active.focus.custom-file-control:before, .bmd-btn-fab.btn-light.custom-file-control:active.focus:before, .bmd-btn-fab.btn-light.custom-file-control:active:focus:before, .bmd-btn-fab.btn-light.custom-file-control:active:hover:before, .btn-group-raised .btn-light.active.custom-file-control:focus:before, .btn-group-raised .btn-light.active.custom-file-control:hover:before, .btn-group-raised .btn-light.active.focus.custom-file-control:before, .btn-group-raised .btn-light.custom-file-control:active.focus:before, .btn-group-raised .btn-light.custom-file-control:active:focus:before, .btn-group-raised .btn-light.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-light.active.focus, .btn-group-raised .btn.btn-light.active:focus, .btn-group-raised .btn.btn-light.active:hover, .btn-group-raised .btn.btn-light:active.focus, .btn-group-raised .btn.btn-light:active:focus, .btn-group-raised .btn.btn-light:active:hover, .btn-raised.btn-light.active.custom-file-control:focus:before, .btn-raised.btn-light.active.custom-file-control:hover:before, .btn-raised.btn-light.active.focus.custom-file-control:before, .btn-raised.btn-light.custom-file-control:active.focus:before, .btn-raised.btn-light.custom-file-control:active:focus:before, .btn-raised.btn-light.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-light.active.focus, .btn.bmd-btn-fab.btn-light.active:focus, .btn.bmd-btn-fab.btn-light.active:hover, .btn.bmd-btn-fab.btn-light:active.focus, .btn.bmd-btn-fab.btn-light:active:focus, .btn.bmd-btn-fab.btn-light:active:hover, .btn.btn-raised.btn-light.active.focus, .btn.btn-raised.btn-light.active:focus, .btn.btn-raised.btn-light.active:hover, .btn.btn-raised.btn-light:active.focus, .btn.btn-raised.btn-light:active:focus, .btn.btn-raised.btn-light:active:hover, .open > .bmd-btn-fab.btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-light.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-light.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-light.dropdown-toggle:hover, .open > .btn-raised.btn-light.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-light.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle:hover, .open > .btn.btn-raised.btn-light.dropdown-toggle.focus, .open > .btn.btn-raised.btn-light.dropdown-toggle:focus, .open > .btn.btn-raised.btn-light.dropdown-toggle:hover {
+ color: #fff;
+ background-color: #ebebeb;
+ border-color: #b5b5b5
+}
+
+.open > .bmd-btn-fab.btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-light.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-light.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: #f5f5f5
+}
+
+.open > .bmd-btn-fab.btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-light.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-light.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-light.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: #ebebeb
+}
+
+.bmd-btn-fab.btn-light.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-light.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-light.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-light.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-light.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-light.disabled.focus.custom-file-control:before, .btn-group-raised .btn-light.custom-file-control:disabled.focus:before, .btn-group-raised .btn-light.custom-file-control:disabled:focus:before, .btn-group-raised .btn-light.custom-file-control:disabled:hover:before, .btn-group-raised .btn-light.disabled.custom-file-control:focus:before, .btn-group-raised .btn-light.disabled.custom-file-control:hover:before, .btn-group-raised .btn-light.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-light.disabled.focus, .btn-group-raised .btn.btn-light.disabled:focus, .btn-group-raised .btn.btn-light.disabled:hover, .btn-group-raised .btn.btn-light:disabled.focus, .btn-group-raised .btn.btn-light:disabled:focus, .btn-group-raised .btn.btn-light:disabled:hover, .btn-raised.btn-light.custom-file-control:disabled.focus:before, .btn-raised.btn-light.custom-file-control:disabled:focus:before, .btn-raised.btn-light.custom-file-control:disabled:hover:before, .btn-raised.btn-light.disabled.custom-file-control:focus:before, .btn-raised.btn-light.disabled.custom-file-control:hover:before, .btn-raised.btn-light.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-light.disabled.focus, .btn.bmd-btn-fab.btn-light.disabled:focus, .btn.bmd-btn-fab.btn-light.disabled:hover, .btn.bmd-btn-fab.btn-light:disabled.focus, .btn.bmd-btn-fab.btn-light:disabled:focus, .btn.bmd-btn-fab.btn-light:disabled:hover, .btn.btn-raised.btn-light.disabled.focus, .btn.btn-raised.btn-light.disabled:focus, .btn.btn-raised.btn-light.disabled:hover, .btn.btn-raised.btn-light:disabled.focus, .btn.btn-raised.btn-light:disabled:focus, .btn.btn-raised.btn-light:disabled:hover {
+ background-color: #f5f5f5;
+ border-color: #f5f5f5
+}
+
+.bmd-btn-fab.btn-dark.custom-file-control:before, .btn-group-raised .btn-dark.custom-file-control:before, .btn-group-raised .btn.btn-dark, .btn-raised.btn-dark.custom-file-control:before, .btn.bmd-btn-fab.btn-dark, .btn.btn-raised.btn-dark {
+ color: #fff;
+ background-color: #424242;
+ border-color: #424242
+}
+
+.bmd-btn-fab.btn-dark.active.custom-file-control:before, .bmd-btn-fab.btn-dark.custom-file-control:active:before, .bmd-btn-fab.btn-dark.custom-file-control:focus:before, .bmd-btn-fab.btn-dark.custom-file-control:hover:before, .bmd-btn-fab.btn-dark.focus.custom-file-control:before, .btn-group-raised .btn-dark.active.custom-file-control:before, .btn-group-raised .btn-dark.custom-file-control:active:before, .btn-group-raised .btn-dark.custom-file-control:focus:before, .btn-group-raised .btn-dark.custom-file-control:hover:before, .btn-group-raised .btn-dark.focus.custom-file-control:before, .btn-group-raised .btn.btn-dark.active, .btn-group-raised .btn.btn-dark.focus, .btn-group-raised .btn.btn-dark:active, .btn-group-raised .btn.btn-dark:focus, .btn-group-raised .btn.btn-dark:hover, .btn-raised.btn-dark.active.custom-file-control:before, .btn-raised.btn-dark.custom-file-control:active:before, .btn-raised.btn-dark.custom-file-control:focus:before, .btn-raised.btn-dark.custom-file-control:hover:before, .btn-raised.btn-dark.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-dark.active, .btn.bmd-btn-fab.btn-dark.focus, .btn.bmd-btn-fab.btn-dark:active, .btn.bmd-btn-fab.btn-dark:focus, .btn.bmd-btn-fab.btn-dark:hover, .btn.btn-raised.btn-dark.active, .btn.btn-raised.btn-dark.focus, .btn.btn-raised.btn-dark:active, .btn.btn-raised.btn-dark:focus, .btn.btn-raised.btn-dark:hover, .open > .bmd-btn-fab.btn-dark.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.custom-file-control:before, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle, .open > .btn-raised.btn-dark.dropdown-toggle.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle, .open > .btn.btn-raised.btn-dark.dropdown-toggle {
+ color: #fff;
+ background-color: #383838;
+ border-color: #232323
+}
+
+.bmd-btn-fab.btn-dark.active.custom-file-control:focus:before, .bmd-btn-fab.btn-dark.active.custom-file-control:hover:before, .bmd-btn-fab.btn-dark.active.focus.custom-file-control:before, .bmd-btn-fab.btn-dark.custom-file-control:active.focus:before, .bmd-btn-fab.btn-dark.custom-file-control:active:focus:before, .bmd-btn-fab.btn-dark.custom-file-control:active:hover:before, .btn-group-raised .btn-dark.active.custom-file-control:focus:before, .btn-group-raised .btn-dark.active.custom-file-control:hover:before, .btn-group-raised .btn-dark.active.focus.custom-file-control:before, .btn-group-raised .btn-dark.custom-file-control:active.focus:before, .btn-group-raised .btn-dark.custom-file-control:active:focus:before, .btn-group-raised .btn-dark.custom-file-control:active:hover:before, .btn-group-raised .btn.btn-dark.active.focus, .btn-group-raised .btn.btn-dark.active:focus, .btn-group-raised .btn.btn-dark.active:hover, .btn-group-raised .btn.btn-dark:active.focus, .btn-group-raised .btn.btn-dark:active:focus, .btn-group-raised .btn.btn-dark:active:hover, .btn-raised.btn-dark.active.custom-file-control:focus:before, .btn-raised.btn-dark.active.custom-file-control:hover:before, .btn-raised.btn-dark.active.focus.custom-file-control:before, .btn-raised.btn-dark.custom-file-control:active.focus:before, .btn-raised.btn-dark.custom-file-control:active:focus:before, .btn-raised.btn-dark.custom-file-control:active:hover:before, .btn.bmd-btn-fab.btn-dark.active.focus, .btn.bmd-btn-fab.btn-dark.active:focus, .btn.bmd-btn-fab.btn-dark.active:hover, .btn.bmd-btn-fab.btn-dark:active.focus, .btn.bmd-btn-fab.btn-dark:active:focus, .btn.bmd-btn-fab.btn-dark:active:hover, .btn.btn-raised.btn-dark.active.focus, .btn.btn-raised.btn-dark.active:focus, .btn.btn-raised.btn-dark.active:hover, .btn.btn-raised.btn-dark:active.focus, .btn.btn-raised.btn-dark:active:focus, .btn.btn-raised.btn-dark:active:hover, .open > .bmd-btn-fab.btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .bmd-btn-fab.btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .bmd-btn-fab.btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle.focus, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle:focus, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle:hover, .open > .btn-raised.btn-dark.dropdown-toggle.custom-file-control:focus:before, .open > .btn-raised.btn-dark.dropdown-toggle.custom-file-control:hover:before, .open > .btn-raised.btn-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle.focus, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle:focus, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle:hover, .open > .btn.btn-raised.btn-dark.dropdown-toggle.focus, .open > .btn.btn-raised.btn-dark.dropdown-toggle:focus, .open > .btn.btn-raised.btn-dark.dropdown-toggle:hover {
+ color: #fff;
+ background-color: #383838;
+ border-color: #020202
+}
+
+.open > .bmd-btn-fab.btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle.bmd-btn-icon, .open > .btn-raised.btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle.bmd-btn-icon, .open > .btn.btn-raised.btn-dark.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: #424242
+}
+
+.open > .bmd-btn-fab.btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn-group-raised .btn.btn-dark.dropdown-toggle.bmd-btn-icon:hover, .open > .btn-raised.btn-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.bmd-btn-fab.btn-dark.dropdown-toggle.bmd-btn-icon:hover, .open > .btn.btn-raised.btn-dark.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: #383838
+}
+
+.bmd-btn-fab.btn-dark.custom-file-control:disabled.focus:before, .bmd-btn-fab.btn-dark.custom-file-control:disabled:focus:before, .bmd-btn-fab.btn-dark.custom-file-control:disabled:hover:before, .bmd-btn-fab.btn-dark.disabled.custom-file-control:focus:before, .bmd-btn-fab.btn-dark.disabled.custom-file-control:hover:before, .bmd-btn-fab.btn-dark.disabled.focus.custom-file-control:before, .btn-group-raised .btn-dark.custom-file-control:disabled.focus:before, .btn-group-raised .btn-dark.custom-file-control:disabled:focus:before, .btn-group-raised .btn-dark.custom-file-control:disabled:hover:before, .btn-group-raised .btn-dark.disabled.custom-file-control:focus:before, .btn-group-raised .btn-dark.disabled.custom-file-control:hover:before, .btn-group-raised .btn-dark.disabled.focus.custom-file-control:before, .btn-group-raised .btn.btn-dark.disabled.focus, .btn-group-raised .btn.btn-dark.disabled:focus, .btn-group-raised .btn.btn-dark.disabled:hover, .btn-group-raised .btn.btn-dark:disabled.focus, .btn-group-raised .btn.btn-dark:disabled:focus, .btn-group-raised .btn.btn-dark:disabled:hover, .btn-raised.btn-dark.custom-file-control:disabled.focus:before, .btn-raised.btn-dark.custom-file-control:disabled:focus:before, .btn-raised.btn-dark.custom-file-control:disabled:hover:before, .btn-raised.btn-dark.disabled.custom-file-control:focus:before, .btn-raised.btn-dark.disabled.custom-file-control:hover:before, .btn-raised.btn-dark.disabled.focus.custom-file-control:before, .btn.bmd-btn-fab.btn-dark.disabled.focus, .btn.bmd-btn-fab.btn-dark.disabled:focus, .btn.bmd-btn-fab.btn-dark.disabled:hover, .btn.bmd-btn-fab.btn-dark:disabled.focus, .btn.bmd-btn-fab.btn-dark:disabled:focus, .btn.bmd-btn-fab.btn-dark:disabled:hover, .btn.btn-raised.btn-dark.disabled.focus, .btn.btn-raised.btn-dark.disabled:focus, .btn.btn-raised.btn-dark.disabled:hover, .btn.btn-raised.btn-dark:disabled.focus, .btn.btn-raised.btn-dark:disabled:focus, .btn.btn-raised.btn-dark:disabled:hover {
+ background-color: #424242;
+ border-color: #424242
+}
+
+.bmd-btn-fab.custom-file-control:focus:before, .bmd-btn-fab.custom-file-control:hover:before, .btn-group-raised .btn:focus, .btn-group-raised .btn:hover, .btn-group-raised .custom-file-control:focus:before, .btn-group-raised .custom-file-control:hover:before, .btn-raised.custom-file-control:focus:before, .btn-raised.custom-file-control:hover:before, .btn.bmd-btn-fab:focus, .btn.bmd-btn-fab:hover, .btn.btn-raised:focus, .btn.btn-raised:hover {
+ z-index: 1;
+ box-shadow: 0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2)
+}
+
+.bmd-btn-fab.active.custom-file-control:before, .bmd-btn-fab.custom-file-control:active:before, .btn-group-raised .active.custom-file-control:before, .btn-group-raised .btn.active, .btn-group-raised .btn:active, .btn-group-raised .custom-file-control:active:before, .btn-raised.active.custom-file-control:before, .btn-raised.custom-file-control:active:before, .btn.bmd-btn-fab.active, .btn.bmd-btn-fab:active, .btn.btn-raised.active, .btn.btn-raised:active {
+ z-index: 1;
+ box-shadow: 0 0 8px rgba(0, 0, 0, .18), 0 8px 16px rgba(0, 0, 0, .36)
+}
+
+.bmd-btn-fab.custom-file-control:focus:before, .bmd-btn-fab.focus.custom-file-control:before, .btn-group-raised .btn.focus, .btn-group-raised .btn:focus, .btn-group-raised .custom-file-control:focus:before, .btn-group-raised .focus.custom-file-control:before, .btn-raised.custom-file-control:focus:before, .btn-raised.focus.custom-file-control:before, .btn.bmd-btn-fab.focus, .btn.bmd-btn-fab:focus, .btn.btn-raised.focus, .btn.btn-raised:focus {
+ outline: 0
+}
+
+.btn-group-raised .btn, .btn-group-raised .custom-file-control:before, .btn-raised.custom-file-control:before, .btn.btn-raised {
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12)
+}
+
+.btn-group-raised .btn-link.active.custom-file-control:before, .btn-group-raised .btn-link.custom-file-control:active:before, .btn-group-raised .btn-link.custom-file-control:before, .btn-group-raised .btn-link.custom-file-control:focus:before, .btn-group-raised .btn-link.custom-file-control:hover:before, .btn-group-raised .btn.btn-link, .btn-group-raised .btn.btn-link.active, .btn-group-raised .btn.btn-link:active, .btn-group-raised .btn.btn-link:focus, .btn-group-raised .btn.btn-link:hover, .btn-group-raised .btn.disabled, .btn-group-raised .btn:disabled, .btn-group-raised .btn[disabled], .btn-group-raised .custom-file-control:disabled:before, .btn-group-raised .disabled.custom-file-control:before, .btn-group-raised [disabled].custom-file-control:before, .btn-raised.btn-link.active.custom-file-control:before, .btn-raised.btn-link.custom-file-control:active:before, .btn-raised.btn-link.custom-file-control:before, .btn-raised.btn-link.custom-file-control:focus:before, .btn-raised.btn-link.custom-file-control:hover:before, .btn-raised.custom-file-control:disabled:before, .btn-raised.disabled.custom-file-control:before, .btn-raised[disabled].custom-file-control:before, .btn.btn-raised.btn-link, .btn.btn-raised.btn-link.active, .btn.btn-raised.btn-link:active, .btn.btn-raised.btn-link:focus, .btn.btn-raised.btn-link:hover, .btn.btn-raised.disabled, .btn.btn-raised:disabled, .btn.btn-raised[disabled], fieldset[disabled][disabled] .btn-group-raised .btn, fieldset[disabled][disabled] .btn-group-raised .custom-file-control:before, fieldset[disabled][disabled] .btn-raised.custom-file-control:before, fieldset[disabled][disabled] .btn.btn-raised {
+ box-shadow: none
+}
+
+.btn-outline.custom-file-control:before, .btn.btn-outline {
+ border: 1px solid currentColor
+}
+
+.btn-outline-primary.custom-file-control:before, .btn.btn-outline-primary {
+ border-color: currentColor;
+ color: #009688;
+ background-color: transparent;
+ border: 1px solid #009688
+}
+
+.btn-outline-primary.active.custom-file-control:before, .btn-outline-primary.custom-file-control:active:before, .btn-outline-primary.custom-file-control:focus:before, .btn-outline-primary.custom-file-control:hover:before, .btn-outline-primary.focus.custom-file-control:before, .btn.btn-outline-primary.active, .btn.btn-outline-primary.focus, .btn.btn-outline-primary:active, .btn.btn-outline-primary:focus, .btn.btn-outline-primary:hover, .open > .btn-outline-primary.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-primary.dropdown-toggle {
+ color: #009688;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: #009688
+}
+
+.btn-outline-primary.active.custom-file-control:focus:before, .btn-outline-primary.active.custom-file-control:hover:before, .btn-outline-primary.active.focus.custom-file-control:before, .btn-outline-primary.custom-file-control:active.focus:before, .btn-outline-primary.custom-file-control:active:focus:before, .btn-outline-primary.custom-file-control:active:hover:before, .btn.btn-outline-primary.active.focus, .btn.btn-outline-primary.active:focus, .btn.btn-outline-primary.active:hover, .btn.btn-outline-primary:active.focus, .btn.btn-outline-primary:active:focus, .btn.btn-outline-primary:active:hover, .open > .btn-outline-primary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-primary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-primary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-primary.dropdown-toggle.focus, .open > .btn.btn-outline-primary.dropdown-toggle:focus, .open > .btn.btn-outline-primary.dropdown-toggle:hover {
+ color: #009688;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: #009688
+}
+
+.open > .btn-outline-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-outline-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-outline-primary.custom-file-control:disabled.focus:before, .btn-outline-primary.custom-file-control:disabled:focus:before, .btn-outline-primary.custom-file-control:disabled:hover:before, .btn-outline-primary.disabled.custom-file-control:focus:before, .btn-outline-primary.disabled.custom-file-control:hover:before, .btn-outline-primary.disabled.focus.custom-file-control:before, .btn.btn-outline-primary.disabled.focus, .btn.btn-outline-primary.disabled:focus, .btn.btn-outline-primary.disabled:hover, .btn.btn-outline-primary:disabled.focus, .btn.btn-outline-primary:disabled:focus, .btn.btn-outline-primary:disabled:hover {
+ background-color: transparent;
+ border-color: #009688
+}
+
+.bg-inverse .btn-outline-primary.custom-file-control:before, .bg-inverse .btn.btn-outline-primary {
+ color: #009688;
+ background-color: transparent;
+ border-color: #009688
+}
+
+.bg-inverse .btn-outline-primary.active.custom-file-control:before, .bg-inverse .btn-outline-primary.custom-file-control:active:before, .bg-inverse .btn-outline-primary.custom-file-control:focus:before, .bg-inverse .btn-outline-primary.custom-file-control:hover:before, .bg-inverse .btn-outline-primary.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-primary.active, .bg-inverse .btn.btn-outline-primary.focus, .bg-inverse .btn.btn-outline-primary:active, .bg-inverse .btn.btn-outline-primary:focus, .bg-inverse .btn.btn-outline-primary:hover, .open > .bg-inverse .btn-outline-primary.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle {
+ color: #009688;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-primary.active.custom-file-control:focus:before, .bg-inverse .btn-outline-primary.active.custom-file-control:hover:before, .bg-inverse .btn-outline-primary.active.focus.custom-file-control:before, .bg-inverse .btn-outline-primary.custom-file-control:active.focus:before, .bg-inverse .btn-outline-primary.custom-file-control:active:focus:before, .bg-inverse .btn-outline-primary.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-primary.active.focus, .bg-inverse .btn.btn-outline-primary.active:focus, .bg-inverse .btn.btn-outline-primary.active:hover, .bg-inverse .btn.btn-outline-primary:active.focus, .bg-inverse .btn.btn-outline-primary:active:focus, .bg-inverse .btn.btn-outline-primary:active:hover, .open > .bg-inverse .btn-outline-primary.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-primary.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-primary.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle:hover {
+ color: #009688;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-outline-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-outline-primary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-primary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-primary.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-primary.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-primary.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-primary.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-primary.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-primary.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-primary.disabled.focus, .bg-inverse .btn.btn-outline-primary.disabled:focus, .bg-inverse .btn.btn-outline-primary.disabled:hover, .bg-inverse .btn.btn-outline-primary:disabled.focus, .bg-inverse .btn.btn-outline-primary:disabled:focus, .bg-inverse .btn.btn-outline-primary:disabled:hover {
+ background-color: transparent;
+ border-color: #009688
+}
+
+.btn-outline-primary.btn-link.custom-file-control:before, .btn.btn-outline-primary.btn-link {
+ background-color: transparent
+}
+
+.btn-outline-secondary.custom-file-control:before, .btn.btn-outline-secondary {
+ border-color: currentColor;
+ color: #6c757d;
+ background-color: transparent;
+ border: 1px solid #6c757d
+}
+
+.btn-outline-secondary.active.custom-file-control:before, .btn-outline-secondary.custom-file-control:active:before, .btn-outline-secondary.custom-file-control:focus:before, .btn-outline-secondary.custom-file-control:hover:before, .btn-outline-secondary.focus.custom-file-control:before, .btn.btn-outline-secondary.active, .btn.btn-outline-secondary.focus, .btn.btn-outline-secondary:active, .btn.btn-outline-secondary:focus, .btn.btn-outline-secondary:hover, .open > .btn-outline-secondary.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-secondary.dropdown-toggle {
+ color: #6c757d;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: #6c757d
+}
+
+.btn-outline-secondary.active.custom-file-control:focus:before, .btn-outline-secondary.active.custom-file-control:hover:before, .btn-outline-secondary.active.focus.custom-file-control:before, .btn-outline-secondary.custom-file-control:active.focus:before, .btn-outline-secondary.custom-file-control:active:focus:before, .btn-outline-secondary.custom-file-control:active:hover:before, .btn.btn-outline-secondary.active.focus, .btn.btn-outline-secondary.active:focus, .btn.btn-outline-secondary.active:hover, .btn.btn-outline-secondary:active.focus, .btn.btn-outline-secondary:active:focus, .btn.btn-outline-secondary:active:hover, .open > .btn-outline-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-secondary.dropdown-toggle.focus, .open > .btn.btn-outline-secondary.dropdown-toggle:focus, .open > .btn.btn-outline-secondary.dropdown-toggle:hover {
+ color: #6c757d;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: #6c757d
+}
+
+.open > .btn-outline-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-outline-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-outline-secondary.custom-file-control:disabled.focus:before, .btn-outline-secondary.custom-file-control:disabled:focus:before, .btn-outline-secondary.custom-file-control:disabled:hover:before, .btn-outline-secondary.disabled.custom-file-control:focus:before, .btn-outline-secondary.disabled.custom-file-control:hover:before, .btn-outline-secondary.disabled.focus.custom-file-control:before, .btn.btn-outline-secondary.disabled.focus, .btn.btn-outline-secondary.disabled:focus, .btn.btn-outline-secondary.disabled:hover, .btn.btn-outline-secondary:disabled.focus, .btn.btn-outline-secondary:disabled:focus, .btn.btn-outline-secondary:disabled:hover {
+ background-color: transparent;
+ border-color: #6c757d
+}
+
+.bg-inverse .btn-outline-secondary.custom-file-control:before, .bg-inverse .btn.btn-outline-secondary {
+ color: #6c757d;
+ background-color: transparent;
+ border-color: #6c757d
+}
+
+.bg-inverse .btn-outline-secondary.active.custom-file-control:before, .bg-inverse .btn-outline-secondary.custom-file-control:active:before, .bg-inverse .btn-outline-secondary.custom-file-control:focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:hover:before, .bg-inverse .btn-outline-secondary.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-secondary.active, .bg-inverse .btn.btn-outline-secondary.focus, .bg-inverse .btn.btn-outline-secondary:active, .bg-inverse .btn.btn-outline-secondary:focus, .bg-inverse .btn.btn-outline-secondary:hover, .open > .bg-inverse .btn-outline-secondary.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle {
+ color: #6c757d;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-secondary.active.custom-file-control:focus:before, .bg-inverse .btn-outline-secondary.active.custom-file-control:hover:before, .bg-inverse .btn-outline-secondary.active.focus.custom-file-control:before, .bg-inverse .btn-outline-secondary.custom-file-control:active.focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:active:focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-secondary.active.focus, .bg-inverse .btn.btn-outline-secondary.active:focus, .bg-inverse .btn.btn-outline-secondary.active:hover, .bg-inverse .btn.btn-outline-secondary:active.focus, .bg-inverse .btn.btn-outline-secondary:active:focus, .bg-inverse .btn.btn-outline-secondary:active:hover, .open > .bg-inverse .btn-outline-secondary.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-secondary.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-secondary.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle:hover {
+ color: #6c757d;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-outline-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-outline-secondary.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-secondary.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-secondary.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-secondary.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-secondary.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-secondary.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-secondary.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-secondary.disabled.focus, .bg-inverse .btn.btn-outline-secondary.disabled:focus, .bg-inverse .btn.btn-outline-secondary.disabled:hover, .bg-inverse .btn.btn-outline-secondary:disabled.focus, .bg-inverse .btn.btn-outline-secondary:disabled:focus, .bg-inverse .btn.btn-outline-secondary:disabled:hover {
+ background-color: transparent;
+ border-color: #6c757d
+}
+
+.btn-outline-secondary.btn-link.custom-file-control:before, .btn.btn-outline-secondary.btn-link {
+ background-color: transparent
+}
+
+.btn-outline-success.custom-file-control:before, .btn.btn-outline-success {
+ border-color: currentColor;
+ color: #4caf50;
+ background-color: transparent;
+ border: 1px solid #4caf50
+}
+
+.btn-outline-success.active.custom-file-control:before, .btn-outline-success.custom-file-control:active:before, .btn-outline-success.custom-file-control:focus:before, .btn-outline-success.custom-file-control:hover:before, .btn-outline-success.focus.custom-file-control:before, .btn.btn-outline-success.active, .btn.btn-outline-success.focus, .btn.btn-outline-success:active, .btn.btn-outline-success:focus, .btn.btn-outline-success:hover, .open > .btn-outline-success.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-success.dropdown-toggle {
+ color: #4caf50;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: #4caf50
+}
+
+.btn-outline-success.active.custom-file-control:focus:before, .btn-outline-success.active.custom-file-control:hover:before, .btn-outline-success.active.focus.custom-file-control:before, .btn-outline-success.custom-file-control:active.focus:before, .btn-outline-success.custom-file-control:active:focus:before, .btn-outline-success.custom-file-control:active:hover:before, .btn.btn-outline-success.active.focus, .btn.btn-outline-success.active:focus, .btn.btn-outline-success.active:hover, .btn.btn-outline-success:active.focus, .btn.btn-outline-success:active:focus, .btn.btn-outline-success:active:hover, .open > .btn-outline-success.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-success.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-success.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-success.dropdown-toggle.focus, .open > .btn.btn-outline-success.dropdown-toggle:focus, .open > .btn.btn-outline-success.dropdown-toggle:hover {
+ color: #4caf50;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: #4caf50
+}
+
+.open > .btn-outline-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-outline-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-outline-success.custom-file-control:disabled.focus:before, .btn-outline-success.custom-file-control:disabled:focus:before, .btn-outline-success.custom-file-control:disabled:hover:before, .btn-outline-success.disabled.custom-file-control:focus:before, .btn-outline-success.disabled.custom-file-control:hover:before, .btn-outline-success.disabled.focus.custom-file-control:before, .btn.btn-outline-success.disabled.focus, .btn.btn-outline-success.disabled:focus, .btn.btn-outline-success.disabled:hover, .btn.btn-outline-success:disabled.focus, .btn.btn-outline-success:disabled:focus, .btn.btn-outline-success:disabled:hover {
+ background-color: transparent;
+ border-color: #4caf50
+}
+
+.bg-inverse .btn-outline-success.custom-file-control:before, .bg-inverse .btn.btn-outline-success {
+ color: #4caf50;
+ background-color: transparent;
+ border-color: #4caf50
+}
+
+.bg-inverse .btn-outline-success.active.custom-file-control:before, .bg-inverse .btn-outline-success.custom-file-control:active:before, .bg-inverse .btn-outline-success.custom-file-control:focus:before, .bg-inverse .btn-outline-success.custom-file-control:hover:before, .bg-inverse .btn-outline-success.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-success.active, .bg-inverse .btn.btn-outline-success.focus, .bg-inverse .btn.btn-outline-success:active, .bg-inverse .btn.btn-outline-success:focus, .bg-inverse .btn.btn-outline-success:hover, .open > .bg-inverse .btn-outline-success.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle {
+ color: #4caf50;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-success.active.custom-file-control:focus:before, .bg-inverse .btn-outline-success.active.custom-file-control:hover:before, .bg-inverse .btn-outline-success.active.focus.custom-file-control:before, .bg-inverse .btn-outline-success.custom-file-control:active.focus:before, .bg-inverse .btn-outline-success.custom-file-control:active:focus:before, .bg-inverse .btn-outline-success.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-success.active.focus, .bg-inverse .btn.btn-outline-success.active:focus, .bg-inverse .btn.btn-outline-success.active:hover, .bg-inverse .btn.btn-outline-success:active.focus, .bg-inverse .btn.btn-outline-success:active:focus, .bg-inverse .btn.btn-outline-success:active:hover, .open > .bg-inverse .btn-outline-success.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-success.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-success.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle:hover {
+ color: #4caf50;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-outline-success.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-outline-success.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-success.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-success.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-success.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-success.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-success.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-success.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-success.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-success.disabled.focus, .bg-inverse .btn.btn-outline-success.disabled:focus, .bg-inverse .btn.btn-outline-success.disabled:hover, .bg-inverse .btn.btn-outline-success:disabled.focus, .bg-inverse .btn.btn-outline-success:disabled:focus, .bg-inverse .btn.btn-outline-success:disabled:hover {
+ background-color: transparent;
+ border-color: #4caf50
+}
+
+.btn-outline-success.btn-link.custom-file-control:before, .btn.btn-outline-success.btn-link {
+ background-color: transparent
+}
+
+.btn-outline-info.custom-file-control:before, .btn.btn-outline-info {
+ border-color: currentColor;
+ color: #03a9f4;
+ background-color: transparent;
+ border: 1px solid #03a9f4
+}
+
+.btn-outline-info.active.custom-file-control:before, .btn-outline-info.custom-file-control:active:before, .btn-outline-info.custom-file-control:focus:before, .btn-outline-info.custom-file-control:hover:before, .btn-outline-info.focus.custom-file-control:before, .btn.btn-outline-info.active, .btn.btn-outline-info.focus, .btn.btn-outline-info:active, .btn.btn-outline-info:focus, .btn.btn-outline-info:hover, .open > .btn-outline-info.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-info.dropdown-toggle {
+ color: #03a9f4;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: #03a9f4
+}
+
+.btn-outline-info.active.custom-file-control:focus:before, .btn-outline-info.active.custom-file-control:hover:before, .btn-outline-info.active.focus.custom-file-control:before, .btn-outline-info.custom-file-control:active.focus:before, .btn-outline-info.custom-file-control:active:focus:before, .btn-outline-info.custom-file-control:active:hover:before, .btn.btn-outline-info.active.focus, .btn.btn-outline-info.active:focus, .btn.btn-outline-info.active:hover, .btn.btn-outline-info:active.focus, .btn.btn-outline-info:active:focus, .btn.btn-outline-info:active:hover, .open > .btn-outline-info.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-info.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-info.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-info.dropdown-toggle.focus, .open > .btn.btn-outline-info.dropdown-toggle:focus, .open > .btn.btn-outline-info.dropdown-toggle:hover {
+ color: #03a9f4;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: #03a9f4
+}
+
+.open > .btn-outline-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-outline-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-outline-info.custom-file-control:disabled.focus:before, .btn-outline-info.custom-file-control:disabled:focus:before, .btn-outline-info.custom-file-control:disabled:hover:before, .btn-outline-info.disabled.custom-file-control:focus:before, .btn-outline-info.disabled.custom-file-control:hover:before, .btn-outline-info.disabled.focus.custom-file-control:before, .btn.btn-outline-info.disabled.focus, .btn.btn-outline-info.disabled:focus, .btn.btn-outline-info.disabled:hover, .btn.btn-outline-info:disabled.focus, .btn.btn-outline-info:disabled:focus, .btn.btn-outline-info:disabled:hover {
+ background-color: transparent;
+ border-color: #03a9f4
+}
+
+.bg-inverse .btn-outline-info.custom-file-control:before, .bg-inverse .btn.btn-outline-info {
+ color: #03a9f4;
+ background-color: transparent;
+ border-color: #03a9f4
+}
+
+.bg-inverse .btn-outline-info.active.custom-file-control:before, .bg-inverse .btn-outline-info.custom-file-control:active:before, .bg-inverse .btn-outline-info.custom-file-control:focus:before, .bg-inverse .btn-outline-info.custom-file-control:hover:before, .bg-inverse .btn-outline-info.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-info.active, .bg-inverse .btn.btn-outline-info.focus, .bg-inverse .btn.btn-outline-info:active, .bg-inverse .btn.btn-outline-info:focus, .bg-inverse .btn.btn-outline-info:hover, .open > .bg-inverse .btn-outline-info.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle {
+ color: #03a9f4;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-info.active.custom-file-control:focus:before, .bg-inverse .btn-outline-info.active.custom-file-control:hover:before, .bg-inverse .btn-outline-info.active.focus.custom-file-control:before, .bg-inverse .btn-outline-info.custom-file-control:active.focus:before, .bg-inverse .btn-outline-info.custom-file-control:active:focus:before, .bg-inverse .btn-outline-info.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-info.active.focus, .bg-inverse .btn.btn-outline-info.active:focus, .bg-inverse .btn.btn-outline-info.active:hover, .bg-inverse .btn.btn-outline-info:active.focus, .bg-inverse .btn.btn-outline-info:active:focus, .bg-inverse .btn.btn-outline-info:active:hover, .open > .bg-inverse .btn-outline-info.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-info.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-info.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle:hover {
+ color: #03a9f4;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-outline-info.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-outline-info.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-info.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-info.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-info.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-info.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-info.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-info.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-info.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-info.disabled.focus, .bg-inverse .btn.btn-outline-info.disabled:focus, .bg-inverse .btn.btn-outline-info.disabled:hover, .bg-inverse .btn.btn-outline-info:disabled.focus, .bg-inverse .btn.btn-outline-info:disabled:focus, .bg-inverse .btn.btn-outline-info:disabled:hover {
+ background-color: transparent;
+ border-color: #03a9f4
+}
+
+.btn-outline-info.btn-link.custom-file-control:before, .btn.btn-outline-info.btn-link {
+ background-color: transparent
+}
+
+.btn-outline-warning.custom-file-control:before, .btn.btn-outline-warning {
+ border-color: currentColor;
+ color: #ff5722;
+ background-color: transparent;
+ border: 1px solid #ff5722
+}
+
+.btn-outline-warning.active.custom-file-control:before, .btn-outline-warning.custom-file-control:active:before, .btn-outline-warning.custom-file-control:focus:before, .btn-outline-warning.custom-file-control:hover:before, .btn-outline-warning.focus.custom-file-control:before, .btn.btn-outline-warning.active, .btn.btn-outline-warning.focus, .btn.btn-outline-warning:active, .btn.btn-outline-warning:focus, .btn.btn-outline-warning:hover, .open > .btn-outline-warning.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-warning.dropdown-toggle {
+ color: #ff5722;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: #ff5722
+}
+
+.btn-outline-warning.active.custom-file-control:focus:before, .btn-outline-warning.active.custom-file-control:hover:before, .btn-outline-warning.active.focus.custom-file-control:before, .btn-outline-warning.custom-file-control:active.focus:before, .btn-outline-warning.custom-file-control:active:focus:before, .btn-outline-warning.custom-file-control:active:hover:before, .btn.btn-outline-warning.active.focus, .btn.btn-outline-warning.active:focus, .btn.btn-outline-warning.active:hover, .btn.btn-outline-warning:active.focus, .btn.btn-outline-warning:active:focus, .btn.btn-outline-warning:active:hover, .open > .btn-outline-warning.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-warning.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-warning.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-warning.dropdown-toggle.focus, .open > .btn.btn-outline-warning.dropdown-toggle:focus, .open > .btn.btn-outline-warning.dropdown-toggle:hover {
+ color: #ff5722;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: #ff5722
+}
+
+.open > .btn-outline-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-outline-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-outline-warning.custom-file-control:disabled.focus:before, .btn-outline-warning.custom-file-control:disabled:focus:before, .btn-outline-warning.custom-file-control:disabled:hover:before, .btn-outline-warning.disabled.custom-file-control:focus:before, .btn-outline-warning.disabled.custom-file-control:hover:before, .btn-outline-warning.disabled.focus.custom-file-control:before, .btn.btn-outline-warning.disabled.focus, .btn.btn-outline-warning.disabled:focus, .btn.btn-outline-warning.disabled:hover, .btn.btn-outline-warning:disabled.focus, .btn.btn-outline-warning:disabled:focus, .btn.btn-outline-warning:disabled:hover {
+ background-color: transparent;
+ border-color: #ff5722
+}
+
+.bg-inverse .btn-outline-warning.custom-file-control:before, .bg-inverse .btn.btn-outline-warning {
+ color: #ff5722;
+ background-color: transparent;
+ border-color: #ff5722
+}
+
+.bg-inverse .btn-outline-warning.active.custom-file-control:before, .bg-inverse .btn-outline-warning.custom-file-control:active:before, .bg-inverse .btn-outline-warning.custom-file-control:focus:before, .bg-inverse .btn-outline-warning.custom-file-control:hover:before, .bg-inverse .btn-outline-warning.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-warning.active, .bg-inverse .btn.btn-outline-warning.focus, .bg-inverse .btn.btn-outline-warning:active, .bg-inverse .btn.btn-outline-warning:focus, .bg-inverse .btn.btn-outline-warning:hover, .open > .bg-inverse .btn-outline-warning.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle {
+ color: #ff5722;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-warning.active.custom-file-control:focus:before, .bg-inverse .btn-outline-warning.active.custom-file-control:hover:before, .bg-inverse .btn-outline-warning.active.focus.custom-file-control:before, .bg-inverse .btn-outline-warning.custom-file-control:active.focus:before, .bg-inverse .btn-outline-warning.custom-file-control:active:focus:before, .bg-inverse .btn-outline-warning.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-warning.active.focus, .bg-inverse .btn.btn-outline-warning.active:focus, .bg-inverse .btn.btn-outline-warning.active:hover, .bg-inverse .btn.btn-outline-warning:active.focus, .bg-inverse .btn.btn-outline-warning:active:focus, .bg-inverse .btn.btn-outline-warning:active:hover, .open > .bg-inverse .btn-outline-warning.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-warning.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-warning.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle:hover {
+ color: #ff5722;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-outline-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-outline-warning.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-warning.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-warning.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-warning.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-warning.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-warning.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-warning.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-warning.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-warning.disabled.focus, .bg-inverse .btn.btn-outline-warning.disabled:focus, .bg-inverse .btn.btn-outline-warning.disabled:hover, .bg-inverse .btn.btn-outline-warning:disabled.focus, .bg-inverse .btn.btn-outline-warning:disabled:focus, .bg-inverse .btn.btn-outline-warning:disabled:hover {
+ background-color: transparent;
+ border-color: #ff5722
+}
+
+.btn-outline-warning.btn-link.custom-file-control:before, .btn.btn-outline-warning.btn-link {
+ background-color: transparent
+}
+
+.btn-outline-danger.custom-file-control:before, .btn.btn-outline-danger {
+ border-color: currentColor;
+ color: #f44336;
+ background-color: transparent;
+ border: 1px solid #f44336
+}
+
+.btn-outline-danger.active.custom-file-control:before, .btn-outline-danger.custom-file-control:active:before, .btn-outline-danger.custom-file-control:focus:before, .btn-outline-danger.custom-file-control:hover:before, .btn-outline-danger.focus.custom-file-control:before, .btn.btn-outline-danger.active, .btn.btn-outline-danger.focus, .btn.btn-outline-danger:active, .btn.btn-outline-danger:focus, .btn.btn-outline-danger:hover, .open > .btn-outline-danger.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-danger.dropdown-toggle {
+ color: #f44336;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: #f44336
+}
+
+.btn-outline-danger.active.custom-file-control:focus:before, .btn-outline-danger.active.custom-file-control:hover:before, .btn-outline-danger.active.focus.custom-file-control:before, .btn-outline-danger.custom-file-control:active.focus:before, .btn-outline-danger.custom-file-control:active:focus:before, .btn-outline-danger.custom-file-control:active:hover:before, .btn.btn-outline-danger.active.focus, .btn.btn-outline-danger.active:focus, .btn.btn-outline-danger.active:hover, .btn.btn-outline-danger:active.focus, .btn.btn-outline-danger:active:focus, .btn.btn-outline-danger:active:hover, .open > .btn-outline-danger.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-danger.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-danger.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-danger.dropdown-toggle.focus, .open > .btn.btn-outline-danger.dropdown-toggle:focus, .open > .btn.btn-outline-danger.dropdown-toggle:hover {
+ color: #f44336;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: #f44336
+}
+
+.open > .btn-outline-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-outline-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-outline-danger.custom-file-control:disabled.focus:before, .btn-outline-danger.custom-file-control:disabled:focus:before, .btn-outline-danger.custom-file-control:disabled:hover:before, .btn-outline-danger.disabled.custom-file-control:focus:before, .btn-outline-danger.disabled.custom-file-control:hover:before, .btn-outline-danger.disabled.focus.custom-file-control:before, .btn.btn-outline-danger.disabled.focus, .btn.btn-outline-danger.disabled:focus, .btn.btn-outline-danger.disabled:hover, .btn.btn-outline-danger:disabled.focus, .btn.btn-outline-danger:disabled:focus, .btn.btn-outline-danger:disabled:hover {
+ background-color: transparent;
+ border-color: #f44336
+}
+
+.bg-inverse .btn-outline-danger.custom-file-control:before, .bg-inverse .btn.btn-outline-danger {
+ color: #f44336;
+ background-color: transparent;
+ border-color: #f44336
+}
+
+.bg-inverse .btn-outline-danger.active.custom-file-control:before, .bg-inverse .btn-outline-danger.custom-file-control:active:before, .bg-inverse .btn-outline-danger.custom-file-control:focus:before, .bg-inverse .btn-outline-danger.custom-file-control:hover:before, .bg-inverse .btn-outline-danger.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-danger.active, .bg-inverse .btn.btn-outline-danger.focus, .bg-inverse .btn.btn-outline-danger:active, .bg-inverse .btn.btn-outline-danger:focus, .bg-inverse .btn.btn-outline-danger:hover, .open > .bg-inverse .btn-outline-danger.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle {
+ color: #f44336;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-danger.active.custom-file-control:focus:before, .bg-inverse .btn-outline-danger.active.custom-file-control:hover:before, .bg-inverse .btn-outline-danger.active.focus.custom-file-control:before, .bg-inverse .btn-outline-danger.custom-file-control:active.focus:before, .bg-inverse .btn-outline-danger.custom-file-control:active:focus:before, .bg-inverse .btn-outline-danger.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-danger.active.focus, .bg-inverse .btn.btn-outline-danger.active:focus, .bg-inverse .btn.btn-outline-danger.active:hover, .bg-inverse .btn.btn-outline-danger:active.focus, .bg-inverse .btn.btn-outline-danger:active:focus, .bg-inverse .btn.btn-outline-danger:active:hover, .open > .bg-inverse .btn-outline-danger.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-danger.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-danger.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle:hover {
+ color: #f44336;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-outline-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-outline-danger.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-danger.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-danger.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-danger.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-danger.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-danger.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-danger.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-danger.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-danger.disabled.focus, .bg-inverse .btn.btn-outline-danger.disabled:focus, .bg-inverse .btn.btn-outline-danger.disabled:hover, .bg-inverse .btn.btn-outline-danger:disabled.focus, .bg-inverse .btn.btn-outline-danger:disabled:focus, .bg-inverse .btn.btn-outline-danger:disabled:hover {
+ background-color: transparent;
+ border-color: #f44336
+}
+
+.btn-outline-danger.btn-link.custom-file-control:before, .btn.btn-outline-danger.btn-link {
+ background-color: transparent
+}
+
+.btn-outline-light.custom-file-control:before, .btn.btn-outline-light {
+ border-color: currentColor;
+ color: #f5f5f5;
+ background-color: transparent;
+ border: 1px solid #f5f5f5
+}
+
+.btn-outline-light.active.custom-file-control:before, .btn-outline-light.custom-file-control:active:before, .btn-outline-light.custom-file-control:focus:before, .btn-outline-light.custom-file-control:hover:before, .btn-outline-light.focus.custom-file-control:before, .btn.btn-outline-light.active, .btn.btn-outline-light.focus, .btn.btn-outline-light:active, .btn.btn-outline-light:focus, .btn.btn-outline-light:hover, .open > .btn-outline-light.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-light.dropdown-toggle {
+ color: #f5f5f5;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: #f5f5f5
+}
+
+.btn-outline-light.active.custom-file-control:focus:before, .btn-outline-light.active.custom-file-control:hover:before, .btn-outline-light.active.focus.custom-file-control:before, .btn-outline-light.custom-file-control:active.focus:before, .btn-outline-light.custom-file-control:active:focus:before, .btn-outline-light.custom-file-control:active:hover:before, .btn.btn-outline-light.active.focus, .btn.btn-outline-light.active:focus, .btn.btn-outline-light.active:hover, .btn.btn-outline-light:active.focus, .btn.btn-outline-light:active:focus, .btn.btn-outline-light:active:hover, .open > .btn-outline-light.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-light.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-light.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-light.dropdown-toggle.focus, .open > .btn.btn-outline-light.dropdown-toggle:focus, .open > .btn.btn-outline-light.dropdown-toggle:hover {
+ color: #f5f5f5;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: #f5f5f5
+}
+
+.open > .btn-outline-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-light.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-outline-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-light.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-outline-light.custom-file-control:disabled.focus:before, .btn-outline-light.custom-file-control:disabled:focus:before, .btn-outline-light.custom-file-control:disabled:hover:before, .btn-outline-light.disabled.custom-file-control:focus:before, .btn-outline-light.disabled.custom-file-control:hover:before, .btn-outline-light.disabled.focus.custom-file-control:before, .btn.btn-outline-light.disabled.focus, .btn.btn-outline-light.disabled:focus, .btn.btn-outline-light.disabled:hover, .btn.btn-outline-light:disabled.focus, .btn.btn-outline-light:disabled:focus, .btn.btn-outline-light:disabled:hover {
+ background-color: transparent;
+ border-color: #f5f5f5
+}
+
+.bg-inverse .btn-outline-light.custom-file-control:before, .bg-inverse .btn.btn-outline-light {
+ color: #f5f5f5;
+ background-color: transparent;
+ border-color: #f5f5f5
+}
+
+.bg-inverse .btn-outline-light.active.custom-file-control:before, .bg-inverse .btn-outline-light.custom-file-control:active:before, .bg-inverse .btn-outline-light.custom-file-control:focus:before, .bg-inverse .btn-outline-light.custom-file-control:hover:before, .bg-inverse .btn-outline-light.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-light.active, .bg-inverse .btn.btn-outline-light.focus, .bg-inverse .btn.btn-outline-light:active, .bg-inverse .btn.btn-outline-light:focus, .bg-inverse .btn.btn-outline-light:hover, .open > .bg-inverse .btn-outline-light.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle {
+ color: #f5f5f5;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-light.active.custom-file-control:focus:before, .bg-inverse .btn-outline-light.active.custom-file-control:hover:before, .bg-inverse .btn-outline-light.active.focus.custom-file-control:before, .bg-inverse .btn-outline-light.custom-file-control:active.focus:before, .bg-inverse .btn-outline-light.custom-file-control:active:focus:before, .bg-inverse .btn-outline-light.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-light.active.focus, .bg-inverse .btn.btn-outline-light.active:focus, .bg-inverse .btn.btn-outline-light.active:hover, .bg-inverse .btn.btn-outline-light:active.focus, .bg-inverse .btn.btn-outline-light:active:focus, .bg-inverse .btn.btn-outline-light:active:hover, .open > .bg-inverse .btn-outline-light.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-light.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-light.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle:hover {
+ color: #f5f5f5;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-outline-light.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-outline-light.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-light.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-light.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-light.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-light.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-light.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-light.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-light.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-light.disabled.focus, .bg-inverse .btn.btn-outline-light.disabled:focus, .bg-inverse .btn.btn-outline-light.disabled:hover, .bg-inverse .btn.btn-outline-light:disabled.focus, .bg-inverse .btn.btn-outline-light:disabled:focus, .bg-inverse .btn.btn-outline-light:disabled:hover {
+ background-color: transparent;
+ border-color: #f5f5f5
+}
+
+.btn-outline-light.btn-link.custom-file-control:before, .btn.btn-outline-light.btn-link {
+ background-color: transparent
+}
+
+.btn-outline-dark.custom-file-control:before, .btn.btn-outline-dark {
+ border-color: currentColor;
+ color: #424242;
+ background-color: transparent;
+ border: 1px solid #424242
+}
+
+.btn-outline-dark.active.custom-file-control:before, .btn-outline-dark.custom-file-control:active:before, .btn-outline-dark.custom-file-control:focus:before, .btn-outline-dark.custom-file-control:hover:before, .btn-outline-dark.focus.custom-file-control:before, .btn.btn-outline-dark.active, .btn.btn-outline-dark.focus, .btn.btn-outline-dark:active, .btn.btn-outline-dark:focus, .btn.btn-outline-dark:hover, .open > .btn-outline-dark.dropdown-toggle.custom-file-control:before, .open > .btn.btn-outline-dark.dropdown-toggle {
+ color: #424242;
+ background-color: hsla(0, 0%, 60%, .2);
+ border-color: #424242
+}
+
+.btn-outline-dark.active.custom-file-control:focus:before, .btn-outline-dark.active.custom-file-control:hover:before, .btn-outline-dark.active.focus.custom-file-control:before, .btn-outline-dark.custom-file-control:active.focus:before, .btn-outline-dark.custom-file-control:active:focus:before, .btn-outline-dark.custom-file-control:active:hover:before, .btn.btn-outline-dark.active.focus, .btn.btn-outline-dark.active:focus, .btn.btn-outline-dark.active:hover, .btn.btn-outline-dark:active.focus, .btn.btn-outline-dark:active:focus, .btn.btn-outline-dark:active:hover, .open > .btn-outline-dark.dropdown-toggle.custom-file-control:focus:before, .open > .btn-outline-dark.dropdown-toggle.custom-file-control:hover:before, .open > .btn-outline-dark.dropdown-toggle.focus.custom-file-control:before, .open > .btn.btn-outline-dark.dropdown-toggle.focus, .open > .btn.btn-outline-dark.dropdown-toggle:focus, .open > .btn.btn-outline-dark.dropdown-toggle:hover {
+ color: #424242;
+ background-color: hsla(0, 0%, 60%, .4);
+ border-color: #424242
+}
+
+.open > .btn-outline-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .btn.btn-outline-dark.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .btn-outline-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .btn.btn-outline-dark.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 60%, .2)
+}
+
+.btn-outline-dark.custom-file-control:disabled.focus:before, .btn-outline-dark.custom-file-control:disabled:focus:before, .btn-outline-dark.custom-file-control:disabled:hover:before, .btn-outline-dark.disabled.custom-file-control:focus:before, .btn-outline-dark.disabled.custom-file-control:hover:before, .btn-outline-dark.disabled.focus.custom-file-control:before, .btn.btn-outline-dark.disabled.focus, .btn.btn-outline-dark.disabled:focus, .btn.btn-outline-dark.disabled:hover, .btn.btn-outline-dark:disabled.focus, .btn.btn-outline-dark:disabled:focus, .btn.btn-outline-dark:disabled:hover {
+ background-color: transparent;
+ border-color: #424242
+}
+
+.bg-inverse .btn-outline-dark.custom-file-control:before, .bg-inverse .btn.btn-outline-dark {
+ color: #424242;
+ background-color: transparent;
+ border-color: #424242
+}
+
+.bg-inverse .btn-outline-dark.active.custom-file-control:before, .bg-inverse .btn-outline-dark.custom-file-control:active:before, .bg-inverse .btn-outline-dark.custom-file-control:focus:before, .bg-inverse .btn-outline-dark.custom-file-control:hover:before, .bg-inverse .btn-outline-dark.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-dark.active, .bg-inverse .btn.btn-outline-dark.focus, .bg-inverse .btn.btn-outline-dark:active, .bg-inverse .btn.btn-outline-dark:focus, .bg-inverse .btn.btn-outline-dark:hover, .open > .bg-inverse .btn-outline-dark.dropdown-toggle.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle {
+ color: #424242;
+ background-color: hsla(0, 0%, 80%, .15);
+ border-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-dark.active.custom-file-control:focus:before, .bg-inverse .btn-outline-dark.active.custom-file-control:hover:before, .bg-inverse .btn-outline-dark.active.focus.custom-file-control:before, .bg-inverse .btn-outline-dark.custom-file-control:active.focus:before, .bg-inverse .btn-outline-dark.custom-file-control:active:focus:before, .bg-inverse .btn-outline-dark.custom-file-control:active:hover:before, .bg-inverse .btn.btn-outline-dark.active.focus, .bg-inverse .btn.btn-outline-dark.active:focus, .bg-inverse .btn.btn-outline-dark.active:hover, .bg-inverse .btn.btn-outline-dark:active.focus, .bg-inverse .btn.btn-outline-dark:active:focus, .bg-inverse .btn.btn-outline-dark:active:hover, .open > .bg-inverse .btn-outline-dark.dropdown-toggle.custom-file-control:focus:before, .open > .bg-inverse .btn-outline-dark.dropdown-toggle.custom-file-control:hover:before, .open > .bg-inverse .btn-outline-dark.dropdown-toggle.focus.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle.focus, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle:focus, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle:hover {
+ color: #424242;
+ background-color: hsla(0, 0%, 80%, .25);
+ border-color: hsla(0, 0%, 80%, .25)
+}
+
+.open > .bg-inverse .btn-outline-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:before, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle.bmd-btn-icon {
+ color: inherit;
+ background-color: transparent
+}
+
+.open > .bg-inverse .btn-outline-dark.dropdown-toggle.bmd-btn-icon.custom-file-control:hover:before, .open > .bg-inverse .btn.btn-outline-dark.dropdown-toggle.bmd-btn-icon:hover {
+ background-color: hsla(0, 0%, 80%, .15)
+}
+
+.bg-inverse .btn-outline-dark.custom-file-control:disabled.focus:before, .bg-inverse .btn-outline-dark.custom-file-control:disabled:focus:before, .bg-inverse .btn-outline-dark.custom-file-control:disabled:hover:before, .bg-inverse .btn-outline-dark.disabled.custom-file-control:focus:before, .bg-inverse .btn-outline-dark.disabled.custom-file-control:hover:before, .bg-inverse .btn-outline-dark.disabled.focus.custom-file-control:before, .bg-inverse .btn.btn-outline-dark.disabled.focus, .bg-inverse .btn.btn-outline-dark.disabled:focus, .bg-inverse .btn.btn-outline-dark.disabled:hover, .bg-inverse .btn.btn-outline-dark:disabled.focus, .bg-inverse .btn.btn-outline-dark:disabled:focus, .bg-inverse .btn.btn-outline-dark:disabled:hover {
+ background-color: transparent;
+ border-color: #424242
+}
+
+.btn-outline-dark.btn-link.custom-file-control:before, .btn.btn-outline-dark.btn-link {
+ background-color: transparent
+}
+
+.bmd-btn-fab.custom-file-control:before, .bmd-btn-icon.custom-file-control:before, .btn.bmd-btn-fab, .btn.bmd-btn-icon {
+ overflow: hidden;
+ font-size: 1.5rem;
+ line-height: 0
+}
+
+.bmd-btn-fab.custom-file-control:before, .bmd-btn-icon.custom-file-control:before, .btn-group-lg .bmd-btn-fab.custom-file-control:before, .btn-group-lg .bmd-btn-icon.custom-file-control:before, .btn-group-lg .btn.bmd-btn-fab, .btn-group-lg .btn.bmd-btn-icon, .btn-group-sm .bmd-btn-fab.custom-file-control:before, .btn-group-sm .bmd-btn-icon.custom-file-control:before, .btn-group-sm .btn.bmd-btn-fab, .btn-group-sm .btn.bmd-btn-icon, .btn.bmd-btn-fab, .btn.bmd-btn-icon {
+ padding: 0;
+ border-radius: 50%;
+ line-height: 0
+}
+
+.bmd-btn-fab.custom-file-control:before .material-icons, .bmd-btn-icon.custom-file-control:before .material-icons, .btn.bmd-btn-fab .material-icons, .btn.bmd-btn-icon .material-icons {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 1.5rem;
+ line-height: 1.5rem;
+ transform: translate(-.75rem, -.75rem)
+}
+
+.bmd-btn-fab.custom-file-control:before, .btn.bmd-btn-fab {
+ width: 3.5rem;
+ min-width: 3.5rem;
+ height: 3.5rem;
+ box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, .12), 0 1px 1px 0 rgba(0, 0, 0, .26)
+}
+
+.bmd-btn-fab.custom-file-control:before .ripple-container, .btn.bmd-btn-fab .ripple-container {
+ border-radius: 50%
+}
+
+.bmd-btn-fab.bmd-btn-fab-sm.custom-file-control:before, .btn-group-sm .bmd-btn-fab.custom-file-control:before, .btn-group-sm .btn.bmd-btn-fab, .btn.bmd-btn-fab.bmd-btn-fab-sm {
+ width: 2.5rem;
+ min-width: 2.5rem;
+ height: 2.5rem
+}
+
+.bmd-btn-icon.custom-file-control:before, .btn.bmd-btn-icon {
+ width: 2rem;
+ min-width: 2rem;
+ height: 2rem;
+ margin: 0;
+ color: inherit;
+ line-height: 0
+}
+
+.bmd-btn-icon.bmd-btn-icon-sm.custom-file-control:before, .btn-group-sm .bmd-btn-icon.custom-file-control:before, .btn-group-sm .btn.bmd-btn-icon, .btn.bmd-btn-icon.bmd-btn-icon-sm {
+ width: 1.5rem;
+ min-width: 1.5rem;
+ height: 1.5rem;
+ font-size: 1.125rem
+}
+
+.bmd-btn-icon.bmd-btn-icon-sm.custom-file-control:before .material-icons, .btn-group-sm .bmd-btn-icon.custom-file-control:before .material-icons, .btn-group-sm .btn.bmd-btn-icon .material-icons, .btn.bmd-btn-icon.bmd-btn-icon-sm .material-icons {
+ width: 1.125rem;
+ font-size: 1.125rem;
+ line-height: 1;
+ vertical-align: middle;
+ transform: translate(-.5625rem, -.5625rem)
+}
+
+.btn .material-icons, .custom-file-control:before .material-icons {
+ position: relative;
+ display: inline-block;
+ top: .25em;
+ margin-top: -1em;
+ margin-bottom: -1em;
+ font-size: 1.5em;
+ vertical-align: middle
+}
+
+.btn-group-lg .btn, .btn-group-lg .custom-file-control:before, .btn-group-lg > .btn, .btn-group-lg > .custom-file-control:before, .btn-lg.custom-file-control:before, .btn.btn-lg {
+ padding: .5rem 1rem;
+ font-size: 1.25rem;
+ line-height: 1.5;
+ border-radius: .3rem
+}
+
+.btn-group-sm .btn, .btn-group-sm .custom-file-control:before, .btn-group-sm > .btn, .btn-group-sm > .custom-file-control:before, .btn-sm.custom-file-control:before, .btn.btn-sm {
+ padding: .40625rem .5rem;
+ line-height: 1.5;
+ border-radius: .0625rem;
+ font-size: .8125rem
+}
+
+.btn-group-vertical.disabled, .btn-group-vertical:disabled, .btn-group-vertical[disabled], .btn-group.disabled, .btn-group:disabled, .btn-group[disabled], .btn.disabled, .btn:disabled, .btn[disabled], .custom-file-control:disabled:before, .disabled.custom-file-control:before, .input-group-btn .btn.disabled, .input-group-btn .btn:disabled, .input-group-btn .btn[disabled], .input-group-btn .custom-file-control:disabled:before, .input-group-btn .disabled.custom-file-control:before, .input-group-btn [disabled].custom-file-control:before, [disabled].custom-file-control:before, fieldset[disabled][disabled] .btn, fieldset[disabled][disabled] .btn-group, fieldset[disabled][disabled] .btn-group-vertical, fieldset[disabled][disabled] .custom-file-control:before, fieldset[disabled][disabled] .input-group-btn .btn, fieldset[disabled][disabled] .input-group-btn .custom-file-control:before {
+ color: rgba(0, 0, 0, .26)
+}
+
+.bg-inverse .btn-group-vertical.disabled, .bg-inverse .btn-group-vertical:disabled, .bg-inverse .btn-group-vertical[disabled], .bg-inverse .btn-group.disabled, .bg-inverse .btn-group:disabled, .bg-inverse .btn-group[disabled], .bg-inverse .btn.disabled, .bg-inverse .btn:disabled, .bg-inverse .btn[disabled], .bg-inverse .custom-file-control:disabled:before, .bg-inverse .disabled.custom-file-control:before, .bg-inverse .input-group-btn .btn.disabled, .bg-inverse .input-group-btn .btn:disabled, .bg-inverse .input-group-btn .btn[disabled], .bg-inverse .input-group-btn .custom-file-control:disabled:before, .bg-inverse .input-group-btn .disabled.custom-file-control:before, .bg-inverse .input-group-btn [disabled].custom-file-control:before, .bg-inverse [disabled].custom-file-control:before, .bg-inverse fieldset[disabled][disabled] .btn, .bg-inverse fieldset[disabled][disabled] .btn-group, .bg-inverse fieldset[disabled][disabled] .btn-group-vertical, .bg-inverse fieldset[disabled][disabled] .custom-file-control:before, .bg-inverse fieldset[disabled][disabled] .input-group-btn .btn, .bg-inverse fieldset[disabled][disabled] .input-group-btn .custom-file-control:before {
+ color: hsla(0, 0%, 100%, .3)
+}
+
+.btn-group-vertical.disabled, .btn-group-vertical.disabled:focus, .btn-group-vertical.disabled:hover, .btn-group-vertical:disabled, .btn-group-vertical:disabled:focus, .btn-group-vertical:disabled:hover, .btn-group-vertical[disabled], .btn-group-vertical[disabled]:focus, .btn-group-vertical[disabled]:hover, .btn-group.disabled, .btn-group.disabled:focus, .btn-group.disabled:hover, .btn-group:disabled, .btn-group:disabled:focus, .btn-group:disabled:hover, .btn-group[disabled], .btn-group[disabled]:focus, .btn-group[disabled]:hover, .btn.disabled, .btn.disabled:focus, .btn.disabled:hover, .btn:disabled, .btn:disabled:focus, .btn:disabled:hover, .btn[disabled], .btn[disabled]:focus, .btn[disabled]:hover, .custom-file-control:disabled:before, .custom-file-control:disabled:focus:before, .custom-file-control:disabled:hover:before, .disabled.custom-file-control:before, .disabled.custom-file-control:focus:before, .disabled.custom-file-control:hover:before, .input-group-btn .btn.disabled, .input-group-btn .btn.disabled:focus, .input-group-btn .btn.disabled:hover, .input-group-btn .btn:disabled, .input-group-btn .btn:disabled:focus, .input-group-btn .btn:disabled:hover, .input-group-btn .btn[disabled], .input-group-btn .btn[disabled]:focus, .input-group-btn .btn[disabled]:hover, .input-group-btn .custom-file-control:disabled:before, .input-group-btn .custom-file-control:disabled:focus:before, .input-group-btn .custom-file-control:disabled:hover:before, .input-group-btn .disabled.custom-file-control:before, .input-group-btn .disabled.custom-file-control:focus:before, .input-group-btn .disabled.custom-file-control:hover:before, .input-group-btn [disabled].custom-file-control:before, .input-group-btn [disabled].custom-file-control:focus:before, .input-group-btn [disabled].custom-file-control:hover:before, [disabled].custom-file-control:before, [disabled].custom-file-control:focus:before, [disabled].custom-file-control:hover:before, fieldset[disabled][disabled] .btn, fieldset[disabled][disabled] .btn-group, fieldset[disabled][disabled] .btn-group-vertical, fieldset[disabled][disabled] .btn-group-vertical:focus, fieldset[disabled][disabled] .btn-group-vertical:hover, fieldset[disabled][disabled] .btn-group:focus, fieldset[disabled][disabled] .btn-group:hover, fieldset[disabled][disabled] .btn:focus, fieldset[disabled][disabled] .btn:hover, fieldset[disabled][disabled] .custom-file-control:before, fieldset[disabled][disabled] .custom-file-control:focus:before, fieldset[disabled][disabled] .custom-file-control:hover:before, fieldset[disabled][disabled] .input-group-btn .btn, fieldset[disabled][disabled] .input-group-btn .btn:focus, fieldset[disabled][disabled] .input-group-btn .btn:hover, fieldset[disabled][disabled] .input-group-btn .custom-file-control:before, fieldset[disabled][disabled] .input-group-btn .custom-file-control:focus:before, fieldset[disabled][disabled] .input-group-btn .custom-file-control:hover:before {
+ background: transparent
+}
+
+.btn-group, .btn-group-vertical {
+ position: relative;
+ margin: 10px 1px
+}
+
+.btn-group-vertical .dropdown-menu, .btn-group .dropdown-menu {
+ border-radius: 0 0 .125rem .125rem
+}
+
+.btn-group-vertical.btn-group-raised, .btn-group.btn-group-raised {
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12)
+}
+
+.btn-group-vertical .btn, .btn-group-vertical .btn + .btn, .btn-group-vertical .btn + .custom-file-control:before, .btn-group-vertical .btn-group, .btn-group-vertical .btn:active, .btn-group-vertical .custom-file-control:active:before, .btn-group-vertical .custom-file-control:before, .btn-group-vertical .custom-file-control:before + .btn, .btn-group-vertical .custom-file-control:before + .custom-file-control:before, .btn-group-vertical > .btn-group, .btn-group .btn, .btn-group .btn + .btn, .btn-group .btn + .custom-file-control:before, .btn-group .btn-group, .btn-group .btn:active, .btn-group .custom-file-control:active:before, .btn-group .custom-file-control:before, .btn-group .custom-file-control:before + .btn, .btn-group .custom-file-control:before + .custom-file-control:before, .btn-group > .btn-group {
+ margin: 0
+}
+
+.checkbox label, label.checkbox-inline {
+ position: relative;
+ padding-left: 1.5625rem
+}
+
+.checkbox label .checkbox-decorator, label.checkbox-inline .checkbox-decorator {
+ position: absolute;
+ left: 0;
+ padding: .7em;
+ margin: -.7em;
+ line-height: .7;
+ vertical-align: middle;
+ cursor: pointer;
+ border-radius: 100%
+}
+
+.checkbox label .checkbox-decorator .check, label.checkbox-inline .checkbox-decorator .check {
+ position: relative;
+ z-index: 1;
+ display: inline-block;
+ width: 1.25rem;
+ height: 1.25rem;
+ overflow: hidden;
+ border: .125rem solid rgba(0, 0, 0, .54);
+ border-radius: .125rem
+}
+
+.checkbox label .checkbox-decorator .check:before, label.checkbox-inline .checkbox-decorator .check:before {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ margin-top: -4px;
+ margin-left: 6px;
+ color: #757575;
+ content: "";
+ box-shadow: 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, inset 0 0 0 0;
+ transform: rotate(45deg);
+ animation: c
+}
+
+.is-focused .checkbox label .checkbox-decorator .check:before, .is-focused label.checkbox-inline .checkbox-decorator .check:before {
+ animation: c .3s forwards
+}
+
+.checkbox label input[type=checkbox], label.checkbox-inline input[type=checkbox] {
+ position: absolute;
+ left: 0;
+ z-index: -1;
+ width: 0;
+ height: 0;
+ margin: 0;
+ overflow: hidden;
+ pointer-events: none;
+ opacity: 0
+}
+
+.checkbox label input[type=checkbox]:focus + .checkbox-decorator .check:after, label.checkbox-inline input[type=checkbox]:focus + .checkbox-decorator .check:after {
+ opacity: .2
+}
+
+.checkbox label input[type=checkbox]:checked + .checkbox-decorator .check, label.checkbox-inline input[type=checkbox]:checked + .checkbox-decorator .check {
+ color: #009688;
+ border-color: #009688
+}
+
+.checkbox label input[type=checkbox]:checked + .checkbox-decorator .check:before, label.checkbox-inline input[type=checkbox]:checked + .checkbox-decorator .check:before {
+ color: #009688;
+ box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px;
+ animation: b .3s forwards
+}
+
+.checkbox label input[type=checkbox][disabled] + .checkbox-decorator .check:after, .checkbox label input[type=checkbox][disabled] .check:after, fieldset[disabled] .checkbox label input[type=checkbox] + .checkbox-decorator .check:after, fieldset[disabled] .checkbox label input[type=checkbox] .check:after, fieldset[disabled] label.checkbox-inline input[type=checkbox] + .checkbox-decorator .check:after, fieldset[disabled] label.checkbox-inline input[type=checkbox] .check:after, label.checkbox-inline input[type=checkbox][disabled] + .checkbox-decorator .check:after, label.checkbox-inline input[type=checkbox][disabled] .check:after {
+ background-color: rgba(0, 0, 0, .87);
+ transform: rotate(-45deg)
+}
+
+.checkbox label input[type=checkbox][disabled] + .checkbox-decorator .check, .checkbox label input[type=checkbox][disabled] .check, fieldset[disabled] .checkbox label input[type=checkbox] + .checkbox-decorator .check, fieldset[disabled] .checkbox label input[type=checkbox] .check, fieldset[disabled] label.checkbox-inline input[type=checkbox] + .checkbox-decorator .check, fieldset[disabled] label.checkbox-inline input[type=checkbox] .check, label.checkbox-inline input[type=checkbox][disabled] + .checkbox-decorator .check, label.checkbox-inline input[type=checkbox][disabled] .check {
+ border-color: rgba(0, 0, 0, .26)
+}
+
+.checkbox label input[type=checkbox][disabled] + .checkbox-decorator .ripple-container, fieldset[disabled] .checkbox label input[type=checkbox] + .checkbox-decorator .ripple-container, fieldset[disabled] label.checkbox-inline input[type=checkbox] + .checkbox-decorator .ripple-container, label.checkbox-inline input[type=checkbox][disabled] + .checkbox-decorator .ripple-container {
+ display: none
+}
+
+@keyframes b {
+ 0% {
+ box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px
+ }
+ 50% {
+ box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 20px 2px 0 11px
+ }
+ to {
+ box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px
+ }
+}
+
+@keyframes c {
+ 0% {
+ box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, inset 0 0 0 0
+ }
+ 25% {
+ box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 20px -12px 0 11px, inset 0 0 0 0
+ }
+ 50% {
+ width: 0;
+ height: 0;
+ margin-top: -4px;
+ margin-left: 6px;
+ box-shadow: 0 0 0 10px, 10px -10px 0 10px, 32px 0 0 20px, 0 32px 0 20px, -5px 5px 0 10px, 15px 2px 0 11px, inset 0 0 0 0;
+ transform: rotate(45deg)
+ }
+ 51% {
+ width: 20px;
+ height: 20px;
+ margin-top: -2px;
+ margin-left: -2px;
+ box-shadow: 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, inset 0 0 0 10px;
+ transform: rotate(0deg)
+ }
+ to {
+ width: 20px;
+ height: 20px;
+ margin-top: -2px;
+ margin-left: -2px;
+ box-shadow: 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, 0 0 0 0, inset 0 0 0 0;
+ transform: rotate(0deg)
+ }
+}
+
+.custom-file-control [class*=" bmd-label"], .custom-file-control [class^=bmd-label] {
+ color: rgba(0, 0, 0, .26)
+}
+
+.custom-file-control .custom-file-control, .custom-file-control .form-control, .is-focused .custom-file-control .custom-file-control, .is-focused .custom-file-control .form-control {
+ background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.custom-file-control .custom-file-control:invalid, .custom-file-control .form-control:invalid {
+ background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.custom-file-control .custom-file-control:read-only, .custom-file-control .form-control:read-only {
+ background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.custom-file-control .custom-file-control:disabled, .custom-file-control .disabled.custom-file-control, .custom-file-control .form-control.disabled, .custom-file-control .form-control:disabled, .custom-file-control .form-control[disabled], .custom-file-control [disabled].custom-file-control, fieldset[disabled][disabled] .custom-file-control .custom-file-control, fieldset[disabled][disabled] .custom-file-control .form-control {
+ background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent);
+ background-repeat: repeat-x;
+ background-size: 3px 1px
+}
+
+.custom-file-control .form-control-success.custom-file-control, .custom-file-control .form-control.form-control-success, .is-focused .custom-file-control .form-control-success.custom-file-control, .is-focused .custom-file-control .form-control.form-control-success {
+ background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="
+}
+
+.custom-file-control .form-control-warning.custom-file-control, .custom-file-control .form-control.form-control-warning, .is-focused .custom-file-control .form-control-warning.custom-file-control, .is-focused .custom-file-control .form-control.form-control-warning {
+ background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"
+}
+
+.custom-file-control .form-control-danger.custom-file-control, .custom-file-control .form-control.form-control-danger, .is-focused .custom-file-control .form-control-danger.custom-file-control, .is-focused .custom-file-control .form-control.form-control-danger {
+ background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="
+}
+
+.custom-file-control.is-focused .valid-feedback, .custom-file-control .is-focused .valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: rgba(0, 0, 0, .26)
+}
+
+.custom-file-control.is-focused .valid-tooltip, .custom-file-control .is-focused .valid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1;
+ color: #fff;
+ background-color: rgba(0, 0, 0, .8);
+ border-radius: .2rem
+}
+
+.custom-file-control.is-focused .custom-select.is-valid, .custom-file-control .is-focused .custom-select.is-valid, .custom-file-control.is-focused .form-control.is-valid, .custom-file-control .is-focused .form-control.is-valid, .custom-file-control.is-focused .is-valid.custom-file-control, .custom-file-control .is-focused .is-valid.custom-file-control, .was-validated .custom-file-control.is-focused .custom-file-control:valid, .was-validated .custom-file-control .is-focused .custom-file-control:valid, .was-validated .custom-file-control.is-focused .custom-select:valid, .was-validated .custom-file-control .is-focused .custom-select:valid, .was-validated .custom-file-control.is-focused .form-control:valid, .was-validated .custom-file-control .is-focused .form-control:valid {
+ border-color: rgba(0, 0, 0, .26)
+}
+
+.custom-file-control.is-focused .custom-select.is-valid:focus, .custom-file-control .is-focused .custom-select.is-valid:focus, .custom-file-control.is-focused .form-control.is-valid:focus, .custom-file-control .is-focused .form-control.is-valid:focus, .custom-file-control.is-focused .is-valid.custom-file-control:focus, .custom-file-control .is-focused .is-valid.custom-file-control:focus, .was-validated .custom-file-control.is-focused .custom-file-control:valid:focus, .was-validated .custom-file-control .is-focused .custom-file-control:valid:focus, .was-validated .custom-file-control.is-focused .custom-select:valid:focus, .was-validated .custom-file-control .is-focused .custom-select:valid:focus, .was-validated .custom-file-control.is-focused .form-control:valid:focus, .was-validated .custom-file-control .is-focused .form-control:valid:focus {
+ border-color: rgba(0, 0, 0, .26);
+ box-shadow: 0 0 0 .2rem rgba(0, 0, 0, .25)
+}
+
+.custom-file-control.is-focused .custom-select.is-valid ~ .valid-feedback, .custom-file-control .is-focused .custom-select.is-valid ~ .valid-feedback, .custom-file-control.is-focused .custom-select.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .custom-select.is-valid ~ .valid-tooltip, .custom-file-control.is-focused .form-control.is-valid ~ .valid-feedback, .custom-file-control .is-focused .form-control.is-valid ~ .valid-feedback, .custom-file-control.is-focused .form-control.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .form-control.is-valid ~ .valid-tooltip, .custom-file-control.is-focused .is-valid.custom-file-control ~ .valid-feedback, .custom-file-control .is-focused .is-valid.custom-file-control ~ .valid-feedback, .custom-file-control.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .custom-file-control .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .form-control:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .form-control:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .form-control:valid ~ .valid-tooltip {
+ display: block
+}
+
+.custom-file-control.is-focused .form-check-input.is-valid ~ .form-check-label, .custom-file-control .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .custom-file-control.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .custom-file-control .is-focused .form-check-input:valid ~ .form-check-label {
+ color: rgba(0, 0, 0, .26)
+}
+
+.custom-file-control.is-focused .form-check-input.is-valid ~ .valid-feedback, .custom-file-control .is-focused .form-check-input.is-valid ~ .valid-feedback, .custom-file-control.is-focused .form-check-input.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .form-check-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.custom-file-control.is-focused .custom-control-input.is-valid ~ .custom-control-label, .custom-file-control .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .custom-file-control.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .custom-file-control .is-focused .custom-control-input:valid ~ .custom-control-label {
+ color: rgba(0, 0, 0, .26)
+}
+
+.custom-file-control.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .custom-file-control .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .custom-file-control.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .custom-file-control .is-focused .custom-control-input:valid ~ .custom-control-label:before {
+ background-color: rgba(64, 64, 64, .26)
+}
+
+.custom-file-control.is-focused .custom-control-input.is-valid ~ .valid-feedback, .custom-file-control .is-focused .custom-control-input.is-valid ~ .valid-feedback, .custom-file-control.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .custom-control-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.custom-file-control.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .custom-file-control .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .custom-file-control.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .custom-file-control .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before {
+ background-color: rgba(26, 26, 26, .26)
+}
+
+.custom-file-control.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .custom-file-control .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .custom-file-control.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .custom-file-control .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before {
+ box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(0, 0, 0, .25)
+}
+
+.custom-file-control.is-focused .custom-file-input.is-valid ~ .custom-file-label, .custom-file-control .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .custom-file-control.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .custom-file-control .is-focused .custom-file-input:valid ~ .custom-file-label {
+ border-color: rgba(0, 0, 0, .26)
+}
+
+.custom-file-control.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .custom-file-control .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .custom-file-control.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .custom-file-control .is-focused .custom-file-input:valid ~ .custom-file-label:before {
+ border-color: inherit
+}
+
+.custom-file-control.is-focused .custom-file-input.is-valid ~ .valid-feedback, .custom-file-control .is-focused .custom-file-input.is-valid ~ .valid-feedback, .custom-file-control.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .custom-file-control .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .custom-file-control.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-control .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-control.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .custom-file-control .is-focused .custom-file-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.custom-file-control.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .custom-file-control .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .custom-file-control.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .custom-file-control .is-focused .custom-file-input:valid:focus ~ .custom-file-label {
+ box-shadow: 0 0 0 .2rem rgba(0, 0, 0, .25)
+}
+
+.custom-file-control.is-focused [class*=" bmd-label"], .custom-file-control .is-focused [class*=" bmd-label"], .custom-file-control.is-focused [class^=bmd-label], .custom-file-control .is-focused [class^=bmd-label] {
+ color: #009688
+}
+
+.custom-file-control.is-focused .bmd-label-placeholder, .custom-file-control .is-focused .bmd-label-placeholder {
+ color: rgba(0, 0, 0, .26)
+}
+
+.custom-file-control.is-focused .custom-file-control, .custom-file-control .is-focused .custom-file-control, .custom-file-control.is-focused .form-control, .custom-file-control .is-focused .form-control {
+ border-color: rgba(0, 0, 0, .26)
+}
+
+.custom-file-control.is-focused .bmd-help, .custom-file-control .is-focused .bmd-help {
+ color: rgba(0, 0, 0, .54)
+}
+
+.custom-file-control:before {
+ position: absolute;
+ height: calc(100% - 1px)
+}
+
+.switch label {
+ position: relative;
+ padding-left: 2.4375rem
+}
+
+.switch label .bmd-switch-track {
+ position: absolute;
+ top: .3125rem;
+ left: 0;
+ display: inline-block;
+ width: 2.125rem;
+ height: .875rem;
+ cursor: pointer;
+ background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 50%, #49dcce 0, #49dcce);
+ background-position: 0;
+ background-size: 4.25rem .875rem;
+ border-radius: 2.125rem;
+ transition: background-position .2s ease-in
+}
+
+.switch label .bmd-switch-track:after {
+ position: absolute;
+ top: 50%;
+ left: 0;
+ display: block;
+ align-self: center;
+ width: 1.25rem;
+ height: 1.25rem;
+ content: "";
+ background: #f1f1f1;
+ border-radius: 100%;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, .5);
+ transition: left .2s ease-in, background-color .2s ease-in, transform .3s ease;
+ transform: translateY(-50%)
+}
+
+.switch label .bmd-switch-track:active:after {
+ transform: translateY(-50%) scale3d(1.15, .85, 1)
+}
+
+.switch label input {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ opacity: 0
+}
+
+.switch label input:checked + .bmd-switch-track {
+ background-position: -100%
+}
+
+.switch label input:checked + .bmd-switch-track:after {
+ left: calc(100% - 1.25rem);
+ background-color: #009688
+}
+
+.switch label input:disabled + .bmd-switch-track:active:after {
+ transform: translateY(-50%)
+}
+
+.switch label input:disabled + .bmd-switch-track {
+ cursor: default;
+ background: rgba(0, 0, 0, .12)
+}
+
+.switch label input:disabled + .bmd-switch-track:after {
+ background: #bdbdbd
+}
+
+.radio label, label.radio-inline {
+ position: relative;
+ padding-left: 1.5625rem
+}
+
+.radio label .bmd-radio, label.radio-inline .bmd-radio {
+ position: absolute;
+ left: 0;
+ display: inline-block;
+ padding: .7em;
+ margin: -.7em;
+ line-height: .7;
+ border-radius: 100%
+}
+
+.radio label .bmd-radio:after, label.radio-inline .bmd-radio:after {
+ display: inline-block;
+ width: 1.25rem;
+ height: 1.25rem;
+ cursor: pointer;
+ content: "";
+ border: .125rem solid rgba(0, 0, 0, .54);
+ border-radius: 50%;
+ transition: border-color .28s ease;
+ transition-duration: .2s
+}
+
+.radio label .bmd-radio:before, label.radio-inline .bmd-radio:before {
+ position: absolute;
+ display: inline-block;
+ width: 1.25rem;
+ height: 1.25rem;
+ content: "";
+ background-color: #009688;
+ border-radius: 50%;
+ transition: transform .28s ease;
+ transform: scale3d(0, 0, 0)
+}
+
+.radio label input[type=radio], label.radio-inline input[type=radio] {
+ position: absolute;
+ left: 0;
+ z-index: -1;
+ width: 0;
+ height: 0;
+ margin: 0;
+ overflow: hidden;
+ pointer-events: none;
+ opacity: 0
+}
+
+.radio label input[type=radio]:checked ~ .bmd-radio:after, label.radio-inline input[type=radio]:checked ~ .bmd-radio:after {
+ border-color: #009688
+}
+
+.radio label input[type=radio]:checked ~ .bmd-radio:before, label.radio-inline input[type=radio]:checked ~ .bmd-radio:before {
+ background-color: #009688;
+ transform: scale3d(.5, .5, 1)
+}
+
+.radio label input[type=radio]:disabled + .bmd-radio, .radio label input[type=radio][disabled] + .bmd-radio, fieldset[disabled] .radio label input[type=radio] + .bmd-radio, fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio, label.radio-inline input[type=radio]:disabled + .bmd-radio, label.radio-inline input[type=radio][disabled] + .bmd-radio {
+ cursor: default
+}
+
+.radio label input[type=radio]:disabled + .bmd-radio:after, .radio label input[type=radio][disabled] + .bmd-radio:after, fieldset[disabled] .radio label input[type=radio] + .bmd-radio:after, fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio:after, label.radio-inline input[type=radio]:disabled + .bmd-radio:after, label.radio-inline input[type=radio][disabled] + .bmd-radio:after {
+ border-color: rgba(0, 0, 0, .26)
+}
+
+.radio label input[type=radio]:disabled + .bmd-radio:before, .radio label input[type=radio][disabled] + .bmd-radio:before, fieldset[disabled] .radio label input[type=radio] + .bmd-radio:before, fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio:before, label.radio-inline input[type=radio]:disabled + .bmd-radio:before, label.radio-inline input[type=radio][disabled] + .bmd-radio:before {
+ background-color: rgba(0, 0, 0, .26)
+}
+
+.radio label input[type=radio]:disabled + .bmd-radio .ripple-container, .radio label input[type=radio][disabled] + .bmd-radio .ripple-container, fieldset[disabled] .radio label input[type=radio] + .bmd-radio .ripple-container, fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio .ripple-container, label.radio-inline input[type=radio]:disabled + .bmd-radio .ripple-container, label.radio-inline input[type=radio][disabled] + .bmd-radio .ripple-container {
+ display: none
+}
+
+.bg-inverse .radio label input[type=radio]:disabled + .bmd-radio:after, .bg-inverse .radio label input[type=radio][disabled] + .bmd-radio:after, .bg-inverse fieldset[disabled] .radio label input[type=radio] + .bmd-radio:after, .bg-inverse fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio:after, .bg-inverse label.radio-inline input[type=radio]:disabled + .bmd-radio:after, .bg-inverse label.radio-inline input[type=radio][disabled] + .bmd-radio:after {
+ border-color: hsla(0, 0%, 100%, .3)
+}
+
+.bg-inverse .radio label input[type=radio]:disabled + .bmd-radio:before, .bg-inverse .radio label input[type=radio][disabled] + .bmd-radio:before, .bg-inverse fieldset[disabled] .radio label input[type=radio] + .bmd-radio:before, .bg-inverse fieldset[disabled] label.radio-inline input[type=radio] + .bmd-radio:before, .bg-inverse label.radio-inline input[type=radio]:disabled + .bmd-radio:before, .bg-inverse label.radio-inline input[type=radio][disabled] + .bmd-radio:before {
+ background-color: hsla(0, 0%, 100%, .3)
+}
+
+form {
+ margin-bottom: 1.125rem
+}
+
+.navbar form {
+ margin-bottom: 0
+}
+
+.navbar form .bmd-form-group {
+ display: inline-block;
+ padding-top: 0
+}
+
+.navbar form .btn, .navbar form .custom-file-control:before {
+ margin-bottom: 0
+}
+
+.custom-file-control, .form-control {
+ background: no-repeat bottom, 50% calc(100% - 1px);
+ background-size: 0 100%, 100% 100%;
+ border: 0;
+ transition: background 0s ease-out;
+ padding-left: 0;
+ padding-right: 0
+}
+
+.bmd-form-group.is-focused .custom-file-control, .bmd-form-group.is-focused .form-control, .custom-file-control:focus, .form-control:focus {
+ background-size: 100% 100%, 100% 100%;
+ transition-duration: .3s
+}
+
+.bmd-help {
+ position: absolute;
+ display: none;
+ font-size: .8rem;
+ font-weight: 400
+}
+
+.bmd-form-group.is-focused .bmd-help {
+ display: block
+}
+
+.bmd-help:nth-of-type(2) {
+ padding-top: 1rem
+}
+
+.bmd-help + .bmd-help {
+ position: relative;
+ margin-bottom: 0
+}
+
+.checkbox-inline, .checkbox label, .is-focused .checkbox-inline, .is-focused .checkbox label, .is-focused .radio-inline, .is-focused .radio label, .is-focused .switch label, .radio-inline, .radio label, .switch label {
+ color: rgba(0, 0, 0, .26)
+}
+
+.checkbox-inline:active, .checkbox-inline:focus, .checkbox-inline:hover, .checkbox label:active, .checkbox label:focus, .checkbox label:hover, .is-focused .checkbox-inline:active, .is-focused .checkbox-inline:focus, .is-focused .checkbox-inline:hover, .is-focused .checkbox label:active, .is-focused .checkbox label:focus, .is-focused .checkbox label:hover, .is-focused .radio-inline:active, .is-focused .radio-inline:focus, .is-focused .radio-inline:hover, .is-focused .radio label:active, .is-focused .radio label:focus, .is-focused .radio label:hover, .is-focused .switch label:active, .is-focused .switch label:focus, .is-focused .switch label:hover, .radio-inline:active, .radio-inline:focus, .radio-inline:hover, .radio label:active, .radio label:focus, .radio label:hover, .switch label:active, .switch label:focus, .switch label:hover {
+ color: rgba(0, 0, 0, .54)
+}
+
+.checkbox-inline label:has(input[type=checkbox][disabled]), .checkbox-inline label:has(input[type=checkbox][disabled]):focus, .checkbox-inline label:has(input[type=checkbox][disabled]):hover, .checkbox-inline label:has(input[type=radio][disabled]), .checkbox-inline label:has(input[type=radio][disabled]):focus, .checkbox-inline label:has(input[type=radio][disabled]):hover, .checkbox label label:has(input[type=checkbox][disabled]), .checkbox label label:has(input[type=checkbox][disabled]):focus, .checkbox label label:has(input[type=checkbox][disabled]):hover, .checkbox label label:has(input[type=radio][disabled]), .checkbox label label:has(input[type=radio][disabled]):focus, .checkbox label label:has(input[type=radio][disabled]):hover, .is-focused .checkbox-inline label:has(input[type=checkbox][disabled]), .is-focused .checkbox-inline label:has(input[type=checkbox][disabled]):focus, .is-focused .checkbox-inline label:has(input[type=checkbox][disabled]):hover, .is-focused .checkbox-inline label:has(input[type=radio][disabled]), .is-focused .checkbox-inline label:has(input[type=radio][disabled]):focus, .is-focused .checkbox-inline label:has(input[type=radio][disabled]):hover, .is-focused .checkbox label label:has(input[type=checkbox][disabled]), .is-focused .checkbox label label:has(input[type=checkbox][disabled]):focus, .is-focused .checkbox label label:has(input[type=checkbox][disabled]):hover, .is-focused .checkbox label label:has(input[type=radio][disabled]), .is-focused .checkbox label label:has(input[type=radio][disabled]):focus, .is-focused .checkbox label label:has(input[type=radio][disabled]):hover, .is-focused .radio-inline label:has(input[type=checkbox][disabled]), .is-focused .radio-inline label:has(input[type=checkbox][disabled]):focus, .is-focused .radio-inline label:has(input[type=checkbox][disabled]):hover, .is-focused .radio-inline label:has(input[type=radio][disabled]), .is-focused .radio-inline label:has(input[type=radio][disabled]):focus, .is-focused .radio-inline label:has(input[type=radio][disabled]):hover, .is-focused .radio label label:has(input[type=checkbox][disabled]), .is-focused .radio label label:has(input[type=checkbox][disabled]):focus, .is-focused .radio label label:has(input[type=checkbox][disabled]):hover, .is-focused .radio label label:has(input[type=radio][disabled]), .is-focused .radio label label:has(input[type=radio][disabled]):focus, .is-focused .radio label label:has(input[type=radio][disabled]):hover, .is-focused .switch label label:has(input[type=checkbox][disabled]), .is-focused .switch label label:has(input[type=checkbox][disabled]):focus, .is-focused .switch label label:has(input[type=checkbox][disabled]):hover, .is-focused .switch label label:has(input[type=radio][disabled]), .is-focused .switch label label:has(input[type=radio][disabled]):focus, .is-focused .switch label label:has(input[type=radio][disabled]):hover, .radio-inline label:has(input[type=checkbox][disabled]), .radio-inline label:has(input[type=checkbox][disabled]):focus, .radio-inline label:has(input[type=checkbox][disabled]):hover, .radio-inline label:has(input[type=radio][disabled]), .radio-inline label:has(input[type=radio][disabled]):focus, .radio-inline label:has(input[type=radio][disabled]):hover, .radio label label:has(input[type=checkbox][disabled]), .radio label label:has(input[type=checkbox][disabled]):focus, .radio label label:has(input[type=checkbox][disabled]):hover, .radio label label:has(input[type=radio][disabled]), .radio label label:has(input[type=radio][disabled]):focus, .radio label label:has(input[type=radio][disabled]):hover, .switch label label:has(input[type=checkbox][disabled]), .switch label label:has(input[type=checkbox][disabled]):focus, .switch label label:has(input[type=checkbox][disabled]):hover, .switch label label:has(input[type=radio][disabled]), .switch label label:has(input[type=radio][disabled]):focus, .switch label label:has(input[type=radio][disabled]):hover, fieldset[disabled] .checkbox-inline, fieldset[disabled] .checkbox-inline:focus, fieldset[disabled] .checkbox-inline:hover, fieldset[disabled] .checkbox label, fieldset[disabled] .checkbox label:focus, fieldset[disabled] .checkbox label:hover, fieldset[disabled] .is-focused .checkbox-inline, fieldset[disabled] .is-focused .checkbox-inline:focus, fieldset[disabled] .is-focused .checkbox-inline:hover, fieldset[disabled] .is-focused .checkbox label, fieldset[disabled] .is-focused .checkbox label:focus, fieldset[disabled] .is-focused .checkbox label:hover, fieldset[disabled] .is-focused .radio-inline, fieldset[disabled] .is-focused .radio-inline:focus, fieldset[disabled] .is-focused .radio-inline:hover, fieldset[disabled] .is-focused .radio label, fieldset[disabled] .is-focused .radio label:focus, fieldset[disabled] .is-focused .radio label:hover, fieldset[disabled] .is-focused .switch label, fieldset[disabled] .is-focused .switch label:focus, fieldset[disabled] .is-focused .switch label:hover, fieldset[disabled] .radio-inline, fieldset[disabled] .radio-inline:focus, fieldset[disabled] .radio-inline:hover, fieldset[disabled] .radio label, fieldset[disabled] .radio label:focus, fieldset[disabled] .radio label:hover, fieldset[disabled] .switch label, fieldset[disabled] .switch label:focus, fieldset[disabled] .switch label:hover {
+ color: rgba(0, 0, 0, .26)
+}
+
+[class*=" bmd-label"], [class^=bmd-label] {
+ color: rgba(0, 0, 0, .26)
+}
+
+.custom-file-control, .form-control, .is-focused .custom-file-control, .is-focused .form-control {
+ background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.custom-file-control:invalid, .form-control:invalid {
+ background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.custom-file-control:read-only, .form-control:read-only {
+ background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.custom-file-control:disabled, .disabled.custom-file-control, .form-control.disabled, .form-control:disabled, .form-control[disabled], [disabled].custom-file-control, fieldset[disabled][disabled] .custom-file-control, fieldset[disabled][disabled] .form-control {
+ background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent);
+ background-repeat: repeat-x;
+ background-size: 3px 1px
+}
+
+.form-control-success.custom-file-control, .form-control.form-control-success, .is-focused .form-control-success.custom-file-control, .is-focused .form-control.form-control-success {
+ background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="
+}
+
+.form-control-warning.custom-file-control, .form-control.form-control-warning, .is-focused .form-control-warning.custom-file-control, .is-focused .form-control.form-control-warning {
+ background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"
+}
+
+.form-control-danger.custom-file-control, .form-control.form-control-danger, .is-focused .form-control-danger.custom-file-control, .is-focused .form-control.form-control-danger {
+ background-image: linear-gradient(0deg, #009688 2px, rgba(0, 150, 136, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="
+}
+
+.is-focused .valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: rgba(0, 0, 0, .26)
+}
+
+.is-focused .valid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1;
+ color: #fff;
+ background-color: rgba(0, 0, 0, .8);
+ border-radius: .2rem
+}
+
+.is-focused .custom-select.is-valid, .is-focused .form-control.is-valid, .is-focused .is-valid.custom-file-control, .was-validated .is-focused .custom-file-control:valid, .was-validated .is-focused .custom-select:valid, .was-validated .is-focused .form-control:valid {
+ border-color: rgba(0, 0, 0, .26)
+}
+
+.is-focused .custom-select.is-valid:focus, .is-focused .form-control.is-valid:focus, .is-focused .is-valid.custom-file-control:focus, .was-validated .is-focused .custom-file-control:valid:focus, .was-validated .is-focused .custom-select:valid:focus, .was-validated .is-focused .form-control:valid:focus {
+ border-color: rgba(0, 0, 0, .26);
+ box-shadow: 0 0 0 .2rem rgba(0, 0, 0, .25)
+}
+
+.is-focused .custom-select.is-valid ~ .valid-feedback, .is-focused .custom-select.is-valid ~ .valid-tooltip, .is-focused .form-control.is-valid ~ .valid-feedback, .is-focused .form-control.is-valid ~ .valid-tooltip, .is-focused .is-valid.custom-file-control ~ .valid-feedback, .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .is-focused .form-control:valid ~ .valid-feedback, .was-validated .is-focused .form-control:valid ~ .valid-tooltip {
+ display: block
+}
+
+.is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .is-focused .form-check-input:valid ~ .form-check-label {
+ color: rgba(0, 0, 0, .26)
+}
+
+.is-focused .form-check-input.is-valid ~ .valid-feedback, .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .is-focused .form-check-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .is-focused .custom-control-input:valid ~ .custom-control-label {
+ color: rgba(0, 0, 0, .26)
+}
+
+.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .is-focused .custom-control-input:valid ~ .custom-control-label:before {
+ background-color: rgba(64, 64, 64, .26)
+}
+
+.is-focused .custom-control-input.is-valid ~ .valid-feedback, .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .is-focused .custom-control-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before {
+ background-color: rgba(26, 26, 26, .26)
+}
+
+.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before {
+ box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(0, 0, 0, .25)
+}
+
+.is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .is-focused .custom-file-input:valid ~ .custom-file-label {
+ border-color: rgba(0, 0, 0, .26)
+}
+
+.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .is-focused .custom-file-input:valid ~ .custom-file-label:before {
+ border-color: inherit
+}
+
+.is-focused .custom-file-input.is-valid ~ .valid-feedback, .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .is-focused .custom-file-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .is-focused .custom-file-input:valid:focus ~ .custom-file-label {
+ box-shadow: 0 0 0 .2rem rgba(0, 0, 0, .25)
+}
+
+.is-focused [class*=" bmd-label"], .is-focused [class^=bmd-label] {
+ color: #009688
+}
+
+.is-focused .bmd-label-placeholder {
+ color: rgba(0, 0, 0, .26)
+}
+
+.is-focused .custom-file-control, .is-focused .form-control {
+ border-color: rgba(0, 0, 0, .26)
+}
+
+.is-focused .bmd-help {
+ color: rgba(0, 0, 0, .54)
+}
+
+.has-success [class*=" bmd-label"], .has-success [class^=bmd-label] {
+ color: #4caf50
+}
+
+.has-success .custom-file-control, .has-success .form-control, .is-focused .has-success .custom-file-control, .is-focused .has-success .form-control {
+ background-image: linear-gradient(0deg, #4caf50 2px, rgba(76, 175, 80, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-success .custom-file-control:invalid, .has-success .form-control:invalid {
+ background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-success .custom-file-control:read-only, .has-success .form-control:read-only {
+ background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-success .custom-file-control:disabled, .has-success .disabled.custom-file-control, .has-success .form-control.disabled, .has-success .form-control:disabled, .has-success .form-control[disabled], .has-success [disabled].custom-file-control, fieldset[disabled][disabled] .has-success .custom-file-control, fieldset[disabled][disabled] .has-success .form-control {
+ background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent);
+ background-repeat: repeat-x;
+ background-size: 3px 1px
+}
+
+.has-success .form-control-success.custom-file-control, .has-success .form-control.form-control-success, .is-focused .has-success .form-control-success.custom-file-control, .is-focused .has-success .form-control.form-control-success {
+ background-image: linear-gradient(0deg, #4caf50 2px, rgba(76, 175, 80, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="
+}
+
+.has-success .form-control-warning.custom-file-control, .has-success .form-control.form-control-warning, .is-focused .has-success .form-control-warning.custom-file-control, .is-focused .has-success .form-control.form-control-warning {
+ background-image: linear-gradient(0deg, #4caf50 2px, rgba(76, 175, 80, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"
+}
+
+.has-success .form-control-danger.custom-file-control, .has-success .form-control.form-control-danger, .is-focused .has-success .form-control-danger.custom-file-control, .is-focused .has-success .form-control.form-control-danger {
+ background-image: linear-gradient(0deg, #4caf50 2px, rgba(76, 175, 80, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="
+}
+
+.has-success.is-focused .valid-feedback, .has-success .is-focused .valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: #4caf50
+}
+
+.has-success.is-focused .valid-tooltip, .has-success .is-focused .valid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1;
+ color: #fff;
+ background-color: rgba(76, 175, 80, .8);
+ border-radius: .2rem
+}
+
+.has-success.is-focused .custom-select.is-valid, .has-success .is-focused .custom-select.is-valid, .has-success.is-focused .form-control.is-valid, .has-success .is-focused .form-control.is-valid, .has-success.is-focused .is-valid.custom-file-control, .has-success .is-focused .is-valid.custom-file-control, .was-validated .has-success.is-focused .custom-file-control:valid, .was-validated .has-success .is-focused .custom-file-control:valid, .was-validated .has-success.is-focused .custom-select:valid, .was-validated .has-success .is-focused .custom-select:valid, .was-validated .has-success.is-focused .form-control:valid, .was-validated .has-success .is-focused .form-control:valid {
+ border-color: #4caf50
+}
+
+.has-success.is-focused .custom-select.is-valid:focus, .has-success .is-focused .custom-select.is-valid:focus, .has-success.is-focused .form-control.is-valid:focus, .has-success .is-focused .form-control.is-valid:focus, .has-success.is-focused .is-valid.custom-file-control:focus, .has-success .is-focused .is-valid.custom-file-control:focus, .was-validated .has-success.is-focused .custom-file-control:valid:focus, .was-validated .has-success .is-focused .custom-file-control:valid:focus, .was-validated .has-success.is-focused .custom-select:valid:focus, .was-validated .has-success .is-focused .custom-select:valid:focus, .was-validated .has-success.is-focused .form-control:valid:focus, .was-validated .has-success .is-focused .form-control:valid:focus {
+ border-color: #4caf50;
+ box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .25)
+}
+
+.has-success.is-focused .custom-select.is-valid ~ .valid-feedback, .has-success .is-focused .custom-select.is-valid ~ .valid-feedback, .has-success.is-focused .custom-select.is-valid ~ .valid-tooltip, .has-success .is-focused .custom-select.is-valid ~ .valid-tooltip, .has-success.is-focused .form-control.is-valid ~ .valid-feedback, .has-success .is-focused .form-control.is-valid ~ .valid-feedback, .has-success.is-focused .form-control.is-valid ~ .valid-tooltip, .has-success .is-focused .form-control.is-valid ~ .valid-tooltip, .has-success.is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-success .is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-success.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .has-success .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .has-success.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-success .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-success.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-success.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-success .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-success.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-success.is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-success .is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-success.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .form-control:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-success.is-focused .form-check-input.is-valid ~ .form-check-label, .has-success .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .has-success.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .has-success .is-focused .form-check-input:valid ~ .form-check-label {
+ color: #4caf50
+}
+
+.has-success.is-focused .form-check-input.is-valid ~ .valid-feedback, .has-success .is-focused .form-check-input.is-valid ~ .valid-feedback, .has-success.is-focused .form-check-input.is-valid ~ .valid-tooltip, .has-success .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .has-success.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-success .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-success.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .form-check-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-success.is-focused .custom-control-input.is-valid ~ .custom-control-label, .has-success .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .has-success.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .has-success .is-focused .custom-control-input:valid ~ .custom-control-label {
+ color: #4caf50
+}
+
+.has-success.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .has-success .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .has-success.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .has-success .is-focused .custom-control-input:valid ~ .custom-control-label:before {
+ background-color: #a3d7a5
+}
+
+.has-success.is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-success .is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-success.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .has-success .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .has-success.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-success .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-success.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .custom-control-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-success.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .has-success .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .has-success.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .has-success .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before {
+ background-color: #6ec071
+}
+
+.has-success.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .has-success .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .has-success.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .has-success .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before {
+ box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(76, 175, 80, .25)
+}
+
+.has-success.is-focused .custom-file-input.is-valid ~ .custom-file-label, .has-success .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .has-success.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .has-success .is-focused .custom-file-input:valid ~ .custom-file-label {
+ border-color: #4caf50
+}
+
+.has-success.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .has-success .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .has-success.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .has-success .is-focused .custom-file-input:valid ~ .custom-file-label:before {
+ border-color: inherit
+}
+
+.has-success.is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-success .is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-success.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .has-success .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .has-success.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-success .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-success.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .has-success .is-focused .custom-file-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-success.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .has-success .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .has-success.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .has-success .is-focused .custom-file-input:valid:focus ~ .custom-file-label {
+ box-shadow: 0 0 0 .2rem rgba(76, 175, 80, .25)
+}
+
+.has-success.is-focused .bmd-label-placeholder, .has-success .is-focused .bmd-label-placeholder, .has-success.is-focused [class*=" bmd-label"], .has-success .is-focused [class*=" bmd-label"], .has-success.is-focused [class^=bmd-label], .has-success .is-focused [class^=bmd-label] {
+ color: #4caf50
+}
+
+.has-success.is-focused .custom-file-control, .has-success .is-focused .custom-file-control, .has-success.is-focused .form-control, .has-success .is-focused .form-control {
+ border-color: #4caf50
+}
+
+.has-success.is-focused .bmd-help, .has-success .is-focused .bmd-help {
+ color: rgba(0, 0, 0, .54)
+}
+
+.has-info [class*=" bmd-label"], .has-info [class^=bmd-label] {
+ color: #03a9f4
+}
+
+.has-info .custom-file-control, .has-info .form-control, .is-focused .has-info .custom-file-control, .is-focused .has-info .form-control {
+ background-image: linear-gradient(0deg, #03a9f4 2px, rgba(3, 169, 244, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-info .custom-file-control:invalid, .has-info .form-control:invalid {
+ background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-info .custom-file-control:read-only, .has-info .form-control:read-only {
+ background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-info .custom-file-control:disabled, .has-info .disabled.custom-file-control, .has-info .form-control.disabled, .has-info .form-control:disabled, .has-info .form-control[disabled], .has-info [disabled].custom-file-control, fieldset[disabled][disabled] .has-info .custom-file-control, fieldset[disabled][disabled] .has-info .form-control {
+ background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent);
+ background-repeat: repeat-x;
+ background-size: 3px 1px
+}
+
+.has-info .form-control-success.custom-file-control, .has-info .form-control.form-control-success, .is-focused .has-info .form-control-success.custom-file-control, .is-focused .has-info .form-control.form-control-success {
+ background-image: linear-gradient(0deg, #03a9f4 2px, rgba(3, 169, 244, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="
+}
+
+.has-info .form-control-warning.custom-file-control, .has-info .form-control.form-control-warning, .is-focused .has-info .form-control-warning.custom-file-control, .is-focused .has-info .form-control.form-control-warning {
+ background-image: linear-gradient(0deg, #03a9f4 2px, rgba(3, 169, 244, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"
+}
+
+.has-info .form-control-danger.custom-file-control, .has-info .form-control.form-control-danger, .is-focused .has-info .form-control-danger.custom-file-control, .is-focused .has-info .form-control.form-control-danger {
+ background-image: linear-gradient(0deg, #03a9f4 2px, rgba(3, 169, 244, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="
+}
+
+.has-info.is-focused .valid-feedback, .has-info .is-focused .valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: #03a9f4
+}
+
+.has-info.is-focused .valid-tooltip, .has-info .is-focused .valid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1;
+ color: #fff;
+ background-color: rgba(3, 169, 244, .8);
+ border-radius: .2rem
+}
+
+.has-info.is-focused .custom-select.is-valid, .has-info .is-focused .custom-select.is-valid, .has-info.is-focused .form-control.is-valid, .has-info .is-focused .form-control.is-valid, .has-info.is-focused .is-valid.custom-file-control, .has-info .is-focused .is-valid.custom-file-control, .was-validated .has-info.is-focused .custom-file-control:valid, .was-validated .has-info .is-focused .custom-file-control:valid, .was-validated .has-info.is-focused .custom-select:valid, .was-validated .has-info .is-focused .custom-select:valid, .was-validated .has-info.is-focused .form-control:valid, .was-validated .has-info .is-focused .form-control:valid {
+ border-color: #03a9f4
+}
+
+.has-info.is-focused .custom-select.is-valid:focus, .has-info .is-focused .custom-select.is-valid:focus, .has-info.is-focused .form-control.is-valid:focus, .has-info .is-focused .form-control.is-valid:focus, .has-info.is-focused .is-valid.custom-file-control:focus, .has-info .is-focused .is-valid.custom-file-control:focus, .was-validated .has-info.is-focused .custom-file-control:valid:focus, .was-validated .has-info .is-focused .custom-file-control:valid:focus, .was-validated .has-info.is-focused .custom-select:valid:focus, .was-validated .has-info .is-focused .custom-select:valid:focus, .was-validated .has-info.is-focused .form-control:valid:focus, .was-validated .has-info .is-focused .form-control:valid:focus {
+ border-color: #03a9f4;
+ box-shadow: 0 0 0 .2rem rgba(3, 169, 244, .25)
+}
+
+.has-info.is-focused .custom-select.is-valid ~ .valid-feedback, .has-info .is-focused .custom-select.is-valid ~ .valid-feedback, .has-info.is-focused .custom-select.is-valid ~ .valid-tooltip, .has-info .is-focused .custom-select.is-valid ~ .valid-tooltip, .has-info.is-focused .form-control.is-valid ~ .valid-feedback, .has-info .is-focused .form-control.is-valid ~ .valid-feedback, .has-info.is-focused .form-control.is-valid ~ .valid-tooltip, .has-info .is-focused .form-control.is-valid ~ .valid-tooltip, .has-info.is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-info .is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-info.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .has-info .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .has-info.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-info .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-info.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-info.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-info .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-info.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-info.is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-info .is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-info.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .form-control:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-info.is-focused .form-check-input.is-valid ~ .form-check-label, .has-info .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .has-info.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .has-info .is-focused .form-check-input:valid ~ .form-check-label {
+ color: #03a9f4
+}
+
+.has-info.is-focused .form-check-input.is-valid ~ .valid-feedback, .has-info .is-focused .form-check-input.is-valid ~ .valid-feedback, .has-info.is-focused .form-check-input.is-valid ~ .valid-tooltip, .has-info .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .has-info.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-info .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-info.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .form-check-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-info.is-focused .custom-control-input.is-valid ~ .custom-control-label, .has-info .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .has-info.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .has-info .is-focused .custom-control-input:valid ~ .custom-control-label {
+ color: #03a9f4
+}
+
+.has-info.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .has-info .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .has-info.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .has-info .is-focused .custom-control-input:valid ~ .custom-control-label:before {
+ background-color: #79d4fd
+}
+
+.has-info.is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-info .is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-info.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .has-info .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .has-info.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-info .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-info.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .custom-control-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-info.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .has-info .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .has-info.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .has-info .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before {
+ background-color: #2ebcfc
+}
+
+.has-info.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .has-info .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .has-info.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .has-info .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before {
+ box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(3, 169, 244, .25)
+}
+
+.has-info.is-focused .custom-file-input.is-valid ~ .custom-file-label, .has-info .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .has-info.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .has-info .is-focused .custom-file-input:valid ~ .custom-file-label {
+ border-color: #03a9f4
+}
+
+.has-info.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .has-info .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .has-info.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .has-info .is-focused .custom-file-input:valid ~ .custom-file-label:before {
+ border-color: inherit
+}
+
+.has-info.is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-info .is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-info.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .has-info .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .has-info.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-info .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-info.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .has-info .is-focused .custom-file-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-info.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .has-info .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .has-info.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .has-info .is-focused .custom-file-input:valid:focus ~ .custom-file-label {
+ box-shadow: 0 0 0 .2rem rgba(3, 169, 244, .25)
+}
+
+.has-info.is-focused .bmd-label-placeholder, .has-info .is-focused .bmd-label-placeholder, .has-info.is-focused [class*=" bmd-label"], .has-info .is-focused [class*=" bmd-label"], .has-info.is-focused [class^=bmd-label], .has-info .is-focused [class^=bmd-label] {
+ color: #03a9f4
+}
+
+.has-info.is-focused .custom-file-control, .has-info .is-focused .custom-file-control, .has-info.is-focused .form-control, .has-info .is-focused .form-control {
+ border-color: #03a9f4
+}
+
+.has-info.is-focused .bmd-help, .has-info .is-focused .bmd-help {
+ color: rgba(0, 0, 0, .54)
+}
+
+.has-warning [class*=" bmd-label"], .has-warning [class^=bmd-label] {
+ color: #ff5722
+}
+
+.has-warning .custom-file-control, .has-warning .form-control, .is-focused .has-warning .custom-file-control, .is-focused .has-warning .form-control {
+ background-image: linear-gradient(0deg, #ff5722 2px, rgba(255, 87, 34, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-warning .custom-file-control:invalid, .has-warning .form-control:invalid {
+ background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-warning .custom-file-control:read-only, .has-warning .form-control:read-only {
+ background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-warning .custom-file-control:disabled, .has-warning .disabled.custom-file-control, .has-warning .form-control.disabled, .has-warning .form-control:disabled, .has-warning .form-control[disabled], .has-warning [disabled].custom-file-control, fieldset[disabled][disabled] .has-warning .custom-file-control, fieldset[disabled][disabled] .has-warning .form-control {
+ background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent);
+ background-repeat: repeat-x;
+ background-size: 3px 1px
+}
+
+.has-warning .form-control-success.custom-file-control, .has-warning .form-control.form-control-success, .is-focused .has-warning .form-control-success.custom-file-control, .is-focused .has-warning .form-control.form-control-success {
+ background-image: linear-gradient(0deg, #ff5722 2px, rgba(255, 87, 34, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="
+}
+
+.has-warning .form-control-warning.custom-file-control, .has-warning .form-control.form-control-warning, .is-focused .has-warning .form-control-warning.custom-file-control, .is-focused .has-warning .form-control.form-control-warning {
+ background-image: linear-gradient(0deg, #ff5722 2px, rgba(255, 87, 34, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"
+}
+
+.has-warning .form-control-danger.custom-file-control, .has-warning .form-control.form-control-danger, .is-focused .has-warning .form-control-danger.custom-file-control, .is-focused .has-warning .form-control.form-control-danger {
+ background-image: linear-gradient(0deg, #ff5722 2px, rgba(255, 87, 34, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="
+}
+
+.has-warning.is-focused .valid-feedback, .has-warning .is-focused .valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: #ff5722
+}
+
+.has-warning.is-focused .valid-tooltip, .has-warning .is-focused .valid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1;
+ color: #fff;
+ background-color: rgba(255, 87, 34, .8);
+ border-radius: .2rem
+}
+
+.has-warning.is-focused .custom-select.is-valid, .has-warning .is-focused .custom-select.is-valid, .has-warning.is-focused .form-control.is-valid, .has-warning .is-focused .form-control.is-valid, .has-warning.is-focused .is-valid.custom-file-control, .has-warning .is-focused .is-valid.custom-file-control, .was-validated .has-warning.is-focused .custom-file-control:valid, .was-validated .has-warning .is-focused .custom-file-control:valid, .was-validated .has-warning.is-focused .custom-select:valid, .was-validated .has-warning .is-focused .custom-select:valid, .was-validated .has-warning.is-focused .form-control:valid, .was-validated .has-warning .is-focused .form-control:valid {
+ border-color: #ff5722
+}
+
+.has-warning.is-focused .custom-select.is-valid:focus, .has-warning .is-focused .custom-select.is-valid:focus, .has-warning.is-focused .form-control.is-valid:focus, .has-warning .is-focused .form-control.is-valid:focus, .has-warning.is-focused .is-valid.custom-file-control:focus, .has-warning .is-focused .is-valid.custom-file-control:focus, .was-validated .has-warning.is-focused .custom-file-control:valid:focus, .was-validated .has-warning .is-focused .custom-file-control:valid:focus, .was-validated .has-warning.is-focused .custom-select:valid:focus, .was-validated .has-warning .is-focused .custom-select:valid:focus, .was-validated .has-warning.is-focused .form-control:valid:focus, .was-validated .has-warning .is-focused .form-control:valid:focus {
+ border-color: #ff5722;
+ box-shadow: 0 0 0 .2rem rgba(255, 87, 34, .25)
+}
+
+.has-warning.is-focused .custom-select.is-valid ~ .valid-feedback, .has-warning .is-focused .custom-select.is-valid ~ .valid-feedback, .has-warning.is-focused .custom-select.is-valid ~ .valid-tooltip, .has-warning .is-focused .custom-select.is-valid ~ .valid-tooltip, .has-warning.is-focused .form-control.is-valid ~ .valid-feedback, .has-warning .is-focused .form-control.is-valid ~ .valid-feedback, .has-warning.is-focused .form-control.is-valid ~ .valid-tooltip, .has-warning .is-focused .form-control.is-valid ~ .valid-tooltip, .has-warning.is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-warning .is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-warning.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .has-warning .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .has-warning.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .form-control:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-warning.is-focused .form-check-input.is-valid ~ .form-check-label, .has-warning .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .has-warning.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .has-warning .is-focused .form-check-input:valid ~ .form-check-label {
+ color: #ff5722
+}
+
+.has-warning.is-focused .form-check-input.is-valid ~ .valid-feedback, .has-warning .is-focused .form-check-input.is-valid ~ .valid-feedback, .has-warning.is-focused .form-check-input.is-valid ~ .valid-tooltip, .has-warning .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .form-check-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-warning.is-focused .custom-control-input.is-valid ~ .custom-control-label, .has-warning .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .has-warning.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .has-warning .is-focused .custom-control-input:valid ~ .custom-control-label {
+ color: #ff5722
+}
+
+.has-warning.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .has-warning .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .has-warning.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .has-warning .is-focused .custom-control-input:valid ~ .custom-control-label:before {
+ background-color: #ffb8a2
+}
+
+.has-warning.is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-warning .is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-warning.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .has-warning .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .custom-control-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-warning.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .has-warning .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .has-warning.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .has-warning .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before {
+ background-color: #ff7e55
+}
+
+.has-warning.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .has-warning .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .has-warning.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .has-warning .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before {
+ box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(255, 87, 34, .25)
+}
+
+.has-warning.is-focused .custom-file-input.is-valid ~ .custom-file-label, .has-warning .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .has-warning.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .has-warning .is-focused .custom-file-input:valid ~ .custom-file-label {
+ border-color: #ff5722
+}
+
+.has-warning.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .has-warning .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .has-warning.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .has-warning .is-focused .custom-file-input:valid ~ .custom-file-label:before {
+ border-color: inherit
+}
+
+.has-warning.is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-warning .is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-warning.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .has-warning .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .has-warning.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-warning .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-warning.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .has-warning .is-focused .custom-file-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-warning.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .has-warning .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .has-warning.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .has-warning .is-focused .custom-file-input:valid:focus ~ .custom-file-label {
+ box-shadow: 0 0 0 .2rem rgba(255, 87, 34, .25)
+}
+
+.has-warning.is-focused .bmd-label-placeholder, .has-warning .is-focused .bmd-label-placeholder, .has-warning.is-focused [class*=" bmd-label"], .has-warning .is-focused [class*=" bmd-label"], .has-warning.is-focused [class^=bmd-label], .has-warning .is-focused [class^=bmd-label] {
+ color: #ff5722
+}
+
+.has-warning.is-focused .custom-file-control, .has-warning .is-focused .custom-file-control, .has-warning.is-focused .form-control, .has-warning .is-focused .form-control {
+ border-color: #ff5722
+}
+
+.has-warning.is-focused .bmd-help, .has-warning .is-focused .bmd-help {
+ color: rgba(0, 0, 0, .54)
+}
+
+.has-danger [class*=" bmd-label"], .has-danger [class^=bmd-label] {
+ color: #f44336
+}
+
+.has-danger .custom-file-control, .has-danger .form-control, .is-focused .has-danger .custom-file-control, .is-focused .has-danger .form-control {
+ background-image: linear-gradient(0deg, #f44336 2px, rgba(244, 67, 54, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-danger .custom-file-control:invalid, .has-danger .form-control:invalid {
+ background-image: linear-gradient(0deg, #d50000 2px, rgba(213, 0, 0, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-danger .custom-file-control:read-only, .has-danger .form-control:read-only {
+ background-image: linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0)
+}
+
+.has-danger .custom-file-control:disabled, .has-danger .disabled.custom-file-control, .has-danger .form-control.disabled, .has-danger .form-control:disabled, .has-danger .form-control[disabled], .has-danger [disabled].custom-file-control, fieldset[disabled][disabled] .has-danger .custom-file-control, fieldset[disabled][disabled] .has-danger .form-control {
+ background-image: linear-gradient(90deg, rgba(0, 0, 0, .26) 0, rgba(0, 0, 0, .26) 30%, transparent 0, transparent);
+ background-repeat: repeat-x;
+ background-size: 3px 1px
+}
+
+.has-danger .form-control-success.custom-file-control, .has-danger .form-control.form-control-success, .is-focused .has-danger .form-control-success.custom-file-control, .is-focused .has-danger .form-control.form-control-success {
+ background-image: linear-gradient(0deg, #f44336 2px, rgba(244, 67, 54, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg=="
+}
+
+.has-danger .form-control-warning.custom-file-control, .has-danger .form-control.form-control-warning, .is-focused .has-danger .form-control-warning.custom-file-control, .is-focused .has-danger .form-control.form-control-warning {
+ background-image: linear-gradient(0deg, #f44336 2px, rgba(244, 67, 54, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+"
+}
+
+.has-danger .form-control-danger.custom-file-control, .has-danger .form-control.form-control-danger, .is-focused .has-danger .form-control-danger.custom-file-control, .is-focused .has-danger .form-control.form-control-danger {
+ background-image: linear-gradient(0deg, #f44336 2px, rgba(244, 67, 54, 0) 0), linear-gradient(0deg, rgba(0, 0, 0, .26) 1px, transparent 0), "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4="
+}
+
+.has-danger.is-focused .valid-feedback, .has-danger .is-focused .valid-feedback {
+ display: none;
+ width: 100%;
+ margin-top: .25rem;
+ font-size: 80%;
+ color: #f44336
+}
+
+.has-danger.is-focused .valid-tooltip, .has-danger .is-focused .valid-tooltip {
+ position: absolute;
+ top: 100%;
+ z-index: 5;
+ display: none;
+ max-width: 100%;
+ padding: .5rem;
+ margin-top: .1rem;
+ font-size: .875rem;
+ line-height: 1;
+ color: #fff;
+ background-color: rgba(244, 67, 54, .8);
+ border-radius: .2rem
+}
+
+.has-danger.is-focused .custom-select.is-valid, .has-danger .is-focused .custom-select.is-valid, .has-danger.is-focused .form-control.is-valid, .has-danger .is-focused .form-control.is-valid, .has-danger.is-focused .is-valid.custom-file-control, .has-danger .is-focused .is-valid.custom-file-control, .was-validated .has-danger.is-focused .custom-file-control:valid, .was-validated .has-danger .is-focused .custom-file-control:valid, .was-validated .has-danger.is-focused .custom-select:valid, .was-validated .has-danger .is-focused .custom-select:valid, .was-validated .has-danger.is-focused .form-control:valid, .was-validated .has-danger .is-focused .form-control:valid {
+ border-color: #f44336
+}
+
+.has-danger.is-focused .custom-select.is-valid:focus, .has-danger .is-focused .custom-select.is-valid:focus, .has-danger.is-focused .form-control.is-valid:focus, .has-danger .is-focused .form-control.is-valid:focus, .has-danger.is-focused .is-valid.custom-file-control:focus, .has-danger .is-focused .is-valid.custom-file-control:focus, .was-validated .has-danger.is-focused .custom-file-control:valid:focus, .was-validated .has-danger .is-focused .custom-file-control:valid:focus, .was-validated .has-danger.is-focused .custom-select:valid:focus, .was-validated .has-danger .is-focused .custom-select:valid:focus, .was-validated .has-danger.is-focused .form-control:valid:focus, .was-validated .has-danger .is-focused .form-control:valid:focus {
+ border-color: #f44336;
+ box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .25)
+}
+
+.has-danger.is-focused .custom-select.is-valid ~ .valid-feedback, .has-danger .is-focused .custom-select.is-valid ~ .valid-feedback, .has-danger.is-focused .custom-select.is-valid ~ .valid-tooltip, .has-danger .is-focused .custom-select.is-valid ~ .valid-tooltip, .has-danger.is-focused .form-control.is-valid ~ .valid-feedback, .has-danger .is-focused .form-control.is-valid ~ .valid-feedback, .has-danger.is-focused .form-control.is-valid ~ .valid-tooltip, .has-danger .is-focused .form-control.is-valid ~ .valid-tooltip, .has-danger.is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-danger .is-focused .is-valid.custom-file-control ~ .valid-feedback, .has-danger.is-focused .is-valid.custom-file-control ~ .valid-tooltip, .has-danger .is-focused .is-valid.custom-file-control ~ .valid-tooltip, .was-validated .has-danger.is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .custom-file-control:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .custom-file-control:valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .custom-select:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .custom-select:valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .form-control:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .form-control:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .form-control:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-danger.is-focused .form-check-input.is-valid ~ .form-check-label, .has-danger .is-focused .form-check-input.is-valid ~ .form-check-label, .was-validated .has-danger.is-focused .form-check-input:valid ~ .form-check-label, .was-validated .has-danger .is-focused .form-check-input:valid ~ .form-check-label {
+ color: #f44336
+}
+
+.has-danger.is-focused .form-check-input.is-valid ~ .valid-feedback, .has-danger .is-focused .form-check-input.is-valid ~ .valid-feedback, .has-danger.is-focused .form-check-input.is-valid ~ .valid-tooltip, .has-danger .is-focused .form-check-input.is-valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .form-check-input:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .form-check-input:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .form-check-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-danger.is-focused .custom-control-input.is-valid ~ .custom-control-label, .has-danger .is-focused .custom-control-input.is-valid ~ .custom-control-label, .was-validated .has-danger.is-focused .custom-control-input:valid ~ .custom-control-label, .was-validated .has-danger .is-focused .custom-control-input:valid ~ .custom-control-label {
+ color: #f44336
+}
+
+.has-danger.is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .has-danger .is-focused .custom-control-input.is-valid ~ .custom-control-label:before, .was-validated .has-danger.is-focused .custom-control-input:valid ~ .custom-control-label:before, .was-validated .has-danger .is-focused .custom-control-input:valid ~ .custom-control-label:before {
+ background-color: #fbb4af
+}
+
+.has-danger.is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-danger .is-focused .custom-control-input.is-valid ~ .valid-feedback, .has-danger.is-focused .custom-control-input.is-valid ~ .valid-tooltip, .has-danger .is-focused .custom-control-input.is-valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .custom-control-input:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .custom-control-input:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .custom-control-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-danger.is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .has-danger .is-focused .custom-control-input.is-valid:checked ~ .custom-control-label:before, .was-validated .has-danger.is-focused .custom-control-input:valid:checked ~ .custom-control-label:before, .was-validated .has-danger .is-focused .custom-control-input:valid:checked ~ .custom-control-label:before {
+ background-color: #f77066
+}
+
+.has-danger.is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .has-danger .is-focused .custom-control-input.is-valid:focus ~ .custom-control-label:before, .was-validated .has-danger.is-focused .custom-control-input:valid:focus ~ .custom-control-label:before, .was-validated .has-danger .is-focused .custom-control-input:valid:focus ~ .custom-control-label:before {
+ box-shadow: 0 0 0 1px #fafafa, 0 0 0 .2rem rgba(244, 67, 54, .25)
+}
+
+.has-danger.is-focused .custom-file-input.is-valid ~ .custom-file-label, .has-danger .is-focused .custom-file-input.is-valid ~ .custom-file-label, .was-validated .has-danger.is-focused .custom-file-input:valid ~ .custom-file-label, .was-validated .has-danger .is-focused .custom-file-input:valid ~ .custom-file-label {
+ border-color: #f44336
+}
+
+.has-danger.is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .has-danger .is-focused .custom-file-input.is-valid ~ .custom-file-label:before, .was-validated .has-danger.is-focused .custom-file-input:valid ~ .custom-file-label:before, .was-validated .has-danger .is-focused .custom-file-input:valid ~ .custom-file-label:before {
+ border-color: inherit
+}
+
+.has-danger.is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-danger .is-focused .custom-file-input.is-valid ~ .valid-feedback, .has-danger.is-focused .custom-file-input.is-valid ~ .valid-tooltip, .has-danger .is-focused .custom-file-input.is-valid ~ .valid-tooltip, .was-validated .has-danger.is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-danger .is-focused .custom-file-input:valid ~ .valid-feedback, .was-validated .has-danger.is-focused .custom-file-input:valid ~ .valid-tooltip, .was-validated .has-danger .is-focused .custom-file-input:valid ~ .valid-tooltip {
+ display: block
+}
+
+.has-danger.is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .has-danger .is-focused .custom-file-input.is-valid:focus ~ .custom-file-label, .was-validated .has-danger.is-focused .custom-file-input:valid:focus ~ .custom-file-label, .was-validated .has-danger .is-focused .custom-file-input:valid:focus ~ .custom-file-label {
+ box-shadow: 0 0 0 .2rem rgba(244, 67, 54, .25)
+}
+
+.has-danger.is-focused .bmd-label-placeholder, .has-danger .is-focused .bmd-label-placeholder, .has-danger.is-focused [class*=" bmd-label"], .has-danger .is-focused [class*=" bmd-label"], .has-danger.is-focused [class^=bmd-label], .has-danger .is-focused [class^=bmd-label] {
+ color: #f44336
+}
+
+.has-danger.is-focused .custom-file-control, .has-danger .is-focused .custom-file-control, .has-danger.is-focused .form-control, .has-danger .is-focused .form-control {
+ border-color: #f44336
+}
+
+.has-danger.is-focused .bmd-help, .has-danger .is-focused .bmd-help {
+ color: rgba(0, 0, 0, .54)
+}
+
+.bmd-form-group {
+ position: relative;
+ padding-top: 1.75rem
+}
+
+.bmd-form-group [class*=" bmd-label"], .bmd-form-group [class^=bmd-label] {
+ position: absolute;
+ pointer-events: none;
+ transition: all .3s ease
+}
+
+.bmd-form-group [class*=" bmd-label"].bmd-label-floating, .bmd-form-group [class^=bmd-label].bmd-label-floating {
+ will-change: left, top, contents
+}
+
+.bmd-form-group.is-filled .bmd-label-placeholder {
+ display: none
+}
+
+.bmd-form-group.bmd-collapse-inline {
+ display: flex;
+ align-items: center;
+ padding: 0;
+ min-height: 2.1em
+}
+
+.bmd-form-group.bmd-collapse-inline .collapse {
+ flex: 1;
+ display: none
+}
+
+.bmd-form-group.bmd-collapse-inline .collapse.show {
+ max-width: 1200px
+}
+
+.bmd-form-group.bmd-collapse-inline .collapse.show, .bmd-form-group.bmd-collapse-inline .collapsing, .bmd-form-group.bmd-collapse-inline .width:not(.collapse) {
+ display: block
+}
+
+.bmd-form-group.bmd-collapse-inline .collapsing {
+ transition-duration: .2s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1)
+}
+
+.bmd-form-group .custom-file-control, .bmd-form-group .form-control, .bmd-form-group input::placeholder, .bmd-form-group label {
+ line-height: 1
+}
+
+.bmd-form-group .checkbox label, .bmd-form-group .radio label, .bmd-form-group .switch label, .bmd-form-group label.checkbox-inline, .bmd-form-group label.radio-inline {
+ line-height: 1.5
+}
+
+.bmd-form-group input::placeholder {
+ font-size: 1rem
+}
+
+.bmd-form-group .checkbox label, .bmd-form-group .radio label, .bmd-form-group label {
+ font-size: 1rem
+}
+
+.bmd-form-group .bmd-label-floating, .bmd-form-group .bmd-label-placeholder {
+ top: 2.1875rem
+}
+
+.bmd-form-group .bmd-label-static, .bmd-form-group.is-filled .bmd-label-floating, .bmd-form-group .is-filled .bmd-label-floating, .bmd-form-group.is-focused .bmd-label-floating, .bmd-form-group .is-focused .bmd-label-floating {
+ top: 1rem;
+ left: 0;
+ font-size: .75rem
+}
+
+.bmd-form-group .bmd-help {
+ margin-top: 0;
+ font-size: .75rem
+}
+
+.bmd-form-group .form-control-danger.custom-file-control, .bmd-form-group .form-control-success.custom-file-control, .bmd-form-group .form-control-warning.custom-file-control, .bmd-form-group .form-control.form-control-danger, .bmd-form-group .form-control.form-control-success, .bmd-form-group .form-control.form-control-warning {
+ background-size: 0 100%, 100% 100%, .9375rem .9375rem
+}
+
+.bmd-form-group .form-control-danger.custom-file-control, .bmd-form-group .form-control-danger.custom-file-control:focus, .bmd-form-group .form-control-success.custom-file-control, .bmd-form-group .form-control-success.custom-file-control:focus, .bmd-form-group .form-control-warning.custom-file-control, .bmd-form-group .form-control-warning.custom-file-control:focus, .bmd-form-group .form-control.form-control-danger, .bmd-form-group .form-control.form-control-danger:focus, .bmd-form-group .form-control.form-control-success, .bmd-form-group .form-control.form-control-success:focus, .bmd-form-group .form-control.form-control-warning, .bmd-form-group .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-warning {
+ padding-right: 0;
+ background-repeat: no-repeat, no-repeat;
+ background-position: bottom, 50% calc(100% - 1px), center right .46875rem
+}
+
+.bmd-form-group .form-control-danger.custom-file-control:focus, .bmd-form-group .form-control-success.custom-file-control:focus, .bmd-form-group .form-control-warning.custom-file-control:focus, .bmd-form-group .form-control.form-control-danger:focus, .bmd-form-group .form-control.form-control-success:focus, .bmd-form-group .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group .form-control.form-control-warning {
+ background-size: 100% 100%, 100% 100%, .9375rem .9375rem
+}
+
+.bmd-form-group.bmd-form-group-sm {
+ padding-top: 1.40625rem
+}
+
+.bmd-form-group.bmd-form-group-sm .custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control, .bmd-form-group.bmd-form-group-sm input::placeholder, .bmd-form-group.bmd-form-group-sm label {
+ line-height: 1
+}
+
+.bmd-form-group.bmd-form-group-sm .checkbox label, .bmd-form-group.bmd-form-group-sm .radio label, .bmd-form-group.bmd-form-group-sm .switch label, .bmd-form-group.bmd-form-group-sm label.checkbox-inline, .bmd-form-group.bmd-form-group-sm label.radio-inline {
+ line-height: 1.5
+}
+
+.bmd-form-group.bmd-form-group-sm input::placeholder {
+ font-size: .875rem
+}
+
+.bmd-form-group.bmd-form-group-sm .checkbox label, .bmd-form-group.bmd-form-group-sm .radio label, .bmd-form-group.bmd-form-group-sm label {
+ font-size: .875rem
+}
+
+.bmd-form-group.bmd-form-group-sm .bmd-label-floating, .bmd-form-group.bmd-form-group-sm .bmd-label-placeholder {
+ top: 1.65625rem
+}
+
+.bmd-form-group.bmd-form-group-sm .bmd-label-static, .bmd-form-group.bmd-form-group-sm.is-filled .bmd-label-floating, .bmd-form-group.bmd-form-group-sm .is-filled .bmd-label-floating, .bmd-form-group.bmd-form-group-sm.is-focused .bmd-label-floating, .bmd-form-group.bmd-form-group-sm .is-focused .bmd-label-floating {
+ top: .75rem;
+ left: 0;
+ font-size: .65625rem
+}
+
+.bmd-form-group.bmd-form-group-sm .bmd-help {
+ margin-top: 0;
+ font-size: .65625rem
+}
+
+.bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger, .bmd-form-group.bmd-form-group-sm .form-control.form-control-success, .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning {
+ background-size: 0 100%, 100% 100%, .6875rem .6875rem
+}
+
+.bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control, .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger, .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-success, .bmd-form-group.bmd-form-group-sm .form-control.form-control-success:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning, .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning {
+ padding-right: 0;
+ background-repeat: no-repeat, no-repeat;
+ background-position: bottom, 50% calc(100% - 1px), center right .34375rem
+}
+
+.bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-success:focus, .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-sm .form-control.form-control-warning {
+ background-size: 100% 100%, 100% 100%, .6875rem .6875rem
+}
+
+.bmd-form-group.bmd-form-group-lg {
+ padding-top: 1.9375rem
+}
+
+.bmd-form-group.bmd-form-group-lg .custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control, .bmd-form-group.bmd-form-group-lg input::placeholder, .bmd-form-group.bmd-form-group-lg label {
+ line-height: 1
+}
+
+.bmd-form-group.bmd-form-group-lg .checkbox label, .bmd-form-group.bmd-form-group-lg .radio label, .bmd-form-group.bmd-form-group-lg .switch label, .bmd-form-group.bmd-form-group-lg label.checkbox-inline, .bmd-form-group.bmd-form-group-lg label.radio-inline {
+ line-height: 1.5
+}
+
+.bmd-form-group.bmd-form-group-lg input::placeholder {
+ font-size: 1.25rem
+}
+
+.bmd-form-group.bmd-form-group-lg .checkbox label, .bmd-form-group.bmd-form-group-lg .radio label, .bmd-form-group.bmd-form-group-lg label {
+ font-size: 1.25rem
+}
+
+.bmd-form-group.bmd-form-group-lg .bmd-label-floating, .bmd-form-group.bmd-form-group-lg .bmd-label-placeholder {
+ top: 2.5rem
+}
+
+.bmd-form-group.bmd-form-group-lg .bmd-label-static, .bmd-form-group.bmd-form-group-lg.is-filled .bmd-label-floating, .bmd-form-group.bmd-form-group-lg .is-filled .bmd-label-floating, .bmd-form-group.bmd-form-group-lg.is-focused .bmd-label-floating, .bmd-form-group.bmd-form-group-lg .is-focused .bmd-label-floating {
+ top: 1rem;
+ left: 0;
+ font-size: .9375rem
+}
+
+.bmd-form-group.bmd-form-group-lg .bmd-help {
+ margin-top: 0;
+ font-size: .9375rem
+}
+
+.bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger, .bmd-form-group.bmd-form-group-lg .form-control.form-control-success, .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning {
+ background-size: 0 100%, 100% 100%, 1.1875rem 1.1875rem
+}
+
+.bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control, .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger, .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-success, .bmd-form-group.bmd-form-group-lg .form-control.form-control-success:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning, .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning {
+ padding-right: 0;
+ background-repeat: no-repeat, no-repeat;
+ background-position: bottom, 50% calc(100% - 1px), center right .59375rem
+}
+
+.bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-success:focus, .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning:focus, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-danger.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-success.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control-warning.custom-file-control, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-danger, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-success, .bmd-form-group.is-focused .bmd-form-group.bmd-form-group-lg .form-control.form-control-warning {
+ background-size: 100% 100%, 100% 100%, 1.1875rem 1.1875rem
+}
+
+.custom-file-control, .form-control, input::placeholder, label {
+ line-height: 1
+}
+
+.checkbox label, .radio label, .switch label, label.checkbox-inline, label.radio-inline {
+ line-height: 1.5
+}
+
+input::placeholder {
+ font-size: 1rem
+}
+
+.checkbox label, .radio label, label {
+ font-size: 1rem
+}
+
+.bmd-label-floating, .bmd-label-placeholder {
+ top: 2.1875rem
+}
+
+.bmd-label-static, .is-filled .bmd-label-floating, .is-focused .bmd-label-floating {
+ top: 1rem;
+ left: 0;
+ font-size: .75rem
+}
+
+.bmd-help {
+ margin-top: 0;
+ font-size: .75rem
+}
+
+.form-control-danger.custom-file-control, .form-control-success.custom-file-control, .form-control-warning.custom-file-control, .form-control.form-control-danger, .form-control.form-control-success, .form-control.form-control-warning {
+ background-size: 0 100%, 100% 100%, .9375rem .9375rem
+}
+
+.bmd-form-group.is-focused .form-control-danger.custom-file-control, .bmd-form-group.is-focused .form-control-success.custom-file-control, .bmd-form-group.is-focused .form-control-warning.custom-file-control, .bmd-form-group.is-focused .form-control.form-control-danger, .bmd-form-group.is-focused .form-control.form-control-success, .bmd-form-group.is-focused .form-control.form-control-warning, .form-control-danger.custom-file-control, .form-control-danger.custom-file-control:focus, .form-control-success.custom-file-control, .form-control-success.custom-file-control:focus, .form-control-warning.custom-file-control, .form-control-warning.custom-file-control:focus, .form-control.form-control-danger, .form-control.form-control-danger:focus, .form-control.form-control-success, .form-control.form-control-success:focus, .form-control.form-control-warning, .form-control.form-control-warning:focus {
+ padding-right: 0;
+ background-repeat: no-repeat, no-repeat;
+ background-position: bottom, 50% calc(100% - 1px), center right .46875rem
+}
+
+.bmd-form-group.is-focused .form-control-danger.custom-file-control, .bmd-form-group.is-focused .form-control-success.custom-file-control, .bmd-form-group.is-focused .form-control-warning.custom-file-control, .bmd-form-group.is-focused .form-control.form-control-danger, .bmd-form-group.is-focused .form-control.form-control-success, .bmd-form-group.is-focused .form-control.form-control-warning, .form-control-danger.custom-file-control:focus, .form-control-success.custom-file-control:focus, .form-control-warning.custom-file-control:focus, .form-control.form-control-danger:focus, .form-control.form-control-success:focus, .form-control.form-control-warning:focus {
+ background-size: 100% 100%, 100% 100%, .9375rem .9375rem
+}
+
+select, select.custom-file-control, select.form-control {
+ -moz-appearance: none;
+ -webkit-appearance: none
+}
+
+@media (min-width: 576px) {
+ .form-inline .input-group {
+ display: inline-flex;
+ align-items: center
+ }
+}
+
+.input-group .input-group-addon {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: transparent;
+ border-color: transparent
+}
+
+.input-group .input-group-addon + input, .input-group input + .input-group-addon {
+ margin-left: .75rem
+}
+
+.list-group {
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ padding: .5rem 0
+}
+
+.list-group.bmd-list-group-sm {
+ padding: .25rem 0
+}
+
+.list-group.bmd-list-group-sm .list-group-item {
+ padding: .5rem 1rem
+}
+
+.bmd-list-group-col {
+ display: flex;
+ flex-direction: column;
+ min-width: 0
+}
+
+.list-group-item {
+ display: flex;
+ flex-flow: row wrap;
+ align-items: center;
+ padding: 1rem;
+ line-height: 1
+}
+
+.list-group-item .list-group-item-text {
+ min-width: 0;
+ max-height: 2.188rem;
+ overflow: hidden;
+ text-overflow: ellipsis
+}
+
+.list-group-item :first-child {
+ margin-right: 2rem
+}
+
+.list-group-item > * ~ .label:last-child, .list-group-item > * ~ .material-icons:last-child, .list-group-item > .pull-lg-right, .list-group-item > .pull-md-right, .list-group-item > .pull-sm-right, .list-group-item > .pull-xl-right, .list-group-item > .pull-xs-right {
+ margin-right: 0;
+ margin-left: auto
+}
+
+.list-group-item .material-icons.pull-lg-right, .list-group-item .material-icons.pull-md-right, .list-group-item .material-icons.pull-sm-right, .list-group-item .material-icons.pull-xl-right, .list-group-item .material-icons.pull-xs-right, .list-group-item .material-icons ~ .material-icons:last-child {
+ padding-left: 1rem
+}
+
+.list-group-item .list-group-item-text {
+ font-size: .875rem;
+ color: rgba(0, 0, 0, .54)
+}
+
+.table-inverse {
+ color: hsla(0, 0%, 100%, .84)
+}
+
+.table thead th {
+ font-size: .95rem;
+ font-weight: 500;
+ color: rgba(0, 0, 0, .54);
+ border-top-width: 0;
+ border-bottom-width: 1px
+}
+
+.table-inverse thead th, thead.thead-inverse th {
+ color: hsla(0, 0%, 100%, .54)
+}
+
+.table-inverse td, .table-inverse th, .table-inverse thead th {
+ border-color: hsla(0, 0%, 100%, .06)
+}
+
+.nav-link {
+ text-transform: uppercase
+}
+
+.navbar-nav .nav-link {
+ padding: .5321rem;
+ font-size: .875rem;
+ font-weight: 400
+}
+
+.nav-pills, .nav-tabs {
+ border: 0
+}
+
+.nav-pills .nav-link, .nav-tabs .nav-link {
+ padding: 1.4286em .8575em;
+ font-size: .875rem;
+ font-weight: 500;
+ border: 0
+}
+
+.nav-pills .nav-item.show .nav-link, .nav-pills .nav-link.active, .nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active {
+ background-color: transparent;
+ color: inherit
+}
+
+.nav-tabs .nav-link {
+ border-bottom: .214rem solid transparent;
+ color: rgba(0, 0, 0, .54)
+}
+
+.nav-tabs .nav-link.active {
+ color: rgba(0, 0, 0, .87)
+}
+
+.nav-tabs .nav-link.active, .nav-tabs .nav-link.active:focus, .nav-tabs .nav-link.active:hover {
+ border-color: theme-color(primary)
+}
+
+.nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:focus, .nav-tabs .nav-link.disabled:hover {
+ color: rgba(0, 0, 0, .26)
+}
+
+.nav-tabs.bg-primary .nav-link {
+ color: #fff
+}
+
+.nav-tabs.bg-primary .nav-link.active {
+ color: #fff;
+ border-color: #fff
+}
+
+.nav-tabs.bg-primary .nav-link.active:focus, .nav-tabs.bg-primary .nav-link.active:hover {
+ border-color: #fff
+}
+
+.nav-tabs.bg-primary .nav-link.disabled, .nav-tabs.bg-primary .nav-link.disabled:focus, .nav-tabs.bg-primary .nav-link.disabled:hover {
+ color: hsla(0, 0%, 100%, .84)
+}
+
+.nav-tabs.bg-dark .nav-link {
+ color: #fff
+}
+
+.nav-tabs.bg-dark .nav-link.active {
+ color: #fff;
+ border-color: #fff
+}
+
+.nav-tabs.bg-dark .nav-link.active:focus, .nav-tabs.bg-dark .nav-link.active:hover {
+ border-color: #fff
+}
+
+.nav-tabs.bg-dark .nav-link.disabled, .nav-tabs.bg-dark .nav-link.disabled:focus, .nav-tabs.bg-dark .nav-link.disabled:hover {
+ color: hsla(0, 0%, 100%, .84)
+}
+
+.nav .nav-item {
+ position: relative
+}
+
+.navbar {
+ z-index: 1;
+ border: 0;
+ border-radius: 0;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12)
+}
+
+.navbar .navbar-brand {
+ position: relative
+}
+
+.navbar > .container {
+ flex: 1
+}
+
+.navbar-dark .custom-file-control, .navbar-dark .form-control {
+ color: #fff
+}
+
+.navbar-dark .custom-file-control::placeholder, .navbar-dark .form-control::placeholder {
+ color: hsla(0, 0%, 100%, .5)
+}
+
+.alert {
+ border: 0;
+ border-radius: 0
+}
+
+.progress {
+ height: 4px;
+ background: #c8c8c8;
+ border-radius: 0
+}
+
+.progress, .progress .progress-bar {
+ box-shadow: none
+}
+
+.page-item:first-child .page-link {
+ border-top-left-radius: 4em;
+ border-bottom-left-radius: 4em
+}
+
+.page-item:last-child .page-link {
+ border-top-right-radius: 4em;
+ border-bottom-right-radius: 4em;
+ margin-right: 0
+}
+
+.page-item:first-child .page-link, .page-item:last-child .page-link {
+ display: flex;
+ justify-content: center;
+ padding-right: 0;
+ padding-left: 0
+}
+
+.page-item:first-child .page-link > .material-icons, .page-item:last-child .page-link > .material-icons {
+ font-size: 1.5em
+}
+
+.page-link {
+ min-width: 2.6em;
+ margin-right: .5em;
+ text-align: center;
+ border-radius: 4em
+}
+
+.page-link:focus, .page-link:hover {
+ text-decoration: none
+}
+
+.pagination-lg .page-link {
+ min-width: 2.8em;
+ padding: .75rem 0;
+ font-size: 1.25rem;
+ line-height: 1.5
+}
+
+.pagination-lg .page-item:first-child .page-link {
+ border-top-left-radius: 4em;
+ border-bottom-left-radius: 4em
+}
+
+.pagination-lg .page-item:last-child .page-link {
+ border-top-right-radius: 4em;
+ border-bottom-right-radius: 4em
+}
+
+.pagination-sm .page-link {
+ min-width: 2.2em;
+ padding: .25rem 0;
+ font-size: .875rem;
+ line-height: 1.5
+}
+
+.pagination-sm .page-item:first-child .page-link {
+ border-top-left-radius: 4em;
+ border-bottom-left-radius: 4em
+}
+
+.pagination-sm .page-item:last-child .page-link {
+ border-top-right-radius: 4em;
+ border-bottom-right-radius: 4em
+}
+
+h6 {
+ font-weight: 500
+}
+
+.tooltip-arrow {
+ display: none
+}
+
+.card {
+ border: 0;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12)
+}
+
+.card .card-header {
+ padding: 1rem;
+ background-color: transparent
+}
+
+.card .card-block {
+ padding: 1.5rem 1rem 1rem
+}
+
+.card h1.card-title, .card h2.card-title, .card h3.card-title, .card h4.card-title, .card h5.card-title, .card h6.card-title {
+ font-size: 1.5rem;
+ font-weight: 300
+}
+
+.card .bmd-card-actions, .card it may be necessary .card-footer {
+ padding: .5rem
+}
+
+.card.bmd-card-raised {
+ box-shadow: 0 8px 10px 1px rgba(0, 0, 0, .14), 0 3px 14px 2px rgba(0, 0, 0, .12), 0 5px 5px -3px rgba(0, 0, 0, .2)
+}
+
+@media (min-width: 992px) {
+ .card.bmd-card-flat {
+ box-shadow: none
+ }
+}
+
+.modal-content {
+ border: 0;
+ border-radius: .125rem
+}
+
+.modal-content .modal-header {
+ padding: 24px 24px 0;
+ border-bottom: 0
+}
+
+.modal-content .modal-body {
+ padding: 20px 24px 24px
+}
+
+.modal-content .modal-footer {
+ padding: 8px 8px 8px 24px;
+ border-top: 0
+}
+
+.modal-content .modal-footer .btn, .modal-content .modal-footer .custom-file-control:before {
+ margin: 0
+}
+
+.modal-content .modal-footer .btn + .btn, .modal-content .modal-footer .btn + .custom-file-control:before, .modal-content .modal-footer .custom-file-control:before + .btn, .modal-content .modal-footer .custom-file-control:before + .custom-file-control:before {
+ margin-left: 8px
+}
+
+.dropdown-menu {
+ display: none;
+ padding: .25rem 0;
+ border: 0;
+ opacity: 0;
+ transform: scale(0);
+ transform-origin: 0 0;
+ will-change: transform, opacity;
+ transition: transform .3s cubic-bezier(.4, 0, .2, 1), opacity .2s cubic-bezier(.4, 0, .2, 1)
+}
+
+@media (min-width: 768px) {
+ .dropdown-menu {
+ padding: .5rem 0
+ }
+}
+
+.dropdown-menu.showing {
+ animation-name: d;
+ animation-duration: .3s;
+ animation-fill-mode: forwards;
+ animation-timing-function: cubic-bezier(.4, 0, .2, 1)
+}
+
+.dropdown-menu.show, .open > .dropdown-menu {
+ display: block;
+ opacity: 1;
+ transform: scale(1)
+}
+
+.dropdown-menu.hiding {
+ display: block;
+ opacity: 0;
+ transform: scale(0)
+}
+
+.dropdown-menu.dropdown-menu-left, .dropdown-menu[x-placement=bottom-start] {
+ transform-origin: 0 0
+}
+
+.dropdown-menu.dropdown-menu-right, .dropdown-menu[x-placement=bottom-end] {
+ transform-origin: 100% 0
+}
+
+.dropdown-menu[x-placement=top-start] {
+ transform-origin: 0 100%
+}
+
+.dropdown-menu[x-placement=top-end] {
+ transform-origin: 100% 100%
+}
+
+.dropdown-menu .dropdown-item {
+ position: relative;
+ display: flex;
+ flex-flow: row wrap;
+ align-items: center;
+ min-width: 7rem;
+ max-width: 17.5rem;
+ min-height: 3rem;
+ padding: .8rem 1rem;
+ overflow: hidden;
+ line-height: 1;
+ text-overflow: ellipsis;
+ word-wrap: break-word
+}
+
+.dropdown-menu .dropdown-item.active, .dropdown-menu .dropdown-item:active {
+ background-color: inherit;
+ color: inherit
+}
+
+@media (min-width: 768px) {
+ .dropdown-menu .dropdown-item {
+ padding-right: 1.5rem;
+ padding-left: 1.5rem
+ }
+}
+
+.dropdown-toggle.bmd-btn-fab:after, .dropdown-toggle.bmd-btn-icon:after {
+ display: none
+}
+
+.dropdown-toggle.bmd-btn-fab ~ .dropdown-menu.dropdown-menu-top-left, .dropdown-toggle.bmd-btn-fab ~ .dropdown-menu.dropdown-menu-top-right, .dropdown-toggle.bmd-btn-icon ~ .dropdown-menu.dropdown-menu-top-left, .dropdown-toggle.bmd-btn-icon ~ .dropdown-menu.dropdown-menu-top-right {
+ bottom: 2rem
+}
+
+.dropdown-toggle.bmd-btn-fab-sm ~ .dropdown-menu.dropdown-menu-top-left, .dropdown-toggle.bmd-btn-fab-sm ~ .dropdown-menu.dropdown-menu-top-right {
+ bottom: 2.5rem
+}
+
+.dropdown-toggle.bmd-btn-icon ~ .dropdown-menu {
+ margin: 0
+}
+
+.show .dropdown-toggle.btn, .show .dropdown-toggle.btn-danger, .show .dropdown-toggle.btn-info, .show .dropdown-toggle.btn-secondary, .show .dropdown-toggle.btn-success, .show .dropdown-toggle.btn-warning, .show .dropdown-toggle.custom-file-control:before {
+ background-color: transparent
+}
+
+@keyframes d {
+ 0% {
+ opacity: 0;
+ transform: scale(0)
+ }
+ to {
+ opacity: 1;
+ transform: scale(1)
+ }
+}
+
+.bmd-layout-drawer {
+ position: absolute;
+ z-index: 5;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ flex-wrap: nowrap;
+ max-height: 100%;
+ overflow: visible;
+ overflow-y: auto;
+ font-size: .875rem;
+ background: #fff;
+ transition: transform;
+ will-change: transform;
+ transform-style: preserve-3d;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .2), 0 1px 5px 0 rgba(0, 0, 0, .12);
+ transition-duration: .2s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1)
+}
+
+.bmd-layout-drawer > * {
+ flex-shrink: 0
+}
+
+.bmd-layout-drawer > header {
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-end;
+ padding: 1rem
+}
+
+.bmd-layout-drawer > header .navbar-brand {
+ padding-left: 1.5rem;
+ font-size: 1.25rem
+}
+
+.bmd-layout-drawer > .list-group {
+ padding-top: 1rem
+}
+
+.bmd-layout-drawer > .list-group .list-group-item {
+ padding-right: 2.5rem;
+ padding-left: 2.5rem;
+ font-size: .8125rem;
+ font-weight: 500
+}
+
+.bmd-drawer-f-l > .bmd-layout-drawer {
+ top: 0;
+ left: 0;
+ width: 240px;
+ height: 100%;
+ transform: translateX(-250px)
+}
+
+.bmd-drawer-f-l > .bmd-layout-content, .bmd-drawer-f-l > .bmd-layout-header {
+ margin-left: 0
+}
+
+.bmd-drawer-f-r > .bmd-layout-drawer {
+ top: 0;
+ right: 0;
+ width: 240px;
+ height: 100%;
+ transform: translateX(250px)
+}
+
+.bmd-drawer-f-r > .bmd-layout-content, .bmd-drawer-f-r > .bmd-layout-header {
+ margin-right: 0
+}
+
+.bmd-drawer-f-t > .bmd-layout-drawer {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100px;
+ transform: translateY(-110px)
+}
+
+.bmd-drawer-f-t > .bmd-layout-content {
+ margin-top: 0
+}
+
+.bmd-drawer-f-b > .bmd-layout-drawer {
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100px;
+ transform: translateY(110px)
+}
+
+.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 0
+}
+
+:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-l > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-left: 240px
+}
+
+:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-l > .bmd-layout-drawer {
+ transform: translateX(0)
+}
+
+:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-l > .bmd-layout-content {
+ margin-left: 240px
+}
+
+:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-r > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-right: 240px
+}
+
+:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-r > .bmd-layout-drawer {
+ transform: translateX(0)
+}
+
+:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-r > .bmd-layout-content {
+ margin-right: 240px
+}
+
+:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 100px
+}
+
+:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-t > .bmd-layout-drawer {
+ transform: translateY(0)
+}
+
+:not(.bmd-drawer-out).bmd-drawer-in.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 100px
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-l > .bmd-layout-header {
+ width: 100%;
+ margin-left: 0
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-r > .bmd-layout-header {
+ width: 100%;
+ margin-right: 0
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay > .bmd-layout-backdrop .in {
+ visibility: visible;
+ background-color: rgba(0, 0, 0, .5)
+}
+
+@supports (pointer-events:auto) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay > .bmd-layout-backdrop.in {
+ pointer-events: auto;
+ opacity: 1
+ }
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 0
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay.bmd-drawer-overlay.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 0
+}
+
+@media (min-width: 576px) {
+ :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-l > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-left: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-l > .bmd-layout-drawer {
+ transform: translateX(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-l > .bmd-layout-content {
+ margin-left: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-r > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-right: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-r > .bmd-layout-drawer {
+ transform: translateX(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-r > .bmd-layout-content {
+ margin-right: 240px
+ }
+}
+
+@media (min-width: 576px) {
+ :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 100px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-t > .bmd-layout-drawer {
+ transform: translateY(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-sm-up.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 100px
+ }
+}
+
+@media (max-width: 767.98px) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down > .bmd-layout-backdrop .in {
+ visibility: visible;
+ background-color: rgba(0, 0, 0, .5)
+ }
+
+ @supports (pointer-events:auto) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down > .bmd-layout-backdrop.in {
+ pointer-events: auto;
+ opacity: 1
+ }
+ }:not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-l > .bmd-layout-header {
+ width: 100%;
+ margin-left: 0
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-r > .bmd-layout-header {
+ width: 100%;
+ margin-right: 0
+ }
+}
+
+@media (max-width: 767.98px) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down > .bmd-layout-backdrop .in {
+ visibility: visible;
+ background-color: rgba(0, 0, 0, .5)
+ }
+
+ @supports (pointer-events:auto) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down > .bmd-layout-backdrop.in {
+ pointer-events: auto;
+ opacity: 1
+ }
+ }:not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 0
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-overlay-sm-down.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 0
+ }
+}
+
+@media (min-width: 768px) {
+ :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-l > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-left: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-l > .bmd-layout-drawer {
+ transform: translateX(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-l > .bmd-layout-content {
+ margin-left: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-r > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-right: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-r > .bmd-layout-drawer {
+ transform: translateX(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-r > .bmd-layout-content {
+ margin-right: 240px
+ }
+}
+
+@media (min-width: 768px) {
+ :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 100px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-t > .bmd-layout-drawer {
+ transform: translateY(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-md-up.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 100px
+ }
+}
+
+@media (max-width: 991.98px) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-md-down > .bmd-layout-backdrop .in {
+ visibility: visible;
+ background-color: rgba(0, 0, 0, .5)
+ }
+
+ @supports (pointer-events:auto) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-md-down > .bmd-layout-backdrop.in {
+ pointer-events: auto;
+ opacity: 1
+ }
+ }:not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-l > .bmd-layout-header {
+ width: 100%;
+ margin-left: 0
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-r > .bmd-layout-header {
+ width: 100%;
+ margin-right: 0
+ }
+}
+
+@media (max-width: 991.98px) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-md-down > .bmd-layout-backdrop .in {
+ visibility: visible;
+ background-color: rgba(0, 0, 0, .5)
+ }
+
+ @supports (pointer-events:auto) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-md-down > .bmd-layout-backdrop.in {
+ pointer-events: auto;
+ opacity: 1
+ }
+ }:not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 0
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-overlay-md-down.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 0
+ }
+}
+
+@media (min-width: 992px) {
+ :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-l > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-left: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-l > .bmd-layout-drawer {
+ transform: translateX(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-l > .bmd-layout-content {
+ margin-left: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-r > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-right: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-r > .bmd-layout-drawer {
+ transform: translateX(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-r > .bmd-layout-content {
+ margin-right: 240px
+ }
+}
+
+@media (min-width: 992px) {
+ :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 100px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-t > .bmd-layout-drawer {
+ transform: translateY(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-lg-up.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 100px
+ }
+}
+
+@media (max-width: 1199.98px) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down > .bmd-layout-backdrop .in {
+ visibility: visible;
+ background-color: rgba(0, 0, 0, .5)
+ }
+
+ @supports (pointer-events:auto) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down > .bmd-layout-backdrop.in {
+ pointer-events: auto;
+ opacity: 1
+ }
+ }:not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-l > .bmd-layout-header {
+ width: 100%;
+ margin-left: 0
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-r > .bmd-layout-header {
+ width: 100%;
+ margin-right: 0
+ }
+}
+
+@media (max-width: 1199.98px) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down > .bmd-layout-backdrop .in {
+ visibility: visible;
+ background-color: rgba(0, 0, 0, .5)
+ }
+
+ @supports (pointer-events:auto) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down > .bmd-layout-backdrop.in {
+ pointer-events: auto;
+ opacity: 1
+ }
+ }:not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 0
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-overlay-lg-down.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 0
+ }
+}
+
+@media (min-width: 1200px) {
+ :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-l > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-left: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-l > .bmd-layout-drawer {
+ transform: translateX(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-l > .bmd-layout-content {
+ margin-left: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-r > .bmd-layout-header {
+ width: calc(100% - 240px);
+ margin-right: 240px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-r > .bmd-layout-drawer {
+ transform: translateX(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-r > .bmd-layout-content {
+ margin-right: 240px
+ }
+}
+
+@media (min-width: 1200px) {
+ :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 100px
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-b > .bmd-layout-drawer, :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-t > .bmd-layout-drawer {
+ transform: translateY(0)
+ }
+
+ :not(.bmd-drawer-out).bmd-drawer-in-xl-up.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 100px
+ }
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-l > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-l > .bmd-layout-header {
+ width: 100%;
+ margin-left: 0
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-r > .bmd-layout-content, :not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-r > .bmd-layout-header {
+ width: 100%;
+ margin-right: 0
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down > .bmd-layout-backdrop .in {
+ visibility: visible;
+ background-color: rgba(0, 0, 0, .5)
+}
+
+@supports (pointer-events:auto) {
+ :not(.bmd-drawer-out).bmd-drawer-overlay-xl-down > .bmd-layout-backdrop.in {
+ pointer-events: auto;
+ opacity: 1
+ }
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-t > .bmd-layout-header {
+ margin-top: 0
+}
+
+:not(.bmd-drawer-out).bmd-drawer-overlay-xl-down.bmd-drawer-f-b > .bmd-layout-content {
+ margin-bottom: 0
+}
+
+.ripple {
+ position: relative
+}
+
+.ripple-container {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ pointer-events: none;
+ border-radius: inherit
+}
+
+.ripple-container .ripple-decorator {
+ position: absolute;
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ pointer-events: none;
+ background-color: rgba(0, 0, 0, .05);
+ border-radius: 100%;
+ opacity: 0;
+ transform: scale(1);
+ transform-origin: 50%
+}
+
+.ripple-container .ripple-decorator.ripple-on {
+ opacity: .1;
+ transition: opacity .15s ease-in 0s, transform .5s cubic-bezier(.4, 0, .2, 1) .1s
+}
+
+.ripple-container .ripple-decorator.ripple-out {
+ opacity: 0;
+ transition: opacity .1s linear 0s !important
+}
+
+#snackbar-container {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ z-index: 99999;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ width: 100%
+}
+
+.snackbar {
+ display: inline-block;
+ min-width: 100%;
+ max-height: 0;
+ opacity: 0;
+ transition: transform .25s cubic-bezier(0, 0, .2, 1), opacity 0s .25s, max-height .25s;
+ transform: translateY(100%)
+}
+
+.snackbar.toast .snackbar-content {
+ border-radius: 10rem
+}
+
+.snackbar-content {
+ display: block;
+ padding: .8rem 1.5rem;
+ margin-top: 3px;
+ font-size: .9rem;
+ color: #fff;
+ background-color: #323232;
+ border-radius: 2px
+}
+
+.snackbar-content .btn, .snackbar-content .custom-file-control:before {
+ margin-bottom: 0
+}
+
+.snackbar.snackbar-opened {
+ max-height: 100px;
+ opacity: 1;
+ transition: transform .25s cubic-bezier(0, 0, .2, 1), opacity 0s 0s, max-height .25s;
+ transform: translateY(0)
+}
+
+@media (min-width: 576px) {
+ #snackbar-container {
+ right: 1rem;
+ left: 1rem;
+ width: 100%
+ }
+
+ .snackbar {
+ min-width: 280px
+ }
+}
diff --git a/applications/launchpad/gui-vue/src/assets/oruga-material.css b/applications/launchpad/gui-vue/src/assets/oruga-material.css
new file mode 100644
index 0000000000..59d3a7d47f
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/assets/oruga-material.css
@@ -0,0 +1,99 @@
+/* Dropdown */
+
+.dropdown-item {
+ position: relative;
+ display: flex;
+ flex-flow: row wrap;
+ align-items: center;
+ min-width: 7rem;
+ min-height: 3rem;
+ padding: 0.8rem 1rem;
+ overflow: hidden;
+ line-height: 1;
+ text-overflow: ellipsis;
+ word-wrap: break-word;
+}
+
+/* Buttons */
+
+.btn {
+ height: 100%;
+}
+
+/* Steps */
+
+.step-marker {
+ border-radius: 50%;
+ height: 50px;
+ width: 50px;
+}
+
+.step-divider {
+ background: #b5b5b5;
+ content: " ";
+ display: block;
+ position: absolute;
+ bottom: 0;
+ left: -50%;
+ width: 100%;
+ height: 5px;
+ top: 35%;
+}
+
+.steps-nav-item-active .step-marker {
+ color: var(--primary);
+ border-color: var(--primary);
+}
+
+.steps-nav-item-active .step-divider {
+ background: none;
+ background: var(--primary);
+}
+
+.steps-nav-item-previous .step-marker {
+ background: var(--primary);
+}
+
+.steps-nav-item-previous .step-divider {
+ background: none;
+ background: var(--primary);
+}
+
+/* Checkbox */
+
+.form-check {
+ width: 1.2rem;
+ height: 1.2rem;
+ border-color: var(--gray);
+ background-color: white;
+}
+
+.form-check-checked {
+ background-color: var(--primary);
+ border-color: var(--primary);
+}
+
+.form-check-label {
+ margin-left: 0.2rem;
+}
+
+.form-check:hover:after {
+ content: "";
+ border-radius: 50%;
+ opacity: 0.2;
+ cursor: pointer;
+ height: 34px;
+ position: absolute;
+ transition: inherit;
+ width: 34px;
+ left: calc(50% - 24px);
+ top: calc(50% - 24px);
+ margin: 7px;
+ background-color: inherit;
+}
+
+/* Field */
+
+.field {
+ margin-top: 0.8rem
+}
diff --git a/applications/launchpad/gui-vue/src/components/Containers.vue b/applications/launchpad/gui-vue/src/components/Containers.vue
new file mode 100644
index 0000000000..fc71d05d1d
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/components/Containers.vue
@@ -0,0 +1,79 @@
+
+
+
Containers
+
Pull images
+
+
+ {{ image.displayName }}
+ {{ image.status }}
+ {{ image.progress }}
+
+
+
Errors
+
{{ errors }}
+
+
+
+
+
+
+
diff --git a/applications/launchpad/gui-vue/src/components/LaunchDocker.vue b/applications/launchpad/gui-vue/src/components/LaunchDocker.vue
new file mode 100644
index 0000000000..28123fa870
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/components/LaunchDocker.vue
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/applications/launchpad/gui-vue/src/components/Logs.vue b/applications/launchpad/gui-vue/src/components/Logs.vue
new file mode 100644
index 0000000000..cda8d23f1c
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/components/Logs.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Start Log server
+
+
+
+
+
+
+
+
diff --git a/applications/launchpad/gui-vue/src/components/Service.vue b/applications/launchpad/gui-vue/src/components/Service.vue
new file mode 100644
index 0000000000..353a606919
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/components/Service.vue
@@ -0,0 +1,115 @@
+
+ {{ displayName }}
+
+
Network: {{ $store.state.settings.tariNetwork }}
+
Workspace: {{ $store.state.settings.rootFolder }}
+
+ Threads: {{ $store.state.settings.numMiningThreads }}
+
+
Start
+
Stop
+
Status: {{ status }}
+
+
+
+
+
Stats
+
+
+
CPU: {{ cpu.toFixed(1) }} %
+
Memory: {{ mem.toFixed(1) }} MB
+
+
+
+
+
Logs
+
+ Add logs
+
+
+
+ {{ index }} {{ logs.get(index) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/applications/launchpad/gui-vue/src/components/Settings.vue b/applications/launchpad/gui-vue/src/components/Settings.vue
new file mode 100644
index 0000000000..90903ec1bb
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/components/Settings.vue
@@ -0,0 +1,83 @@
+
+ Settings
+
+
+
+
+ Weatherwax
+ Igor
+ Mainnet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Monero Node uses authentication?
+
+
+
+
+
+
+
+
+
+
+
+
+ Apply
+
+
+
+
+
+
+
diff --git a/applications/launchpad/gui-vue/src/components/oldLauncher.vue b/applications/launchpad/gui-vue/src/components/oldLauncher.vue
new file mode 100644
index 0000000000..6132ffe745
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/components/oldLauncher.vue
@@ -0,0 +1,79 @@
+
+
+
+
Workspace
+
+
Create workspace
+
Open workspace
+
+ Workspace status: {{ workspaceStatus }}
+
+
+
+
+
Options
+
+
+
+ Please select one
+ Weatherwax
+ Mainnet
+
+ Selected: {{ options.tari_network }}
+
+
+
+
+
+
+
+ Spin up a Base Node
+
+
+
+
+ Spin up a wallet
+
+
+
+
+
+ Spin up a SHA3 miner
+
+
+
+
+
+
+
+ Spin up a Monero Miner
+
+
+
+
+
+
+
Spin up XMRig
+
+Launch!
+
+
\ No newline at end of file
diff --git a/applications/launchpad/gui-vue/src/main.js b/applications/launchpad/gui-vue/src/main.js
new file mode 100644
index 0000000000..d14c9ea48a
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/main.js
@@ -0,0 +1,47 @@
+import { createApp } from 'vue'
+import App from './App.vue'
+import Oruga from '@oruga-ui/oruga-next'
+import '@oruga-ui/oruga-next/dist/oruga-full.css'
+import { library } from '@fortawesome/fontawesome-svg-core'
+import {
+ faCheck,
+ faCheckCircle,
+ faInfoCircle,
+ faExclamationTriangle,
+ faExclamationCircle,
+ faArrowUp,
+ faAngleRight,
+ faAngleLeft,
+ faAngleDown,
+ faEye,
+ faEyeSlash,
+ faCaretDown,
+ faCaretUp
+} from '@fortawesome/free-solid-svg-icons'
+import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
+library.add(
+ faCheck,
+ faCheckCircle,
+ faInfoCircle,
+ faExclamationTriangle,
+ faExclamationCircle,
+ faArrowUp,
+ faAngleRight,
+ faAngleLeft,
+ faAngleDown,
+ faEye,
+ faEyeSlash,
+ faCaretDown,
+ faCaretUp
+);
+
+import store from "./store";
+
+createApp(App)
+ .use(store)
+ .component('vue-fontawesome', FontAwesomeIcon)
+ .use(Oruga, {
+ iconComponent: 'vue-fontawesome',
+ iconPack: 'fas'
+ })
+ .mount('#app')
diff --git a/applications/launchpad/gui-vue/src/store.js b/applications/launchpad/gui-vue/src/store.js
new file mode 100644
index 0000000000..a8c285e7e1
--- /dev/null
+++ b/applications/launchpad/gui-vue/src/store.js
@@ -0,0 +1,207 @@
+import {createStore} from 'vuex'
+import {invoke} from '@tauri-apps/api/tauri'
+import {listen} from "@tauri-apps/api/event";
+import CBuffer from 'CBuffer';
+
+const settings = {
+ walletPassword: "tari",
+ moneroMiningAddress: "",
+ numMiningThreads: 1,
+ tariNetwork: "weatherwax",
+ rootFolder: "/tmp/tari",
+ dockerRegistry: "quay.io/tarilabs",
+ dockerTag: "latest",
+ monerodUrl: "http://monero-stagenet.exan.tech:38081",
+ moneroUseAuth: false,
+ moneroUsername: "",
+ moneroPassword: ""
+};
+
+function handleSystemEvent(commit, payload) {
+ if (payload.Type === "container") {
+ return commit('updateContainerStatus', {status: payload.Action, id: payload.Actor.ID});
+ }
+}
+
+export const store = createStore({
+ state() {
+ return {
+ settings,
+ subscribedToEvents: false,
+ unsubscribeSystemEvents: () => {},
+ containers: {}
+ }
+ },
+ mutations: {
+ setNetwork(state, network) {
+ state.settings.tariNetwork = network;
+ },
+ setRootFolder(state, folder) {
+ state.settings.rootFolder = folder;
+ },
+ setWalletPassword(state, value) {
+ state.settings.walletPassword = value;
+ },
+ setMoneroMiningAddress(state, value) {
+ state.settings.moneroMiningAddress = value;
+ },
+ setNumMiningThreads(state, value) {
+ state.settings.numMiningThreads = value;
+ },
+ setDockerRegistry(state, value) {
+ state.settings.dockerRegistry = value;
+ },
+ setDockerTag(state, value) {
+ state.settings.dockerTag = value;
+ },
+ subscribedToEvents(state) {
+ state.subscribedToEvents = true;
+ },
+ unsubscribeSystemEvents(state, fn) {
+ state.unsubscribeSystemEvents = fn;
+ },
+ newContainer(state, type) {
+ if (state.containers[type]) {
+ console.log(`Container ${type} already exists. Old container to be replaced: `, state.containers[type]);
+ }
+ state.containers[type] = {
+ logs: new CBuffer(1000),
+ stats: {cpu: 0, mem: 0}
+ };
+ console.log(`Added new container ${type}`);
+ },
+
+ startContainer(state, {type, record}) {
+ if (!state.containers[type]) {
+ console.log(`Call newContainer before startContainer for ${type}`);
+ }
+ state.containers[type].id = record.id;
+ state.containers[type].listeners = record.listeners;
+ state.containers[type].logEventsName = record.logEventsName;
+ state.containers[type].statsEventsName = record.statsEventsName;
+ state.containers[type].name = record.name;
+ if (Array.isArray(record.logs)) {
+ for (let message of record.logs) {
+ state.containers[type].logs.push(message);
+ }
+ }
+ },
+ updateContainerStatus(state, update) {
+ if (!update.id) {
+ console.log(`Container status update did not include id`);
+ return;
+ }
+ if (!update.status) {
+ console.log(`Container status update did not include status`);
+ return;
+ }
+ for (let c in state.containers) {
+ let container = state.containers[c];
+ if (container.id === update.id) {
+ container.status = update.status;
+ }
+ }
+ },
+ updateLog(state, update) {
+ if (!update.type) {
+ console.log(`Container status update did not include type`);
+ return;
+ }
+ if (!update.log) {
+ console.log(`Container status update did not include log message`);
+ return;
+ }
+ state.containers[update.type].logs.push(update.log);
+ },
+ updateContainerStats(state, update) {
+ console.log("Event received:", update);
+ if (!update.type) {
+ console.log(`Container status update did not include type`);
+ return;
+ }
+ if (!update.stats) {
+ console.log(`Container status update did not include stats`);
+ return;
+ }
+ let cpu = 0;
+ try {
+ let cs = update.stats.cpu_stats;
+ let pcs = update.stats.precpu_stats;
+ const cpu_delta = cs.cpu_usage.total_usage - pcs.cpu_usage.total_usage;
+ const system_cpu_delta = cs.system_cpu_usage - pcs.system_cpu_usage;
+ const numCpu = cs.online_cpus;
+ cpu = (cpu_delta / system_cpu_delta) * numCpu * 100.0
+ } catch {
+ console.log("Invalid CPU data");
+ }
+ let mem = 0;
+ try {
+ let ms = update.stats.memory_stats;
+ mem = (ms.usage - (ms.stats.cache || 0))/(1024*1024);
+ } catch {
+ console.log("Invalid Memory data");
+ }
+ console.log(`${update.type} CPU ${cpu}, Memory: ${mem}`);
+ state.containers[update.type].stats.cpu = cpu;
+ state.containers[update.type].stats.mem = mem;
+ },
+ },
+ actions: {
+ async startContainer({state, commit}, type) {
+ console.log(`Starting container ${type}`);
+ try {
+ if (!state.subscribedToEvents) {
+ console.log("Subscribing to events");
+ commit('subscribedToEvents');
+ await invoke("events");
+ let eventsUnsubscribe = await listen("tari://docker-system-event", (event) => {
+ console.log("System event: ", event.payload);
+ handleSystemEvent(commit, event.payload);
+ });
+ commit('unsubscribeSystemEvents', eventsUnsubscribe);
+ }
+
+ const settings = Object.assign({}, this.state.settings);
+ console.log(settings);
+ let record = await invoke("start_service", {serviceName: type, settings});
+ console.log(`Got ${JSON.stringify(record)} as response`)
+ // Subscribe to stat update events
+ let logsUnsubscribe = await listen(record.logEventsName, (event) => {
+ console.log("Log event: ", event.payload);
+ commit('updateLog', {type, log: event.payload});
+ });
+ // Subscribe to log events
+ console.log(`Listening on ${record.statsEventsName}`);
+ let statsUnsubscribe = await listen(record.statsEventsName, (event) => {
+ console.log("Stats event: ", event.payload);
+ commit('updateContainerStats', {type, stats: event.payload});
+ });
+ record.listeners = [statsUnsubscribe, logsUnsubscribe];
+ commit('startContainer', {type, record});
+ } catch (err) {
+ console.log("Error starting service: ", err);
+ }
+ },
+ async stopContainer({state}, type) {
+ console.log(`Stopping container ${type}`);
+ try {
+ await invoke("stop_service", {serviceName: type, settings});
+ let service = state.containers[type];
+ if (service.listeners) {
+ if (typeof (service.listeners.statsUnsubscribe) === 'function') {
+ console.log("Detaching stats listener");
+ service.listeners.statsUnsubscribe();
+ }
+ if (typeof (service.listeners.logsUnsubscribe) === 'function') {
+ console.log("Detaching Log listener");
+ service.listeners.logsUnsubscribe();
+ }
+ }
+ } catch (err) {
+ console.log("Error starting service: ", err);
+ }
+ }
+ }
+})
+
+export default store
\ No newline at end of file
diff --git a/applications/launchpad/versions.txt b/applications/launchpad/versions.txt
new file mode 100644
index 0000000000..78eba90686
--- /dev/null
+++ b/applications/launchpad/versions.txt
@@ -0,0 +1,2 @@
+VERSION=1.02
+XMRIG_VERSION=v6.15.3
\ No newline at end of file
diff --git a/applications/tari_app_grpc/src/conversions/new_block_template.rs b/applications/tari_app_grpc/src/conversions/new_block_template.rs
index cc3674a0b3..bc64866a79 100644
--- a/applications/tari_app_grpc/src/conversions/new_block_template.rs
+++ b/applications/tari_app_grpc/src/conversions/new_block_template.rs
@@ -75,9 +75,9 @@ impl TryFrom for NewBlockTemplate {
fn try_from(block: grpc::NewBlockTemplate) -> Result {
let header = block.header.clone().ok_or_else(|| "No header provided".to_string())?;
let total_kernel_offset = BlindingFactor::from_bytes(&header.total_kernel_offset)
- .map_err(|err| format!("total_kernel_offset {}", err.to_string()))?;
+ .map_err(|err| format!("total_kernel_offset {}", err))?;
let total_script_offset = BlindingFactor::from_bytes(&header.total_script_offset)
- .map_err(|err| format!("total_script_offset {}", err.to_string()))?;
+ .map_err(|err| format!("total_script_offset {}", err))?;
let pow = match header.pow {
Some(p) => ProofOfWork::try_from(p)?,
None => return Err("No proof of work provided".into()),
diff --git a/applications/tari_app_grpc/src/conversions/transaction.rs b/applications/tari_app_grpc/src/conversions/transaction.rs
index 43acb579e9..2610ee2c0b 100644
--- a/applications/tari_app_grpc/src/conversions/transaction.rs
+++ b/applications/tari_app_grpc/src/conversions/transaction.rs
@@ -45,14 +45,13 @@ impl TryFrom for Transaction {
fn try_from(source: grpc::Transaction) -> Result {
Ok(Self {
- offset: RistrettoSecretKey::from_bytes(&source.offset)
- .map_err(|e| format!("Offset is not valid:{}", e.to_string()))?,
+ offset: RistrettoSecretKey::from_bytes(&source.offset).map_err(|e| format!("Offset is not valid:{}", e))?,
body: source
.body
.ok_or_else(|| "Transaction body not provided".to_string())?
.try_into()?,
script_offset: RistrettoSecretKey::from_bytes(&source.script_offset)
- .map_err(|e| format!("Script offset is not valid:{}", e.to_string()))?,
+ .map_err(|e| format!("Script offset is not valid:{}", e))?,
})
}
}
diff --git a/applications/tari_app_grpc/src/conversions/transaction_kernel.rs b/applications/tari_app_grpc/src/conversions/transaction_kernel.rs
index 0b92aea1fc..30484da544 100644
--- a/applications/tari_app_grpc/src/conversions/transaction_kernel.rs
+++ b/applications/tari_app_grpc/src/conversions/transaction_kernel.rs
@@ -35,8 +35,8 @@ impl TryFrom for TransactionKernel {
type Error = String;
fn try_from(kernel: grpc::TransactionKernel) -> Result {
- let excess = Commitment::from_bytes(&kernel.excess)
- .map_err(|err| format!("Excess could not be converted:{}", err.to_string()))?;
+ let excess =
+ Commitment::from_bytes(&kernel.excess).map_err(|err| format!("Excess could not be converted:{}", err))?;
let excess_sig = kernel
.excess_sig
diff --git a/applications/tari_app_grpc/src/conversions/transaction_output.rs b/applications/tari_app_grpc/src/conversions/transaction_output.rs
index 47958881b3..2fe7d9da08 100644
--- a/applications/tari_app_grpc/src/conversions/transaction_output.rs
+++ b/applications/tari_app_grpc/src/conversions/transaction_output.rs
@@ -42,8 +42,8 @@ impl TryFrom for TransactionOutput {
.map(TryInto::try_into)
.ok_or_else(|| "Transaction output features not provided".to_string())??;
- let commitment = Commitment::from_bytes(&output.commitment)
- .map_err(|err| format!("Invalid output commitment: {}", err.to_string()))?;
+ let commitment =
+ Commitment::from_bytes(&output.commitment).map_err(|err| format!("Invalid output commitment: {}", err))?;
let sender_offset_public_key = PublicKey::from_bytes(output.sender_offset_public_key.as_bytes())
.map_err(|err| format!("Invalid sender_offset_public_key {:?}", err))?;
diff --git a/applications/tari_app_utilities/Cargo.toml b/applications/tari_app_utilities/Cargo.toml
index 21e6e40ef1..0f3108aa75 100644
--- a/applications/tari_app_utilities/Cargo.toml
+++ b/applications/tari_app_utilities/Cargo.toml
@@ -10,6 +10,7 @@ tari_crypto = { git = "https://github.com/tari-project/tari-crypto.git", branch
tari_common = { path = "../../common" }
tari_common_types = { path = "../../base_layer/common_types" }
tari_p2p = { path = "../../base_layer/p2p", features = ["auto-update"] }
+tari_utilities = "0.3.0"
config = { version = "0.9.3" }
futures = { version = "^0.3.16", default-features = false, features = ["alloc"] }
@@ -26,10 +27,7 @@ strum_macros = "^0.19"
thiserror = "^1.0.26"
tonic = "0.5.2"
-[dependencies.tari_core]
-path = "../../base_layer/core"
-default-features = false
-features = ["transactions"]
+
[build-dependencies]
tari_common = { path = "../../common", features = ["build", "static-application-info"] }
diff --git a/applications/tari_app_utilities/src/identity_management.rs b/applications/tari_app_utilities/src/identity_management.rs
index c82f248dc9..61436a3c90 100644
--- a/applications/tari_app_utilities/src/identity_management.rs
+++ b/applications/tari_app_utilities/src/identity_management.rs
@@ -59,6 +59,7 @@ pub fn setup_node_identity>(
None => Ok(Arc::new(id)),
},
Err(e) => {
+ debug!(target: LOG_TARGET, "Node id not found. {}. Creating new ID", e);
if !create_id {
let prompt = prompt("Node identity does not exist.\nWould you like to to create one (Y/n)?");
if !prompt {
@@ -78,8 +79,6 @@ pub fn setup_node_identity>(
};
}
- debug!(target: LOG_TARGET, "Node id not found. {}. Creating new ID", e);
-
match create_new_identity(&identity_file, public_address.clone(), peer_features) {
Ok(id) => {
info!(
@@ -122,14 +121,14 @@ pub fn load_identity>(path: P) -> Result {
format!(
"The node identity file, {}, could not be read. {}",
path.as_ref().to_str().unwrap_or("?"),
- e.to_string()
+ e
)
})?;
let id = json5::from_str::(&id_str).map_err(|e| {
format!(
"The node identity file, {}, has an error. {}",
path.as_ref().to_str().unwrap_or("?"),
- e.to_string()
+ e
)
})?;
info!(
@@ -217,7 +216,7 @@ pub fn save_as_json, T: Serialize>(path: P, object: &T) -> Result
let json = json5::to_string(object).unwrap();
if let Some(p) = path.as_ref().parent() {
if !p.exists() {
- fs::create_dir_all(p).map_err(|e| format!("Could not save json to data folder. {}", e.to_string()))?;
+ fs::create_dir_all(p).map_err(|e| format!("Could not save json to data folder. {}", e))?;
}
}
let json_with_comment = format!(
@@ -229,7 +228,7 @@ pub fn save_as_json, T: Serialize>(path: P, object: &T) -> Result
format!(
"Error writing json file, {}. {}",
path.as_ref().to_str().unwrap_or(""),
- e.to_string()
+ e
)
})?;
diff --git a/applications/tari_app_utilities/src/lib.rs b/applications/tari_app_utilities/src/lib.rs
index bc79553194..caccbaea68 100644
--- a/applications/tari_app_utilities/src/lib.rs
+++ b/applications/tari_app_utilities/src/lib.rs
@@ -28,3 +28,6 @@ pub mod consts {
// Import the auto-generated const values from the Manifest and Git
include!(concat!(env!("OUT_DIR"), "/consts.rs"));
}
+
+// Alias to common crate
+pub use tari_common as common;
diff --git a/applications/tari_app_utilities/src/utilities.rs b/applications/tari_app_utilities/src/utilities.rs
index b4d3512e2c..d809f1a14e 100644
--- a/applications/tari_app_utilities/src/utilities.rs
+++ b/applications/tari_app_utilities/src/utilities.rs
@@ -35,7 +35,7 @@ use tari_comms::{
types::CommsPublicKey,
utils::multiaddr::multiaddr_to_socketaddr,
};
-use tari_core::tari_utilities::hex::Hex;
+use tari_crypto::tari_utilities::hex::Hex;
use tari_p2p::transport::{TorConfig, TransportType};
use tokio::{runtime, runtime::Runtime};
@@ -164,7 +164,7 @@ pub fn setup_runtime(config: &GlobalConfig) -> Result {
builder
.enable_all()
.build()
- .map_err(|e| format!("There was an error while building the node runtime. {}", e.to_string()))
+ .map_err(|e| format!("There was an error while building the node runtime. {}", e))
}
/// Returns a CommsPublicKey from either a emoji id or a public key
diff --git a/applications/tari_base_node/src/cli.rs b/applications/tari_base_node/src/cli.rs
index 9ea6c85b97..5731619602 100644
--- a/applications/tari_base_node/src/cli.rs
+++ b/applications/tari_base_node/src/cli.rs
@@ -26,7 +26,7 @@ use tari_app_utilities::consts;
/// returns the top or bottom box line of the specified length
fn box_line(length: usize, is_top: bool) -> String {
if length < 2 {
- return format!("");
+ return String::new();
}
if is_top {
format!("{}{}{}", "┌", "─".repeat(length - 2), "┐")
@@ -38,7 +38,7 @@ fn box_line(length: usize, is_top: bool) -> String {
/// returns a horizontal rule of the box of the specified length
fn box_separator(length: usize) -> String {
if length < 2 {
- return format!("");
+ return String::new();
}
format!("{}{}{}", "├", "─".repeat(length - 2), "┤")
}
@@ -142,7 +142,7 @@ pub fn print_banner(commands: Vec, chunk_size: i32) {
let banner = include!("../assets/tari_banner.rs");
let target_line_length = multiline_find_display_length(banner);
for line in banner.lines() {
- println!("{}", line.to_string());
+ println!("{}", line);
}
println!("\n{}", box_line(target_line_length, true));
let logo = include!("../assets/tari_logo.rs");
diff --git a/applications/tari_console_wallet/src/automation/command_parser.rs b/applications/tari_console_wallet/src/automation/command_parser.rs
index 14008cd027..aeb52f2ee7 100644
--- a/applications/tari_console_wallet/src/automation/command_parser.rs
+++ b/applications/tari_console_wallet/src/automation/command_parser.rs
@@ -93,16 +93,16 @@ impl Display for ParsedArgument {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
use ParsedArgument::*;
match self {
- Amount(v) => write!(f, "{}", v.to_string()),
- PublicKey(v) => write!(f, "{}", v.to_string()),
- Text(v) => write!(f, "{}", v.to_string()),
- Float(v) => write!(f, "{}", v.to_string()),
- Int(v) => write!(f, "{}", v.to_string()),
- Date(v) => write!(f, "{}", v.to_string()),
- OutputToCSVFile(v) => write!(f, "{}", v.to_string()),
- CSVFileName(v) => write!(f, "{}", v.to_string()),
- Address(v) => write!(f, "{}", v.to_string()),
- Negotiated(v) => write!(f, "{}", v.to_string()),
+ Amount(v) => write!(f, "{}", v),
+ PublicKey(v) => write!(f, "{}", v),
+ Text(v) => write!(f, "{}", v),
+ Float(v) => write!(f, "{}", v),
+ Int(v) => write!(f, "{}", v),
+ Date(v) => write!(f, "{}", v),
+ OutputToCSVFile(v) => write!(f, "{}", v),
+ CSVFileName(v) => write!(f, "{}", v),
+ Address(v) => write!(f, "{}", v),
+ Negotiated(v) => write!(f, "{}", v),
Hash(v) => write!(f, "{}", v.to_hex()),
}
}
diff --git a/applications/tari_console_wallet/src/ui/components/network_tab.rs b/applications/tari_console_wallet/src/ui/components/network_tab.rs
index 07cf31e4be..146262c117 100644
--- a/applications/tari_console_wallet/src/ui/components/network_tab.rs
+++ b/applications/tari_console_wallet/src/ui/components/network_tab.rs
@@ -316,8 +316,7 @@ impl NetworkTab {
},
Err(e) => {
warn!(target: LOG_TARGET, "Could not set custom base node peer: {}", e);
- self.error_message =
- Some(format!("Error setting new Base Node Address:\n{}", e.to_string()));
+ self.error_message = Some(format!("Error setting new Base Node Address:\n{}", e));
self.address_field = self.previous_address_field.clone();
self.public_key_field = self.previous_public_key_field.clone();
},
@@ -336,8 +335,7 @@ impl NetworkTab {
if let Some(peer) = self.detailed_base_node.clone() {
if let Err(e) = Handle::current().block_on(app_state.set_base_node_peer(peer)) {
warn!(target: LOG_TARGET, "Could not set new base node peer: {}", e);
- self.error_message =
- Some(format!("Error setting new Base Node Address:\n{}", e.to_string()));
+ self.error_message = Some(format!("Error setting new Base Node Address:\n{}", e));
}
}
@@ -443,7 +441,7 @@ impl Component for NetworkTab {
},
Err(e) => {
warn!(target: LOG_TARGET, "Could not set custom base node peer: {}", e);
- self.error_message = Some(format!("Error setting new Base Node Address:\n{}", e.to_string()));
+ self.error_message = Some(format!("Error setting new Base Node Address:\n{}", e));
self.address_field = self.previous_address_field.clone();
self.public_key_field = self.previous_public_key_field.clone();
},
diff --git a/applications/test_faucet/src/main.rs b/applications/test_faucet/src/main.rs
index 678f7287a1..da784d4249 100644
--- a/applications/test_faucet/src/main.rs
+++ b/applications/test_faucet/src/main.rs
@@ -105,7 +105,7 @@ async fn write_keys(mut rx: mpsc::Receiver<(TransactionOutput, PrivateKey, Micro
println!("{} outputs written", written);
}
},
- Err(e) => println!("{}", e.to_string()),
+ Err(e) => println!("{}", e),
}
}
let (pk, sig) = test_helpers::create_random_signature_from_s_key(key_sum, 0.into(), 0);
diff --git a/base_layer/core/src/consensus/emission.rs b/base_layer/core/src/consensus/emission.rs
index 6477765913..0a3df90052 100644
--- a/base_layer/core/src/consensus/emission.rs
+++ b/base_layer/core/src/consensus/emission.rs
@@ -141,8 +141,7 @@ impl EmissionSchedule {
/// This is an infinite iterator, and each value returned is a tuple of (block number, reward, and total supply)
///
/// ```edition2018
- /// use tari_core::consensus::emission::EmissionSchedule;
- /// use tari_core::transactions::tari_amount::MicroTari;
+ /// use tari_core::{consensus::emission::EmissionSchedule, transactions::tari_amount::MicroTari};
/// // Print the reward and supply for first 100 blocks
/// let schedule = EmissionSchedule::new(10.into(), &[3], 1.into());
/// for (n, reward, supply) in schedule.iter().take(100) {
diff --git a/base_layer/core/src/proof_of_work/monero_rx/pow_data.rs b/base_layer/core/src/proof_of_work/monero_rx/pow_data.rs
index 42466a91ee..cba4ed9817 100644
--- a/base_layer/core/src/proof_of_work/monero_rx/pow_data.rs
+++ b/base_layer/core/src/proof_of_work/monero_rx/pow_data.rs
@@ -83,7 +83,7 @@ impl Display for MoneroPowData {
fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result {
writeln!(fmt, "MoneroBlockHeader: {} ", self.header)?;
writeln!(fmt, "RandomX vm key: {}", self.randomx_key.to_hex())?;
- writeln!(fmt, "Monero tx count: {}", self.transaction_count.to_string())?;
+ writeln!(fmt, "Monero tx count: {}", self.transaction_count)?;
writeln!(fmt, "Monero tx root: {}", to_hex(self.merkle_root.as_bytes()))?;
writeln!(fmt, "Monero coinbase tx: {}", self.coinbase_tx)
}
diff --git a/base_layer/core/src/proof_of_work/randomx_factory.rs b/base_layer/core/src/proof_of_work/randomx_factory.rs
index 67fcdaca5c..0bf3b78310 100644
--- a/base_layer/core/src/proof_of_work/randomx_factory.rs
+++ b/base_layer/core/src/proof_of_work/randomx_factory.rs
@@ -1,6 +1,6 @@
use std::{
collections::HashMap,
- sync::{Arc, Mutex, RwLock},
+ sync::{Arc, RwLock},
time::Instant,
};
@@ -11,13 +11,18 @@ use crate::proof_of_work::monero_rx::MergeMineError;
const LOG_TARGET: &str = "c::pow::randomx_factory";
+struct RandomXVMInstanceInner {
+ vm: RandomXVM,
+ _cache: RandomXCache,
+ _dataset: Option,
+}
+
#[derive(Clone)]
pub struct RandomXVMInstance {
// Note: If a cache and dataset (if assigned) allocated to the VM drops, the VM will crash.
// The cache and dataset for the VM need to be stored together with it since they are not
// mix and match.
- instance: Arc)>>,
- _flags: RandomXFlag,
+ instance: Arc>,
}
impl RandomXVMInstance {
@@ -49,16 +54,23 @@ impl RandomXVMInstance {
// light mode. These are not set by RandomX automatically even in fast mode.
Ok(Self {
- instance: Arc::new(Mutex::new((vm, cache, None))),
- _flags: flags,
+ instance: Arc::new(RwLock::new(RandomXVMInstanceInner {
+ vm,
+ _cache: cache,
+ _dataset: None,
+ })),
})
}
pub fn calculate_hash(&self, input: &[u8]) -> Result, RandomXError> {
- self.instance.lock().unwrap().0.calculate_hash(input)
+ self.instance.read().unwrap().vm.calculate_hash(input)
}
}
+// TODO: Find a better way of marking this Send and Sync
+// This type should be Send and Sync since it is wrapped in an Arc RwLock, but
+// for some reason Rust and clippy don't see it automatically.
+#[allow(clippy::non_send_fields_in_send_ty)]
unsafe impl Send for RandomXVMInstance {}
unsafe impl Sync for RandomXVMInstance {}
diff --git a/base_layer/core/src/transactions/tari_amount.rs b/base_layer/core/src/transactions/tari_amount.rs
index 664c421cd3..06dca76185 100644
--- a/base_layer/core/src/transactions/tari_amount.rs
+++ b/base_layer/core/src/transactions/tari_amount.rs
@@ -58,10 +58,10 @@ pub enum MicroTariError {
}
/// A convenience constant that makes it easier to define Tari amounts.
/// ```edition2018
-/// use tari_core::transactions::tari_amount::{MicroTari, uT, T};
-/// assert_eq!(MicroTari::from(42), 42 * uT);
-/// assert_eq!(1 * T, 1_000_000.into());
-/// assert_eq!(3_000_000 * uT, 3 * T);
+/// use tari_core::transactions::tari_amount::{uT, MicroTari, T};
+/// assert_eq!(MicroTari::from(42), 42 * uT);
+/// assert_eq!(1 * T, 1_000_000.into());
+/// assert_eq!(3_000_000 * uT, 3 * T);
/// ```
#[allow(non_upper_case_globals)]
pub const uT: MicroTari = MicroTari(1);
diff --git a/base_layer/core/src/transactions/transaction/transaction_output.rs b/base_layer/core/src/transactions/transaction/transaction_output.rs
index 85f688f762..21fc785307 100644
--- a/base_layer/core/src/transactions/transaction/transaction_output.rs
+++ b/base_layer/core/src/transactions/transaction/transaction_output.rs
@@ -340,11 +340,7 @@ impl Display for TransactionOutput {
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
let proof = self.proof.to_hex();
let proof = if proof.len() > 32 {
- format!(
- "{}..{}",
- proof[0..16].to_string(),
- proof[proof.len() - 16..proof.len()].to_string()
- )
+ format!("{}..{}", &proof[0..16], &proof[proof.len() - 16..proof.len()])
} else {
proof
};
diff --git a/base_layer/key_manager/src/cipher_seed.rs b/base_layer/key_manager/src/cipher_seed.rs
index 612dbfd7fe..087ab95a1d 100644
--- a/base_layer/key_manager/src/cipher_seed.rs
+++ b/base_layer/key_manager/src/cipher_seed.rs
@@ -383,9 +383,10 @@ mod test {
match seed.to_mnemonic(&MnemonicLanguage::Spanish, Some("Passphrase".to_string())) {
Ok(mnemonic_seq) => {
- if CipherSeed::from_mnemonic(&mnemonic_seq, Some("WrongPassphrase".to_string())).is_ok() {
- panic!("Should not be able to derive seed with wrong passphrase");
- }
+ assert!(
+ !CipherSeed::from_mnemonic(&mnemonic_seq, Some("WrongPassphrase".to_string())).is_ok(),
+ "Should not be able to derive seed with wrong passphrase"
+ );
},
Err(_e) => panic!("Couldn't convert CipherSeed to Mnemonic"),
}
diff --git a/base_layer/key_manager/src/key_manager.rs b/base_layer/key_manager/src/key_manager.rs
index 8bf50f34d1..a0fff1c38b 100644
--- a/base_layer/key_manager/src/key_manager.rs
+++ b/base_layer/key_manager/src/key_manager.rs
@@ -76,7 +76,7 @@ where
/// Derive a new private key from master key: derived_key=SHA256(master_key||branch_seed||index)
pub fn derive_key(&self, key_index: u64) -> Result, ByteArrayError> {
- let concatenated = format!("{}{}", self.seed.entropy().to_vec().to_hex(), key_index.to_string());
+ let concatenated = format!("{}{}", self.seed.entropy().to_vec().to_hex(), key_index);
match K::from_bytes(D::digest(&concatenated.into_bytes()).as_slice()) {
Ok(k) => Ok(DerivedKey { k, key_index }),
Err(e) => Err(e),
diff --git a/base_layer/service_framework/src/lib.rs b/base_layer/service_framework/src/lib.rs
index 8be866b794..4cfa4e0186 100644
--- a/base_layer/service_framework/src/lib.rs
+++ b/base_layer/service_framework/src/lib.rs
@@ -48,20 +48,20 @@
//! use tari_service_framework::{reply_channel, tower::ServiceExt};
//!
//! block_on(async {
-//! let (mut sender, mut receiver) = reply_channel::unbounded();
+//! let (mut sender, mut receiver) = reply_channel::unbounded();
//!
-//! let (result, _) = futures::join!(
+//! let (result, _) = futures::join!(
//! // Make the request and make progress on the resulting future
//! sender.call_ready("upper"),
//! // At the same time receive the request and reply
//! async move {
-//! let req_context = receiver.next().await.unwrap();
-//! let msg = req_context.request().unwrap().clone();
-//! req_context.reply(msg.to_uppercase());
+//! let req_context = receiver.next().await.unwrap();
+//! let msg = req_context.request().unwrap().clone();
+//! req_context.reply(msg.to_uppercase());
//! }
//! );
//!
-//! assert_eq!(result.unwrap(), "UPPER");
+//! assert_eq!(result.unwrap(), "UPPER");
//! });
//! ```
//!
diff --git a/base_layer/wallet/src/contacts_service/storage/database.rs b/base_layer/wallet/src/contacts_service/storage/database.rs
index 6820c676b6..583a75693e 100644
--- a/base_layer/wallet/src/contacts_service/storage/database.rs
+++ b/base_layer/wallet/src/contacts_service/storage/database.rs
@@ -62,7 +62,7 @@ pub enum DbKeyValuePair {
}
pub enum WriteOperation {
- Upsert(DbKeyValuePair),
+ Upsert(Box),
Remove(DbKey),
}
@@ -121,10 +121,10 @@ where T: ContactsBackend + 'static
let db_clone = self.db.clone();
tokio::task::spawn_blocking(move || {
- db_clone.write(WriteOperation::Upsert(DbKeyValuePair::Contact(
+ db_clone.write(WriteOperation::Upsert(Box::new(DbKeyValuePair::Contact(
contact.public_key.clone(),
contact,
- )))
+ ))))
})
.await
.map_err(|err| ContactsServiceStorageError::BlockingTaskSpawnError(err.to_string()))??;
diff --git a/base_layer/wallet/src/contacts_service/storage/sqlite_db.rs b/base_layer/wallet/src/contacts_service/storage/sqlite_db.rs
index ed1003bacf..0fde8e1bff 100644
--- a/base_layer/wallet/src/contacts_service/storage/sqlite_db.rs
+++ b/base_layer/wallet/src/contacts_service/storage/sqlite_db.rs
@@ -72,7 +72,7 @@ impl ContactsBackend for ContactsServiceSqliteDatabase {
let conn = self.database_connection.get_pooled_connection()?;
match op {
- WriteOperation::Upsert(kvp) => match kvp {
+ WriteOperation::Upsert(kvp) => match *kvp {
DbKeyValuePair::Contact(k, c) => match ContactSql::find(&k.to_vec(), &conn) {
Ok(found_c) => {
let _ = found_c.update(UpdateContact { alias: Some(c.alias) }, &conn)?;
diff --git a/base_layer/wallet/src/output_manager_service/storage/sqlite_db/output_sql.rs b/base_layer/wallet/src/output_manager_service/storage/sqlite_db/output_sql.rs
index b1fabeb84f..b2ef3f79af 100644
--- a/base_layer/wallet/src/output_manager_service/storage/sqlite_db/output_sql.rs
+++ b/base_layer/wallet/src/output_manager_service/storage/sqlite_db/output_sql.rs
@@ -278,7 +278,7 @@ impl OutputSql {
let mut time_locked_balance = Some(None);
let mut pending_incoming_balance = None;
let mut pending_outgoing_balance = None;
- for balance in balance_query_result.clone() {
+ for balance in balance_query_result {
match balance.category.as_str() {
"available_balance" => available_balance = Some(MicroTari::from(balance.amount as u64)),
"time_locked_balance" => time_locked_balance = Some(Some(MicroTari::from(balance.amount as u64))),
diff --git a/base_layer/wallet/src/util/watch.rs b/base_layer/wallet/src/util/watch.rs
index 6ab94fd676..d807f8e8ec 100644
--- a/base_layer/wallet/src/util/watch.rs
+++ b/base_layer/wallet/src/util/watch.rs
@@ -38,19 +38,13 @@ impl Watch {
}
pub async fn changed(&mut self) {
- if self.1.changed().await.is_err() {
- // Result::expect requires E: fmt::Debug and `watch::SendError` is not, this is equivalent
- panic!("watch internal receiver is dropped");
- }
+ assert!(!self.1.changed().await.is_err(), "watch internal receiver is dropped");
}
pub fn send(&self, item: T) {
// PANIC: broadcast becomes infallible because the receiver is owned in Watch and so the failure case is
// unreachable
- if self.sender().send(item).is_err() {
- // Result::expect requires E: fmt::Debug and `watch::SendError` is not, this is equivalent
- panic!("watch internal receiver is dropped");
- }
+ assert!(!self.sender().send(item).is_err(), "watch internal receiver is dropped");
}
fn sender(&self) -> &watch::Sender {
diff --git a/common/src/configuration/bootstrap.rs b/common/src/configuration/bootstrap.rs
index 0fd43c02b3..d3b91ca693 100644
--- a/common/src/configuration/bootstrap.rs
+++ b/common/src/configuration/bootstrap.rs
@@ -337,7 +337,7 @@ where F: Fn(ApplicationType, &Path) -> Result<(), std::io::Error> {
println!(
"Failed to install a new configuration file in {}: {}",
path.to_str().unwrap_or("?"),
- e.to_string()
+ e
)
}
}
diff --git a/common/src/configuration/global.rs b/common/src/configuration/global.rs
index 68ed002223..cbc50065e3 100644
--- a/common/src/configuration/global.rs
+++ b/common/src/configuration/global.rs
@@ -859,6 +859,8 @@ where
)))
}
+// Clippy thinks "socks5" is not lowercase ...?
+#[allow(clippy::match_str_case_mismatch)]
fn network_transport_config(
cfg: &Config,
mut application: ApplicationType,
diff --git a/common/src/logging.rs b/common/src/logging.rs
index e31b079a7d..5e00c871b3 100644
--- a/common/src/logging.rs
+++ b/common/src/logging.rs
@@ -43,7 +43,7 @@ pub fn initialize_logging(config_file: &Path, base_path: &Path) -> bool {
};
if let Err(e) = log4rs::init_file(config_file, Default::default()) {
- println!("We couldn't load a logging configuration file. {}", e.to_string());
+ println!("We couldn't load a logging configuration file. {}", e);
return false;
}
diff --git a/comms/dht/src/actor.rs b/comms/dht/src/actor.rs
index 077f517d99..3936da53f6 100644
--- a/comms/dht/src/actor.rs
+++ b/comms/dht/src/actor.rs
@@ -500,7 +500,7 @@ impl DhtActor {
let dest_node_id = destination
.node_id()
.cloned()
- .or_else(|| destination.public_key().map(|pk| NodeId::from_public_key(pk)));
+ .or_else(|| destination.public_key().map(NodeId::from_public_key));
let connections = match dest_node_id {
Some(node_id) => {
diff --git a/comms/dht/src/outbound/message_params.rs b/comms/dht/src/outbound/message_params.rs
index 6fc70b3ffd..1bd28ad766 100644
--- a/comms/dht/src/outbound/message_params.rs
+++ b/comms/dht/src/outbound/message_params.rs
@@ -41,9 +41,9 @@ use crate::{
/// // the peer with the corresponding secret key of `dest_public_key`.
/// let dest_public_key = CommsPublicKey::default();
/// let params = SendMessageParams::new()
-/// .random(5)
-/// .with_encryption(OutboundEncryption::encrypt_for(dest_public_key))
-/// .finish();
+/// .random(5)
+/// .with_encryption(OutboundEncryption::encrypt_for(dest_public_key))
+/// .finish();
/// ```
#[derive(Debug, Clone)]
pub struct SendMessageParams {
diff --git a/comms/examples/stress/service.rs b/comms/examples/stress/service.rs
index 425672cf06..6d073ff323 100644
--- a/comms/examples/stress/service.rs
+++ b/comms/examples/stress/service.rs
@@ -81,6 +81,7 @@ pub fn start_service(
}
#[derive(Debug)]
+#[allow(clippy::large_enum_variant)]
pub enum StressTestServiceRequest {
BeginProtocol(Peer, StressProtocol, oneshot::Sender>),
Shutdown,
diff --git a/comms/src/memsocket/mod.rs b/comms/src/memsocket/mod.rs
index 669c20bfc7..7ad53423d3 100644
--- a/comms/src/memsocket/mod.rs
+++ b/comms/src/memsocket/mod.rs
@@ -70,9 +70,10 @@ pub fn acquire_next_memsocket_port() -> NonZeroU16 {
let port = NonZeroU16::new(switchboard.1).unwrap_or_else(|| unreachable!());
// The switchboard is full and all ports are in use
- if switchboard.0.len() == (std::u16::MAX - 1) as usize {
- panic!("All memsocket addresses in use!");
- }
+ assert!(
+ !(switchboard.0.len() == (std::u16::MAX - 1) as usize),
+ "All memsocket addresses in use!"
+ );
// Instead of overflowing to 0, resume searching at port 1 since port 0 isn't a
// valid port to bind to.
@@ -119,9 +120,9 @@ pub fn release_memsocket_port(port: NonZeroU16) {
/// ```rust,no_run
/// use std::io::Result;
///
+/// use futures::prelude::*;
/// use tari_comms::memsocket::{MemoryListener, MemorySocket};
/// use tokio::io::*;
-/// use futures::prelude::*;
///
/// async fn write_stormlight(mut stream: MemorySocket) -> Result<()> {
/// let msg = b"The most important step a person can take is always the next one.";
@@ -260,7 +261,7 @@ impl MemoryListener {
/// Ok(stream) => {
/// println!("new connection!");
/// },
- /// Err(e) => { /* connection failed */ }
+ /// Err(e) => { /* connection failed */ },
/// }
/// }
/// # Ok(())}
@@ -309,8 +310,8 @@ impl<'a> Stream for Incoming<'a> {
///
/// ```rust, no_run
/// use futures::prelude::*;
-/// use tokio::io::*;
/// use tari_comms::memsocket::MemorySocket;
+/// use tokio::io::*;
///
/// # async fn run() -> ::std::io::Result<()> {
/// let (mut socket_a, mut socket_b) = MemorySocket::new_pair();
@@ -407,7 +408,7 @@ impl MemorySocket {
impl AsyncRead for MemorySocket {
/// Attempt to read from the `AsyncRead` into `buf`.
- fn poll_read(mut self: Pin<&mut Self>, mut context: &mut Context, buf: &mut ReadBuf<'_>) -> Poll> {
+ fn poll_read(mut self: Pin<&mut Self>, context: &mut Context, buf: &mut ReadBuf<'_>) -> Poll> {
if self.incoming.is_terminated() {
if self.seen_eof {
return Poll::Ready(Err(ErrorKind::UnexpectedEof.into()));
@@ -444,7 +445,7 @@ impl AsyncRead for MemorySocket {
// Either we've exhausted our current buffer or don't have one
_ => {
self.current_buffer = {
- match Pin::new(&mut self.incoming).poll_next(&mut context) {
+ match Pin::new(&mut self.incoming).poll_next(context) {
Poll::Pending => {
// If we've read anything up to this point return the bytes read
if bytes_read > 0 {
diff --git a/comms/src/noise/socket.rs b/comms/src/noise/socket.rs
index 3cdb3c0b67..232989eda7 100644
--- a/comms/src/noise/socket.rs
+++ b/comms/src/noise/socket.rs
@@ -161,7 +161,7 @@ impl NoiseSocket {
}
fn poll_write_all(
- mut context: &mut Context,
+ context: &mut Context,
mut socket: Pin<&mut TSocket>,
buf: &[u8],
offset: &mut usize,
@@ -170,7 +170,7 @@ where
TSocket: AsyncWrite,
{
loop {
- let n = ready!(socket.as_mut().poll_write(&mut context, &buf[*offset..]))?;
+ let n = ready!(socket.as_mut().poll_write(context, &buf[*offset..]))?;
trace!(
target: LOG_TARGET,
"poll_write_all: wrote {}/{} bytes",
@@ -216,7 +216,7 @@ where
}
fn poll_read_exact(
- mut context: &mut Context,
+ context: &mut Context,
mut socket: Pin<&mut TSocket>,
buf: &mut [u8],
offset: &mut usize,
@@ -227,7 +227,7 @@ where
loop {
let mut read_buf = ReadBuf::new(&mut buf[*offset..]);
let prev_rem = read_buf.remaining();
- ready!(socket.as_mut().poll_read(&mut context, &mut read_buf))?;
+ ready!(socket.as_mut().poll_read(context, &mut read_buf))?;
let n = prev_rem
.checked_sub(read_buf.remaining())
.expect("buffer underflow: prev_rem < read_buf.remaining()");
@@ -252,7 +252,7 @@ where
impl NoiseSocket
where TSocket: AsyncRead + Unpin
{
- fn poll_read(&mut self, mut context: &mut Context, buf: &mut [u8]) -> Poll> {
+ fn poll_read(&mut self, context: &mut Context, buf: &mut [u8]) -> Poll> {
loop {
trace!(target: LOG_TARGET, "NoiseSocket ReadState::{:?}", self.read_state);
match self.read_state {
@@ -263,12 +263,7 @@ where TSocket: AsyncRead + Unpin
ref mut buf,
ref mut offset,
} => {
- match ready!(poll_read_u16frame_len(
- &mut context,
- Pin::new(&mut self.socket),
- buf,
- offset
- )) {
+ match ready!(poll_read_u16frame_len(context, Pin::new(&mut self.socket), buf, offset)) {
Ok(Some(frame_len)) => {
// Empty Frame
if frame_len == 0 {
@@ -293,7 +288,7 @@ where TSocket: AsyncRead + Unpin
ref mut offset,
} => {
match ready!(poll_read_exact(
- &mut context,
+ context,
Pin::new(&mut self.socket),
&mut self.buffers.read_encrypted[..(frame_len as usize)],
offset
@@ -369,11 +364,7 @@ where TSocket: AsyncRead + Unpin
impl NoiseSocket
where TSocket: AsyncWrite + Unpin
{
- fn poll_write_or_flush(
- &mut self,
- mut context: &mut Context,
- buf: Option<&[u8]>,
- ) -> Poll>> {
+ fn poll_write_or_flush(&mut self, context: &mut Context, buf: Option<&[u8]>) -> Poll>> {
loop {
trace!(
target: LOG_TARGET,
@@ -436,7 +427,7 @@ where TSocket: AsyncWrite + Unpin
frame_len,
ref buf,
ref mut offset,
- } => match ready!(poll_write_all(&mut context, Pin::new(&mut self.socket), buf, offset)) {
+ } => match ready!(poll_write_all(context, Pin::new(&mut self.socket), buf, offset)) {
Ok(()) => {
self.write_state = WriteState::WriteEncryptedFrame { frame_len, offset: 0 };
},
@@ -452,7 +443,7 @@ where TSocket: AsyncWrite + Unpin
ref mut offset,
} => {
match ready!(poll_write_all(
- &mut context,
+ context,
Pin::new(&mut self.socket),
&self.buffers.write_encrypted[..(frame_len as usize)],
offset
@@ -469,7 +460,7 @@ where TSocket: AsyncWrite + Unpin
}
},
WriteState::Flush => {
- ready!(Pin::new(&mut self.socket).poll_flush(&mut context))?;
+ ready!(Pin::new(&mut self.socket).poll_flush(context))?;
self.write_state = WriteState::Init;
},
WriteState::Eof => return Poll::Ready(Err(io::ErrorKind::WriteZero.into())),
@@ -595,8 +586,8 @@ where TSocket: AsyncRead + AsyncWrite + Unpin
#[derive(Debug)]
enum NoiseState {
- HandshakeState(HandshakeState),
- TransportState(TransportState),
+ HandshakeState(Box),
+ TransportState(Box),
}
macro_rules! proxy_state_method {
@@ -629,7 +620,7 @@ impl NoiseState {
pub fn into_transport_mode(self) -> Result {
match self {
- NoiseState::HandshakeState(state) => Ok(NoiseState::TransportState(state.into_transport_mode()?)),
+ NoiseState::HandshakeState(state) => Ok(NoiseState::TransportState(Box::new(state.into_transport_mode()?))),
_ => Err(snow::Error::State(StateProblem::HandshakeAlreadyFinished)),
}
}
@@ -637,13 +628,13 @@ impl NoiseState {
impl From for NoiseState {
fn from(state: HandshakeState) -> Self {
- NoiseState::HandshakeState(state)
+ NoiseState::HandshakeState(Box::new(state))
}
}
impl From for NoiseState {
fn from(state: TransportState) -> Self {
- NoiseState::TransportState(state)
+ NoiseState::TransportState(Box::new(state))
}
}
diff --git a/comms/src/peer_manager/wrapper.rs b/comms/src/peer_manager/wrapper.rs
index e36b02236c..de6d12dfaf 100644
--- a/comms/src/peer_manager/wrapper.rs
+++ b/comms/src/peer_manager/wrapper.rs
@@ -41,9 +41,10 @@ impl KeyValueStore for KeyValueWrapper
where T: KeyValueStore
{
fn insert(&self, key: u64, value: Peer) -> Result<(), KeyValStoreError> {
- if key == MIGRATION_VERSION_KEY {
- panic!("MIGRATION_VERSION_KEY used in `KeyValueWrapper::insert`. MIGRATION_VERSION_KEY is a reserved key");
- }
+ assert!(
+ !(key == MIGRATION_VERSION_KEY),
+ "MIGRATION_VERSION_KEY used in `KeyValueWrapper::insert`. MIGRATION_VERSION_KEY is a reserved key"
+ );
self.inner.insert(key, value)
}
@@ -88,9 +89,10 @@ where T: KeyValueStore
}
fn delete(&self, key: &u64) -> Result<(), KeyValStoreError> {
- if key == &MIGRATION_VERSION_KEY {
- panic!("MIGRATION_VERSION_KEY used in `KeyValueWrapper::delete`. MIGRATION_VERSION_KEY is a reserved key");
- }
+ assert!(
+ !(key == &MIGRATION_VERSION_KEY),
+ "MIGRATION_VERSION_KEY used in `KeyValueWrapper::delete`. MIGRATION_VERSION_KEY is a reserved key"
+ );
self.inner.delete(key)
}
}
diff --git a/comms/src/protocol/rpc/client/mod.rs b/comms/src/protocol/rpc/client/mod.rs
index 65f8655a74..cfe8ffc9d3 100644
--- a/comms/src/protocol/rpc/client/mod.rs
+++ b/comms/src/protocol/rpc/client/mod.rs
@@ -807,7 +807,7 @@ where TSubstream: AsyncRead + AsyncWrite + Unpin + Send + StreamId
return Err(RpcError::ResponseIdDidNotMatchRequest { actual, expected });
}
continue;
- }
+ },
Err(err) => return Err(err),
}
};
diff --git a/comms/src/protocol/rpc/server/mock.rs b/comms/src/protocol/rpc/server/mock.rs
index 8a5e250464..d9183e746c 100644
--- a/comms/src/protocol/rpc/server/mock.rs
+++ b/comms/src/protocol/rpc/server/mock.rs
@@ -112,7 +112,7 @@ impl RpcRequestMock {
/// // async fn my_method(&self, request: Request<()>) -> Result, RpcStatus> {
/// // self.request_response(request, &self.my_method).await
/// // }
-/// impl RpcMock for MyServiceMock{};
+/// impl RpcMock for MyServiceMock {};
/// ```
#[async_trait]
pub trait RpcMock {
diff --git a/infrastructure/storage/src/lmdb_store/store.rs b/infrastructure/storage/src/lmdb_store/store.rs
index bde9e8a7cf..a00c6fc983 100644
--- a/infrastructure/storage/src/lmdb_store/store.rs
+++ b/infrastructure/storage/src/lmdb_store/store.rs
@@ -721,7 +721,7 @@ impl<'txn, 'db: 'txn> LMDBReadTransaction<'txn, 'db> {
{
match val {
Ok(None) => Ok(None),
- Err(e) => Err(LMDBError::GetError(format!("LMDB get error: {}", e.to_string()))),
+ Err(e) => Err(LMDBError::GetError(format!("LMDB get error: {}", e))),
Ok(Some(v)) => match bincode::deserialize(v) {
// The reference to v is about to be dropped, so we must copy the data now
Ok(val) => Ok(Some(val)),
diff --git a/infrastructure/test_utils/src/enums.rs b/infrastructure/test_utils/src/enums.rs
index a35e41ec61..333eb1b131 100644
--- a/infrastructure/test_utils/src/enums.rs
+++ b/infrastructure/test_utils/src/enums.rs
@@ -38,8 +38,11 @@
/// assert_eq!(age, 123);
/// assert_eq!(name, "Hubert etc.");
///
-/// let e = AnyEnum::Struct{age: 123, name: "Hubert etc."};
-/// unpack_enum!(AnyEnum::Struct{ age, name } = e);
+/// let e = AnyEnum::Struct {
+/// age: 123,
+/// name: "Hubert etc.",
+/// };
+/// unpack_enum!(AnyEnum::Struct { age, name } = e);
/// assert_eq!(age, 123);
/// assert_eq!(name, "Hubert etc.");
///
diff --git a/infrastructure/test_utils/src/futures/async_assert_eventually.rs b/infrastructure/test_utils/src/futures/async_assert_eventually.rs
index f9a1f3ee9d..0449ab101d 100644
--- a/infrastructure/test_utils/src/futures/async_assert_eventually.rs
+++ b/infrastructure/test_utils/src/futures/async_assert_eventually.rs
@@ -40,12 +40,11 @@ macro_rules! async_assert_eventually {
let mut attempts = 0;
while value != $expect {
attempts += 1;
- if attempts > $max_attempts {
- panic!(
- "assert_eventually assertion failed. Expression did not equal value after {} attempts.",
- $max_attempts
- );
- }
+ assert!(
+ attempts <= $max_attempts,
+ "assert_eventually assertion failed. Expression did not equal value after {} attempts.",
+ attempts
+ );
tokio::time::sleep($interval).await;
value = $check_expr;
}
@@ -76,12 +75,11 @@ macro_rules! async_assert {
let mut attempts = 0;
while !($check_expr) {
attempts += 1;
- if attempts > $max_attempts {
- panic!(
- "Assertion failed. Expression was not true after {} attempts.",
- $max_attempts
- );
- }
+ assert!(
+ attempts <= $max_attempts,
+ "Assertion failed. Expression was not true after {} attempts.",
+ $max_attempts
+ );
tokio::time::sleep($interval).await;
}
}};
diff --git a/infrastructure/test_utils/src/futures/mod.rs b/infrastructure/test_utils/src/futures/mod.rs
index 7a2f10333f..cf4165bfa0 100644
--- a/infrastructure/test_utils/src/futures/mod.rs
+++ b/infrastructure/test_utils/src/futures/mod.rs
@@ -30,16 +30,16 @@ mod async_assert_eventually;
/// # use tari_test_utils::counter_context;
///
/// {
-/// let mut my_fut = future::ready(());
-/// counter_context!(cx); // cx variable in scope
-/// assert!(my_fut.poll_unpin(&mut cx).is_ready());
+/// let mut my_fut = future::ready(());
+/// counter_context!(cx); // cx variable in scope
+/// assert!(my_fut.poll_unpin(&mut cx).is_ready());
/// }
///
/// {
-/// let mut my_fut = future::ready(());
-/// counter_context!(cx, counter); // cx and counter variables in scope
-/// assert!(my_fut.poll_unpin(&mut cx).is_ready());
-/// assert_eq!(counter.get(), 0); // `poll` didn't call the waker
+/// let mut my_fut = future::ready(());
+/// counter_context!(cx, counter); // cx and counter variables in scope
+/// assert!(my_fut.poll_unpin(&mut cx).is_ready());
+/// assert_eq!(counter.get(), 0); // `poll` didn't call the waker
/// }
/// ```
#[macro_export]
@@ -63,9 +63,9 @@ macro_rules! counter_context {
/// # use futures::future::{self, FutureExt};
/// # use tari_test_utils::panic_context;
///
-/// let mut my_fut = future::ready(());
-/// panic_context!(cx); // cx variable in scope
-/// assert!(my_fut.poll_unpin(&mut cx).is_ready());
+/// let mut my_fut = future::ready(());
+/// panic_context!(cx); // cx variable in scope
+/// assert!(my_fut.poll_unpin(&mut cx).is_ready());
/// ```
#[macro_export]
macro_rules! panic_context {
diff --git a/infrastructure/test_utils/src/streams/mod.rs b/infrastructure/test_utils/src/streams/mod.rs
index d3b2beabdd..c03a865264 100644
--- a/infrastructure/test_utils/src/streams/mod.rs
+++ b/infrastructure/test_utils/src/streams/mod.rs
@@ -51,7 +51,10 @@ where
///
/// let mut rt = Runtime::new().unwrap();
/// let mut stream = stream::iter(1..10);
-/// assert_eq!(rt.block_on(async { collect_stream!(stream, take=3, timeout=Duration::from_secs(1)) }), vec![1,2,3]);
+/// assert_eq!(
+/// rt.block_on(async { collect_stream!(stream, take = 3, timeout = Duration::from_secs(1)) }),
+/// vec![1, 2, 3]
+/// );
/// ```
#[macro_export]
macro_rules! collect_stream {
@@ -182,8 +185,12 @@ macro_rules! collect_try_recv {
/// # use tari_test_utils::collect_stream_count;
///
/// let rt = Runtime::new().unwrap();
-/// let mut stream = stream::iter(vec![1,2,2,3,2]);
-/// assert_eq!(rt.block_on(async { collect_stream_count!(&mut stream, timeout=Duration::from_secs(1)) }).get(&2), Some(&3));
+/// let mut stream = stream::iter(vec![1, 2, 2, 3, 2]);
+/// assert_eq!(
+/// rt.block_on(async { collect_stream_count!(&mut stream, timeout = Duration::from_secs(1)) })
+/// .get(&2),
+/// Some(&3)
+/// );
/// ```
#[macro_export]
macro_rules! collect_stream_count {
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
index 20c6ecf071..493a995cd4 100644
--- a/rust-toolchain.toml
+++ b/rust-toolchain.toml
@@ -10,4 +10,4 @@
# Hours spent updating the Rust Toolchain = 4
[toolchain]
-channel = "nightly-2021-09-18"
+channel = "nightly-2021-11-20"